PHPMailer로 STMP 메일 보내기

15298 단어 mailtrapPHPPHPMailer

개요


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

  • PHPMailer 사용
  • 메일 설정에서 첫 번째로 걸려 넘어진'SMTP','POP','IMAP'의 의미와 설정 방법은?
  • 메일 전송 테스트 사용
  • 마지막


    이상은 실현된 내용입니다.
    PHPMailer는 많은 참고 문헌을 가지고 있으며 간단하게 SMTP로 보낼 수 있는 편리한 라이브러리입니다.

    좋은 웹페이지 즐겨찾기