PHPMailer 로 외부 SMTP 활용하여 메일 보내기
php 메일을 보내는 방법은 다양하게 있습니다.
간단한 메일을 보낼 때는 내장 함수 mail()를 통해서 사용할 수 있습니다.
이메일 내용이 복잡해지면, 이메일 포맷을 변경하는 것이 어렵고, 복수의 수신자 및 첨부 파일을 포함하는 이메일을 보내는 데 제한이 있을 수 있습니다.
편리한 외부 SMTP을 통해 PHPMailer 라이브러리를 사용하여 메일 보내는 방법을 알아보겠습니다.
- OS : Ubuntu 22.04
- 서버사양 : cpu 2core, ram 4gb
- php -v : 8.1.2
- phpMailer -v : 6.9.1
PHPMailer 다운로드를 위해 composer를 설치합니다.
# apt -y install composer
메일 발송을 위한 디렉토리를 생성하고, 그 안에서 phpMailer를 다운로드 합니다.
# mkdir mail_app
# cd mail_app
# composer require phpmailer/phpmailer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Using version ^6.9 for phpmailer/phpmailer
./composer.json has been created
Running composer update phpmailer/phpmailer
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
– Locking phpmailer/phpmailer (v6.9.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
– Downloading phpmailer/phpmailer (v6.9.1)
– Installing phpmailer/phpmailer (v6.9.1): Extracting archive
7 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more
메일 발송을 위해 아래 내용으로 PHP 소스 코드를 작성합니다.
(SSL를 사용하지 않고 발송하는 예제입니다.)
<?php
// PHPMailer 라이브러리 사용
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require ‘vendor/autoload.php’;
// PHPMailer 인스턴스 생성
$mail = new PHPMailer(true);
try {
// SMTP 서버 설정
$mail->isSMTP();
$mail->Host = ‘mail.idchowto.com’;
$mail->Username = ‘mailtest@idchowto.com’;
$mail->Password = ‘123456789’;
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
$mail->Port = 587;
//$mail->SMTPDebug = 2; // 디버그 레벨 (0은 디버그 비활성화, 2는 상세 디버그)
// 발신자, 수신자, 참조, 숨은 참조
$mail->setFrom(‘mailtest@idchowto.com’, ‘관리자’);
$mail->addAddress(‘mail@idchowto.com’);
// 파일 첨부
//$mail->addAttachment(‘/tmp/file.zip’);
// 메일 내용 설정
$mail->isHTML(true);
$mail->CharSet = ‘UTF-8’;
$mail->Subject = ‘메일 제목입니다.’;
$mail->Body = ‘메일 <b>내용</b>입니다. 잘 발송이 되었나요?’;
$mail->AltBody = ‘HTML 미지원 환경에서는 내용이 보이지 않습니다.’;
// 메일 전송
$mail->send();
echo ‘The Email has been sent successfully.’;
} catch (Exception $e) {
echo “Email could not be sent. Mailer Error: {$mail->ErrorInfo}”;
}
?>
작성한 php 파일을 실행하여 메일을 발송합니다.
참고( sned php 실행시 실행 서버 아이피를 smtp 서버에서 Relay 설정하였는지 확인합니다.)
# php send.php
The Email has been sent successfully.
정상적으로 발송이되었습니다.
참고 링크 : https://sysdocu.tistory.com/1899