require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$phpmailer = new PHPMailer(true);
// -> 연산자는 객체의 메서드나 속성에 접근하는 데 사용됩니다.
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.gmail.com'; // 메일을 보내는 smtp 서버 주소
$phpmailer->SMTPAuth = true; // smtp 서버에 연결할때 인증해라
$phpmailer->Username = 'your_email@gmail.com'; // smtp 서버 메일주소
$phpmailer->Password = 'your_password'; // smtp 서버 비밀번호
$phpmailer->SMTPSecure = 'tls'; // smtp 보안방식: tls
$phpmailer->Port = 587; // tls에 상응하는 포트번호
$phpmailer->setFrom('your_email@gmail.com', 'Your Name');
$sql = "SELECT user_email FROM member WHERE AdminYN = 'Y' AND UseYN = 'Y'";
$result = $db->query($sql);
$emails = array();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$email = $row['user_email'];
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emails[] = $email; // 배열에 추가
foreach ($emails as $email) {
$phpmailer->addAddress($email);
}
} else {
echo "유효하지 않은 이메일 주소: $email<br>";
}
}
} else {
echo "주소록에 추가할 수신자가 없습니다.";
}
$phpmailer->isHTML(true); // 이메일 본문이 HTML 형식으로 작성. true로 설정하면 HTML 태그가 있는 본문을 사용할 수 있다.
$phpmailer->CharSet = 'UTF-8'; // 인코딩 방식
$phpmailer->Subject = 'Your Subject'; // 제목
$phpmailer->Body = 'Your HTML content here'; // 본문
try {
$response = ['status' => 'success', 'message' => 'Email Send Success'];
$phpmailer->send(); // 메일 발송 코드
echo "메일이 성공적으로 발송되었습니다.";
} catch (Exception $e) {
$response = ['status' => 'error', 'message' => 'Email Send Fail : ' . $phpmailer->ErrorInfo];
echo '예외 발생: ' . $e->getMessage();
}
echo json_encode($response);
1) $mail->ErrorInfo는 PHPMailer가 실행되는 동안 발생한 최근 오류에 대한 상세한 정보를 포함합니다. 이 정보는 PHPMailer 내부에서 발생한 오류에 대한 구체적인 설명을 제공합니다. PHPMailer가 예외를 던지지 않은 상황에서도 사용할 수 있습니다.
2) $e->getMessage()는 catch 블록에서 잡힌 예외 객체에 대한 상세한 메시지를 반환합니다. 이 메시지는 예외가 발생한 원인에 대한 정보를 포함하며, PHPMailer에 한정되지 않고 PHP의 다른 부분에서 발생한 예외에도 사용됩니다.이는 try 블록 내에서 발생한 모든 종류의 예외에 대한 정보를 제공하고 $phpmailer = new PHPMailer(true);를 사용하면 PHPMailer의 오류가 예외로 처리되며, 이 예외는 catch 블록에서 $e->getMessage()를 통해 상세한 메시지로 접근할 수 있습니다. 이러한 접근 방식은 오류 관리와 디버깅에 매우 유용합니다.
3) echo json_encode($response);를 통해서 성공과 실패시의 상황을 html 에서 joson 형식으로 보고 디버깅 하면 유용합니다.
$db->close();
1) 자원 해제: 데이터베이스 연결은 시스템 자원을 사용합니다. 연결을 닫음으로써 이러한 자원을 해제하고, 시스템의 효율성과 성능을 유지할 수 있습니다.
2) 보안: 열려 있는 데이터베이스 연결은 보안에 취약점이 될 수 있습니다. 연결을 닫으면 불필요한 접근으로부터 보호할 수 있습니다.
3) 안정성: 데이터베이스 연결을 적절히 관리하지 않으면, 시간이 지남에 따라 연결 오류나 메모리 누수와 같은 문제가 발생할 수 있습니다. 연결을 닫음으로써 이러한 문제를 예방할 수 있습니다.
4) 트랜잭션 관리: 특히 트랜잭션을 사용하는 경우, 연결을 닫는 것은 트랜잭션이 올바르게 종료되고, 변경 사항이 데이터베이스에 반영되도록 보장합니다.
5) 연결 한계: 대부분의 데이터베이스 시스템은 동시에 열 수 있는 연결의 수에 한계가 있습니다. 불필요한 연결을 닫음으로써 시스템의 한계치를 넘지 않도록 할 수 있습니다.
요약: $db->close();는 데이터베이스 작업이 끝난 후 필요한 자원을 정리하고, 시스템의 안정성과 성능을 유지하기 위해 필수적인 작업입니다.