PHPで簡単にメール送信するサンプルコードと,ライブラリのダウンロードの手順。
Composerは不要なので,レンタルサーバーでも楽に設置できる。
PHPMailerのダウンロード
下記ページにアクセスする。
PHPMailer/PHPMailer
https://github.com/PHPMailer/PHPMailer
右上の,緑色の「Clone or Download」を押して
ZIPでダウンロード,解凍。
PHPMailer_masterみたいな名前のフォルダが出てくるので
フォルダ名をPHPMailerにリネーム。
これを,フォルダごと
FTPなどで
レンタルサーバーにアップロードする。
メール送信のPHPコード
PHPMailerフォルダと同じ場所に,
下記のPHPファイルを設置する。
mail_test.php
実行します。<br> <?php // PHPでGmailでのメール送信 // https://into-the-program.com/php/phpmailer-gmail.php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './PHPMailer/src/Exception.php'; require './PHPMailer/src/PHPMailer.php'; require './PHPMailer/src/SMTP.php'; ?> require完了。<br> <?php $mail = new PHPMailer(true); ?> mail初期化。<br> <?php // Gmailの認証情報 $host = 'smtp.gmail.com'; $username = 'XXXXXXXXXXXXXXX@gmail.com'; $password = 'XXXXXXXXXXX'; // 差出人 $from = 'XXXXXXXXXXXXXXX@gmail.com'; $fromname = '差出人の名前'; // 宛先 $to = 'YYYYYYYYYYY@gmail.com'; $toname = '宛名'; // 件名・本文 $subject = '日本語のメール件名のテストです。'; $body = "日本語のメール本文のテストです。\n\n改行や スペースもテスト。"; // メール設定 $mail->SMTPDebug = 2; //デバッグ用に $mail->isSMTP(); $mail->SMTPSecure = 'tls'; $mail->SMTPAuth = true; $mail->Host = $host; $mail->Port = 587; $mail->Username = $username; $mail->Password = $password; $mail->CharSet = "utf-8"; $mail->Encoding = "base64"; $mail->setFrom($from, $fromname); $mail->addAddress($to, $toname); $mail->Subject = $subject; $mail->Body = $body; // メール送信 if( ! $mail->send() ){ echo '失敗: '. $mail->ErrorInfo; }else{ echo '成功'; } ?>
認証情報などを書き換えること。
メール送信の成功時も失敗時も,詳しいログがブラウザ上に出力される。
エラーについて
初回は下記のようなエラーログが出るはず。
実行します。 require完了。 mail初期化。 2019-08-04 16:47:09 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP XXXXXXX - gsmtp 2019-08-04 16:47:09 CLIENT -> SERVER: EHLO Webサーバー名 2019-08-04 16:47:09 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [XXXXXX]250-SIZE XXXXXXXX SMTPUTF8 2019-08-04 16:47:09 CLIENT -> SERVER: STARTTLS 2019-08-04 16:47:09 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS 2019-08-04 16:47:10 CLIENT -> SERVER: EHLO Webサーバー名 2019-08-04 16:47:10 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [XXXXXXX]250-SIZE XXXXXXX-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8 2019-08-04 16:47:10 CLIENT -> SERVER: AUTH LOGIN 2019-08-04 16:47:10 SERVER -> CLIENT: 334 XXXXXXXXXX 2019-08-04 16:47:10 CLIENT -> SERVER: <credentials hidden> 2019-08-04 16:47:10 SERVER -> CLIENT: 334 XXXXXXXXXXX 2019-08-04 16:47:10 CLIENT -> SERVER: <credentials hidden> 2019-08-04 16:47:11 SERVER -> CLIENT: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=XXXXXXXXXXXXX XXXXXXXXXXXXXXX> PleaseXXXXXXX log in via your web browser and then try again.XXXXXXXXXXXX Learn more at XXXXXXXXX https://support.google.com/mail/answer/78754 XXXXXXXXXXX - gsmtp 2019-08-04 16:47:11 SMTP ERROR: Password command failed: XXXXXX <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=XXXXXXXXXXXXXX> PleaseXXXXXXXXXX log in via your web browser and then try again.XXXXXXXX Learn more atXXXXXXX https://support.google.com/mail/answer/78754 XXXXXXXXXXXX - gsmtp SMTP Error: Could not authenticate. 2019-08-04 16:47:11 CLIENT -> SERVER: QUIT 2019-08-04 16:47:11 SERVER -> CLIENT: 221 2.0.0 closing connection XXXXXXX - gsmtp SMTP Error: Could not authenticate. 失敗: SMTP Error: Could not authenticate.
ところどころ伏字にしてある。
このエラーの原因と対処法だが,2つある。
Googleアカウントでログインして,セキュリティの項目から
「安全性の低いアプリのアクセス」をONにすること。
次に,PHPからのメール送信に一度失敗した後で
「セキュリティ」の中の
「最近のセキュリティ イベント」
「セキュリティイベントの確認」を開き・・・
そこに,
「不審なログインの試みをブロックしました」
という表示があるはずなので
そこで,このアクセスは自分だ,と入力する。
すると,数分以内に
メール送信が可能になる。
これで,らくらくメール送信できる。