- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
115 lines
5.4 KiB
PHP
115 lines
5.4 KiB
PHP
<?php
|
|
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php'; // 운영 서버에서의 경로
|
|
|
|
// POST 데이터 안전하게 가져오기 (PHP 7.3 호환)
|
|
$email = isset($_POST['email']) ? $_POST['email'] : '';
|
|
$vendorName = isset($_POST['vendorName']) ? $_POST['vendorName'] : '';
|
|
$filename = isset($_POST['filename']) ? $_POST['filename'] : ''; // 전달받은 파일명
|
|
$item = isset($_POST['item']) ? $_POST['item'] : ''; // 거래명세표, 견적서, 총거래원장 등 선택
|
|
$issueDate = isset($_POST['formattedDate']) ? $_POST['formattedDate'] : ''; // [24.07.30]형태의 날짜
|
|
$sendCompany = '(주)경동기업';
|
|
|
|
function sendInvoiceEmail($to, $vendorName, $sendCompany, $issueDate, $item, $filename = null) {
|
|
$mail = new PHPMailer(true);
|
|
|
|
$setFrom_email = 'kd5130@naver.com'; // 보내는 회사이메일
|
|
$email = $setFrom_email ; // 보내는 회사이메일 표기되는 것
|
|
// 네이버 SMTP 비밀번호 설정
|
|
// 참고: 일부 계정은 기본 비밀번호로도 작동할 수 있습니다
|
|
// 만약 인증 오류가 발생하면 앱 비밀번호를 사용하세요
|
|
// 앱 비밀번호 생성: 네이버 설정 → 보안 → 2단계 인증 활성화 → 앱 비밀번호 생성
|
|
$password = 'kd9835130'; // 메일 패스워드 (기본 비밀번호 또는 앱 비밀번호)
|
|
$setFrom_company = $sendCompany ; // 보내는 회사
|
|
$phone = '031-983-5130';
|
|
|
|
try {
|
|
// SMTP 디버그 모드 활성화 (문제 해결 시에만 사용)
|
|
// 0: 디버그 비활성화, 1: 클라이언트 메시지, 2: 클라이언트/서버 메시지, 3: 연결 정보 포함
|
|
$mail->SMTPDebug = 0; // 문제 해결 시 2로 변경하여 상세 로그 확인
|
|
|
|
$mail->isSMTP();
|
|
$mail->Host = 'smtp.naver.com';
|
|
$mail->SMTPAuth = true;
|
|
$mail->Username = $setFrom_email;
|
|
$mail->Password = $password;
|
|
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
|
|
$mail->Port = 465;
|
|
|
|
// 타임아웃 설정 추가 (PHP 7.3 호환)
|
|
$mail->Timeout = 30;
|
|
$mail->SMTPKeepAlive = true;
|
|
|
|
$mail->CharSet = 'UTF-8';
|
|
|
|
$mail->setFrom($setFrom_email, $setFrom_company);
|
|
$mail->addAddress($to);
|
|
|
|
// 첨부파일 추가
|
|
if ($filename && !empty($filename)) {
|
|
$filePath = $_SERVER['DOCUMENT_ROOT'] . '/pdfs/' . basename($filename); // 파일 경로
|
|
|
|
// 파일 존재 여부 및 권한 확인
|
|
if (!file_exists($filePath)) {
|
|
throw new Exception("첨부파일을 찾을 수 없습니다: {$filePath}");
|
|
}
|
|
|
|
if (!is_readable($filePath)) {
|
|
throw new Exception("첨부파일을 읽을 수 없습니다: {$filePath}");
|
|
}
|
|
|
|
$mail->addAttachment($filePath);
|
|
}
|
|
|
|
$mail->isHTML(true);
|
|
$mail->Subject = '[' . $sendCompany . '](으)로부터 [' . $item . '](이)가 도착했습니다. ' . $issueDate;
|
|
|
|
// HTML 내용 작성
|
|
$mail->Body = '
|
|
<html>
|
|
<body>
|
|
<p>수신 : ' . htmlspecialchars($vendorName, ENT_QUOTES, 'UTF-8') . '</p> <br>
|
|
<p>' . htmlspecialchars($sendCompany, ENT_QUOTES, 'UTF-8') . '(으)로부터 ' . htmlspecialchars($item, ENT_QUOTES, 'UTF-8') . '(이)가 도착하였습니다.</p>
|
|
<br>
|
|
<table border="1" style="border-collapse: collapse; width: 100%;">
|
|
<tr>
|
|
<th style="padding: 8px; text-align: left;">보낸회사</th>
|
|
<td style="padding: 8px;">' . htmlspecialchars($sendCompany, ENT_QUOTES, 'UTF-8') . '</td>
|
|
<th style="padding: 8px; text-align: left;">발행일자</th>
|
|
<td style="padding: 8px;">' . htmlspecialchars($issueDate, ENT_QUOTES, 'UTF-8') . '</td>
|
|
</tr>
|
|
<tr>
|
|
<th style="padding: 8px; text-align: left;">Email</th>
|
|
<td style="padding: 8px;">' . htmlspecialchars($email, ENT_QUOTES, 'UTF-8') . '</td>
|
|
<th style="padding: 8px; text-align: left;">연락처</th>
|
|
<td style="padding: 8px;">' . htmlspecialchars($phone, ENT_QUOTES, 'UTF-8') . '</td>
|
|
</tr>
|
|
<tr>
|
|
<th style="padding: 8px; text-align: left;">메모</th>
|
|
<td style="padding: 8px;" colspan="3"></td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>';
|
|
|
|
$mail->AltBody = '수신 : ' . $vendorName . '\n' . $sendCompany . '(으)로부터 ' . $item . '(이)가 도착하였습니다.\n보낸회사: ' . $sendCompany . '\n발행일자: ' . $issueDate . '\nEmail: kd5130@naver.com\n연락처: 031-983-5130 \n메모:';
|
|
|
|
// 읽음 확인 설정
|
|
$mail->addCustomHeader('Disposition-Notification-To', $setFrom_email);
|
|
$mail->addCustomHeader('Return-Receipt-To', $setFrom_email);
|
|
|
|
$mail->send();
|
|
echo json_encode(array('success' => true, 'message' => '메일이 전송되었습니다.'));
|
|
} catch (Exception $e) {
|
|
$errorMessage = "메일 전송 실패: " . $e->getMessage();
|
|
error_log($errorMessage); // 서버 로그에 기록
|
|
echo json_encode(array('success' => false, 'error' => $errorMessage));
|
|
}
|
|
}
|
|
|
|
sendInvoiceEmail($email, $vendorName, $sendCompany, $issueDate, $item, $filename);
|
|
?>
|