Files
sam-kd/email/send_email.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

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);
?>