PHPMailer로 STMP 메일 보내기
개요
SMTP를 통해 메일을 보내기 전에 PHPMailer 를 사용한 노트입니다.
환경적 이유로 컴퓨터를 사용하지 않고 원본 코드를 다운로드하고 실행합니다.
PHPMailer는 글을 업데이트할 때 최신 버전을 사용합니다.
PHPMailer 준비
공식 Github 자료 라이브러리 출처를 얻습니다.
zip은 Clone or download에서 다운로드할 수 있습니다.
zip 압축을 풀면 "PHPMailer-master"라는 디렉터리를 만들 수 있습니다.
사용이 편리함을 고려하여 "PHPMailer"로 이름을 바꾸어 디렉터리마다 좋아하는 곳에 두십시오.
PHPMailer 구현
먼저 필요한 파일을 읽습니다.
Composer를 사용하지 않으므로 require
에서 각 파일을 읽어야 합니다.
send_mail.php<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
// 設置した場所のパスを指定する
require('path/to/PHPMailer/src/PHPMailer.php');
require('path/to/PHPMailer/src/Exception.php');
require('path/to/PHPMailer/src/SMTP.php');
// Composerを利用した場合、requireは下記だけでOK
// require('path/to/vendor/autoload.php');
:
:
// 続きの処理
다음은 메일 발송 부분을 실시합니다.
세부 옵션은 Github 샘플 에도 포함되어 있습니다.
send_mail.php// 文字エンコードを指定
mb_language('uni');
mb_internal_encoding('UTF-8');
// インスタンスを生成(true指定で例外を有効化)
$mail = new PHPMailer(true);
// 文字エンコードを指定
$mail->CharSet = 'utf-8';
try {
// デバッグ設定
// $mail->SMTPDebug = 2; // デバッグ出力を有効化(レベルを指定)
// $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
// SMTPサーバの設定
$mail->isSMTP(); // SMTPの使用宣言
$mail->Host = 'mail.example.com'; // SMTPサーバーを指定
$mail->SMTPAuth = true; // SMTP authenticationを有効化
$mail->Username = '[email protected]'; // SMTPサーバーのユーザ名
$mail->Password = 'password'; // SMTPサーバーのパスワード
$mail->SMTPSecure = 'tls'; // 暗号化を有効(tls or ssl)無効の場合はfalse
$mail->Port = 465; // TCPポートを指定(tlsの場合は465や587)
// 送受信先設定(第二引数は省略可)
$mail->setFrom('[email protected]', '差出人名'); // 送信者
$mail->addAddress('[email protected]', '受信者名'); // 宛先
$mail->addReplyTo('[email protected]', 'お問い合わせ'); // 返信先
$mail->addCC('[email protected]', '受信者名'); // CC宛先
$mail->Sender = '[email protected]'; // Return-path
// 送信内容設定
$mail->Subject = '件名';
$mail->Body = 'メッセージ本文';
// 送信
$mail->send();
} catch (Exception $e) {
// エラーの場合
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
구현 요점
여러 대상 지정
여러 수신자 또는 CC를 지정할 수 있습니다.$mail->addAddress('[email protected]');
$mail->addAddress('[email protected]');
일본어 코드
일본어가 엉망이라면 mb_encode_mimeheader()
로 인코딩하세요.$mail->setFrom('[email protected]', mb_encode_mimeheader('差出人名'));
PHPMailer 상수
PHPMailer에는 미리 정의된 상수 가 있습니다.
상수로 값을 지정할 수도 있고 스스로 기술할 수도 있다.// どの書き方でもOK
$mail->SMTPSecure = 'tls';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // tls
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // ssl
$mail->Charset = 'utf-8'
$mail->CharSet = PHPMailer::CHARSET_UTF8; // utf-8
· 암호화(TLS/SSL)를 사용하지 않을 경우
원래 사용하는 것이 비교적 좋지만 서버에 따라 때때로 사용할 수 없다.
암호화를 사용하지 않으면 매개 변수를 명시적으로 지정합니다.// 下記をfalseにする
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
참조: PHPMailer:SMTP 오류: SMTP 호스트에 연결할 수 없습니다.
디버그 로그 출력
디버깅 출력은 아래 두 줄을 통해 진행할 수 있습니다.// デバッグ設定
$mail->SMTPDebug = 3;
$mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
●SMTPDebug
에서 디버깅 모드의 레벨을 지정합니다.
자세한 내용은 공식 Github. 에 나와 있습니다.
● 디버그 내용을 echoDebugoutput
를 통해 확인할 수 있습니다.
메일 서버에 연결되어 메일을 보내는 로그를 출력하기 때문에 비례 외에 포획할 수 있는 내용을 더 상세하게 조사할 수 있다.
디버깅은 echo뿐만 아니라syslog 등에도 출력할 수 있습니다.
참조: PHPMailer 로그를 SYSLOG로 내보내기
▶ 디버그 출력 결과
·E_경고 발생
다음 오류가 발생하면 메일 서버에 연결할 수 없습니다.
(이상이 활성화된 경우에도 여기서 중지될 수 있습니다.)
호스트 이름, 포트 번호, 사용자 이름, 암호 등이 올바른지 확인합니다.E_WARNING stream_set_timeout() expects parameter 1 to be resource,
bool given /path/to/PHPMailer/src/SMTP.php 344
· ssl 오류 발생
PHP 버전에 따라 ssl로 로컬 증명서를 확인합니까?규격이래요.
이런 상황에서 아래의 설정을 보충해야 한다.$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
));
참조: PHP5.6에서 SMTP 호스트가 ssl일 때 주의하세요!
메일 서버 연결 확인
Windows 명령 프롬프트에서 확인하는 방법입니다.
telnet 명령을 사용합니다.
텔넷을 사용할 수 없는 경우
[제어판>프로그램>Windows 기능의 유효화 또는 무효화]
Telnet Client 항목을 선택하고 활성화하십시오.
telnet 메일 서버 호스트 포트 번호
위의 명령을 실행하고 연결할 수 없으면 호스트 이름과 포트를 확인하십시오.
경품: 개발 환경의 메일 발송 테스트
로컬 등 개발 환경에서 메일 서버를 연결할 수 없습니다.
'메일트랩'이라는 서비스가 있는데 그때 간단하게 수발할 수 있다. mailtrap.io
무료 회원으로 가입하면 SMPT/POP3 서버 정보가 제공됩니다.
이 항목을 지정하고 메일을 보내면 모든 메일이 메일랩의 데모박스에 도착합니다.
테스트 메일은 수신자의 메일박스가 아닌 메일랩으로 전송되기 때문에 테스트 메일도 자신의 메일박스를 가득 채우지 않기 때문에 매우 편리하다.
참조 URL
공식 Github 자료 라이브러리 출처를 얻습니다.
zip은 Clone or download에서 다운로드할 수 있습니다.
zip 압축을 풀면 "PHPMailer-master"라는 디렉터리를 만들 수 있습니다.
사용이 편리함을 고려하여 "PHPMailer"로 이름을 바꾸어 디렉터리마다 좋아하는 곳에 두십시오.
PHPMailer 구현
먼저 필요한 파일을 읽습니다.
Composer를 사용하지 않으므로 require
에서 각 파일을 읽어야 합니다.
send_mail.php<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
// 設置した場所のパスを指定する
require('path/to/PHPMailer/src/PHPMailer.php');
require('path/to/PHPMailer/src/Exception.php');
require('path/to/PHPMailer/src/SMTP.php');
// Composerを利用した場合、requireは下記だけでOK
// require('path/to/vendor/autoload.php');
:
:
// 続きの処理
다음은 메일 발송 부분을 실시합니다.
세부 옵션은 Github 샘플 에도 포함되어 있습니다.
send_mail.php// 文字エンコードを指定
mb_language('uni');
mb_internal_encoding('UTF-8');
// インスタンスを生成(true指定で例外を有効化)
$mail = new PHPMailer(true);
// 文字エンコードを指定
$mail->CharSet = 'utf-8';
try {
// デバッグ設定
// $mail->SMTPDebug = 2; // デバッグ出力を有効化(レベルを指定)
// $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
// SMTPサーバの設定
$mail->isSMTP(); // SMTPの使用宣言
$mail->Host = 'mail.example.com'; // SMTPサーバーを指定
$mail->SMTPAuth = true; // SMTP authenticationを有効化
$mail->Username = '[email protected]'; // SMTPサーバーのユーザ名
$mail->Password = 'password'; // SMTPサーバーのパスワード
$mail->SMTPSecure = 'tls'; // 暗号化を有効(tls or ssl)無効の場合はfalse
$mail->Port = 465; // TCPポートを指定(tlsの場合は465や587)
// 送受信先設定(第二引数は省略可)
$mail->setFrom('[email protected]', '差出人名'); // 送信者
$mail->addAddress('[email protected]', '受信者名'); // 宛先
$mail->addReplyTo('[email protected]', 'お問い合わせ'); // 返信先
$mail->addCC('[email protected]', '受信者名'); // CC宛先
$mail->Sender = '[email protected]'; // Return-path
// 送信内容設定
$mail->Subject = '件名';
$mail->Body = 'メッセージ本文';
// 送信
$mail->send();
} catch (Exception $e) {
// エラーの場合
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
구현 요점
여러 대상 지정
여러 수신자 또는 CC를 지정할 수 있습니다.$mail->addAddress('[email protected]');
$mail->addAddress('[email protected]');
일본어 코드
일본어가 엉망이라면 mb_encode_mimeheader()
로 인코딩하세요.$mail->setFrom('[email protected]', mb_encode_mimeheader('差出人名'));
PHPMailer 상수
PHPMailer에는 미리 정의된 상수 가 있습니다.
상수로 값을 지정할 수도 있고 스스로 기술할 수도 있다.// どの書き方でもOK
$mail->SMTPSecure = 'tls';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // tls
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // ssl
$mail->Charset = 'utf-8'
$mail->CharSet = PHPMailer::CHARSET_UTF8; // utf-8
· 암호화(TLS/SSL)를 사용하지 않을 경우
원래 사용하는 것이 비교적 좋지만 서버에 따라 때때로 사용할 수 없다.
암호화를 사용하지 않으면 매개 변수를 명시적으로 지정합니다.// 下記をfalseにする
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
참조: PHPMailer:SMTP 오류: SMTP 호스트에 연결할 수 없습니다.
디버그 로그 출력
디버깅 출력은 아래 두 줄을 통해 진행할 수 있습니다.// デバッグ設定
$mail->SMTPDebug = 3;
$mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
●SMTPDebug
에서 디버깅 모드의 레벨을 지정합니다.
자세한 내용은 공식 Github. 에 나와 있습니다.
● 디버그 내용을 echoDebugoutput
를 통해 확인할 수 있습니다.
메일 서버에 연결되어 메일을 보내는 로그를 출력하기 때문에 비례 외에 포획할 수 있는 내용을 더 상세하게 조사할 수 있다.
디버깅은 echo뿐만 아니라syslog 등에도 출력할 수 있습니다.
참조: PHPMailer 로그를 SYSLOG로 내보내기
▶ 디버그 출력 결과
·E_경고 발생
다음 오류가 발생하면 메일 서버에 연결할 수 없습니다.
(이상이 활성화된 경우에도 여기서 중지될 수 있습니다.)
호스트 이름, 포트 번호, 사용자 이름, 암호 등이 올바른지 확인합니다.E_WARNING stream_set_timeout() expects parameter 1 to be resource,
bool given /path/to/PHPMailer/src/SMTP.php 344
· ssl 오류 발생
PHP 버전에 따라 ssl로 로컬 증명서를 확인합니까?규격이래요.
이런 상황에서 아래의 설정을 보충해야 한다.$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
));
참조: PHP5.6에서 SMTP 호스트가 ssl일 때 주의하세요!
메일 서버 연결 확인
Windows 명령 프롬프트에서 확인하는 방법입니다.
telnet 명령을 사용합니다.
텔넷을 사용할 수 없는 경우
[제어판>프로그램>Windows 기능의 유효화 또는 무효화]
Telnet Client 항목을 선택하고 활성화하십시오.
telnet 메일 서버 호스트 포트 번호
위의 명령을 실행하고 연결할 수 없으면 호스트 이름과 포트를 확인하십시오.
경품: 개발 환경의 메일 발송 테스트
로컬 등 개발 환경에서 메일 서버를 연결할 수 없습니다.
'메일트랩'이라는 서비스가 있는데 그때 간단하게 수발할 수 있다. mailtrap.io
무료 회원으로 가입하면 SMPT/POP3 서버 정보가 제공됩니다.
이 항목을 지정하고 메일을 보내면 모든 메일이 메일랩의 데모박스에 도착합니다.
테스트 메일은 수신자의 메일박스가 아닌 메일랩으로 전송되기 때문에 테스트 메일도 자신의 메일박스를 가득 채우지 않기 때문에 매우 편리하다.
참조 URL
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
// 設置した場所のパスを指定する
require('path/to/PHPMailer/src/PHPMailer.php');
require('path/to/PHPMailer/src/Exception.php');
require('path/to/PHPMailer/src/SMTP.php');
// Composerを利用した場合、requireは下記だけでOK
// require('path/to/vendor/autoload.php');
:
:
// 続きの処理
// 文字エンコードを指定
mb_language('uni');
mb_internal_encoding('UTF-8');
// インスタンスを生成(true指定で例外を有効化)
$mail = new PHPMailer(true);
// 文字エンコードを指定
$mail->CharSet = 'utf-8';
try {
// デバッグ設定
// $mail->SMTPDebug = 2; // デバッグ出力を有効化(レベルを指定)
// $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
// SMTPサーバの設定
$mail->isSMTP(); // SMTPの使用宣言
$mail->Host = 'mail.example.com'; // SMTPサーバーを指定
$mail->SMTPAuth = true; // SMTP authenticationを有効化
$mail->Username = '[email protected]'; // SMTPサーバーのユーザ名
$mail->Password = 'password'; // SMTPサーバーのパスワード
$mail->SMTPSecure = 'tls'; // 暗号化を有効(tls or ssl)無効の場合はfalse
$mail->Port = 465; // TCPポートを指定(tlsの場合は465や587)
// 送受信先設定(第二引数は省略可)
$mail->setFrom('[email protected]', '差出人名'); // 送信者
$mail->addAddress('[email protected]', '受信者名'); // 宛先
$mail->addReplyTo('[email protected]', 'お問い合わせ'); // 返信先
$mail->addCC('[email protected]', '受信者名'); // CC宛先
$mail->Sender = '[email protected]'; // Return-path
// 送信内容設定
$mail->Subject = '件名';
$mail->Body = 'メッセージ本文';
// 送信
$mail->send();
} catch (Exception $e) {
// エラーの場合
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
$mail->addAddress('[email protected]');
$mail->addAddress('[email protected]');
$mail->setFrom('[email protected]', mb_encode_mimeheader('差出人名'));
// どの書き方でもOK
$mail->SMTPSecure = 'tls';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // tls
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // ssl
$mail->Charset = 'utf-8'
$mail->CharSet = PHPMailer::CHARSET_UTF8; // utf-8
// 下記をfalseにする
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
// デバッグ設定
$mail->SMTPDebug = 3;
$mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
E_WARNING stream_set_timeout() expects parameter 1 to be resource,
bool given /path/to/PHPMailer/src/SMTP.php 344
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
));
마지막
이상은 실현된 내용입니다.
PHPMailer는 많은 참고 문헌을 가지고 있으며 간단하게 SMTP로 보낼 수 있는 편리한 라이브러리입니다.
Reference
이 문제에 관하여(PHPMailer로 STMP 메일 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e__ri/items/857b12e73080019e00b5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(PHPMailer로 STMP 메일 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/e__ri/items/857b12e73080019e00b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)