[php] PHPMailer 로 외부 SMTP 활용하여 메일 보내기
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
'프로그래밍 > PHP' 카테고리의 다른 글
Rocky Linux 9.x, PHP 8.1.x 환경에서 Laravel 10.33.0 설치하기 (0) | 2023.11.23 |
---|---|
PHP 코드를 실행해주는 사이트 (버전 선택 가능) (0) | 2023.11.17 |
PHP 소켓 (server.php, client.php) - 데이터 전달 예제 (0) | 2023.07.07 |
PHP 에서 SQL Injection 방지 쿼리 사용법 두가지 (bind_param, PDO) (0) | 2022.08.30 |
PHP 날짜 비교하기 (0) | 2022.04.13 |