【2024年版】PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法
2024/01/18
だいぶ前に同じようなことをメモしたが、そちらの方法だと送信できずエラー内容を見たりネット上で調べてみたところ、どうも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段階認証及びアプリパスワード設定の必要がある。