[php] PHPMailer 로 외부 SMTP 활용하여 메일 보내기

프로그래밍/PHP|2024. 2. 8. 08:25
반응형

PHP 를 사용하여 SMTP 를 통해 이메일을 보내는 방법은 PHPMailer 와 같은 외부 라이브러리를 사용하는 것이 편리합니다. 다음은 PHPMailer 를 사용한 간단한 예제입니다.

먼저, PHPMailer 다운로드를 위해 composer 를 설치 합니다.

# apt -y install composer    // Ubuntu 의 경우

 

메일 발송을 위한 프로젝트 디렉토리를 생성하고 그 안에서 PHPMailer 를 다운로드 합니다.

작성일 기준으로 6.9.1 버전이 설치됩니다.

# 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
  - 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 를 사용하지 않고 발송하는 예제입니다.

# vi send.php

<?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.sysdocu.kr';
    $mail->Username = 'admin@sysdocu.kr';
    $mail->Password = '12345678';
    $mail->SMTPSecure = false;
    $mail->SMTPAutoTLS = false;
    $mail->Port = 25;
    //$mail->SMTPDebug = 2;  // 디버그 레벨 (0은 디버그 비활성화, 2는 상세 디버그)

    // 발신자, 수신자, 참조, 숨은 참조
    $mail->setFrom('admin@sysdocu.kr', '관리자');
    $mail->addAddress('sysdocu@sysdocu.kr');
    //$mail->addCC('user@sysdocu.kr');
    //$mail->addBCC('manager@sysdocu.kr');

    // 파일 첨부
    //$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 파일을 실행하여 메일을 발송합니다.

# php send.php

 

* 참고 1

외부 SMTP 를 사용할 때 아래와 같이 설정하는 경우도 있으니 참고하시기 바랍니다.

    // SMTP 서버 설정
    $mail->isSMTP();
    $mail->Host = 'gw.sysdocu.kr';
    $mail->SMTPAuth = true;
    $mail->Username = 'admin@sysdocu.kr';
    $mail->Password = 'Mm*nBFu2Pt%qjNf@XLc7e9H1V6CIa(zr';
    $mail->SMTPSecure = false;
    $mail->SMTPAutoTLS = false;
    $mail->Port = 587;

 

* 참고 2

발송이 되지 않을 경우 SMTP 서버에서 메일 발송 IP (send.php 실행 IP : 115.68.142.120) 를 Relay 설정 하였는지 확인합니다.

예) Sendmail 의 경우

# echo "Connect:115.68.142.120 RELAY" >> /etc/mail/access

# makemap hash /etc/mail/access.db < /etc/mail/access

# systemctl restart sendmail

 

반응형

댓글()