勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

【2024年版】PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法

   2024/01/18  PHP Google

だいぶ前に同じようなことをメモしたが、そちらの方法だと送信できずエラー内容を見たりネット上で調べてみたところ、どうもGoogle側で二段階認証やアプリパスワードの設定が必要っぽい。以下に実装方法及び設定方法のメモ。尚、2024年1月時点で動作確認済み。

 

Google側の設定

2段階認証

Googleにログインし右上のロゴアイコンからGoogleアカウントページ→セキュリティ→2段階認証プロセスを有効にする。

アプリパスワード

上記設定後に「2段階認証プロセス」をクリック→ページ下部のアプリパスワードをクリック。アプリ名を入力し作成ボタンをクリックするとアプリパスワードが発行されるのでメモしておく。

 

プログラム側

PHPMailerの用意

今回はcomposerは使わず以下からダウンロードした。

https://github.com/PHPMailer/PHPMailer

zipファイルを解凍後に以下3ファイルをアップロードする。

  • PHPMailer.php
  • Exception.php
  • SMTP.php

ソースコード

<?php
include('./PHPMailer.php');
include('./Exception.php');
include('./SMTP.php');

date_default_timezone_set('Asia/Tokyo');
mb_language("japanese");
mb_internal_encoding("UTF-8");

//Gmailアカウント
$gmail_host = 'smtp.gmail.com';
$gmail_user = '【Gmailアドレス】';
$gmail_pass = '【アプリパスワード】';

//to
$to = 'to@gmail.com';

//from
$from = 'from@gmail.com';
$from_name = '差出人名';

//件名と本文
$subject = '件名';
$body = '本文';

//phpmailer設定
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->SMTPDebug = 2; //デバッグ用
$mail->isSMTP();
$mail->Host = $gmail_host;
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $gmail_user;
$mail->Password = $gmail_pass;
$mail->SMTPOptions = [
    'ssl' => [
        'verify_peer' => false
        ,'verify_peer_name' => false
        ,'allow_self_signed' => true
    ]
];
$mail->IsHTML(false);
$mail->CharSet = "utf-8";
$mail->Encoding = "base64";
$mail->setFrom($from, $from_name);
$mail->addAddress($to);
$mail->Subject = $subject;
$mail->Body = $body;


if( !$mail->Send() ){
    echo "送信失敗<br/ >";
    echo "エラー内容: " . $mail->ErrorInfo;
} else {
    echo "送信成功";
}
?>

「$gmail_pass」はGmailのパスワードではなく、先ほど取得したアプリパスワードを入れる必要がある。

 

注意点

ネット上ではGoogle設定で「安全性の低いアプリの許可をオンにする」という記事が見受けられたが、今現在この設定は無いっぽい。そのため面倒だが2段階認証及びアプリパスワード設定の必要がある。

 - PHP Google