- 【備忘録】PHPMailer ライブラリを使って GmailのSMTPからメール送信(PHP編)(PHPMailer 5.2系)
そのためどうしたらよいかを書き出しておきます。
なお Gmail以外でも同様に利用できます(手持ちのさくらインターネットのアカウント(SMTPサーバー)でも試しました)。
なお Gmail以外でも同様に利用できます(手持ちのさくらインターネットのアカウント(SMTPサーバー)でも試しました)。
参考情報
- https://github.com/PHPMailer/PHPMailer
- https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps
検証環境
- macOS High Sierra (10.13.1)
- PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )
※以下、ターミナルアプリ(アプリケーション > ユーティリティ)を起動してからのお話です。
1. 作業場所の確保と PHPMailer ライブラリの取得
composer を利用する方法もありますが、あえて GitHub からソースをダウンロードして利用する方法を書き出しておきます。composer を利用する場合には、https://github.com/PHPMailer/PHPMailer を参考にしてみてください。
ターミナルアプリより、
mkdir php_send_test
cd php_send_test
git clone https://github.com/Synchro/PHPMailer
として PHPMailer ライブラリを、php_send_test (ユーザーフォルダ直下の php_send_test)フォルダ内の PHPMailer フォルダにダウロードします。
これで
php_send_test
┗ PHPMailer
というフォルダが出来ているはず。
2. コーディング「php_send_test.php」
名前はなんでもいいですが、説明の便宜上「php_send_test.php」として保存します。
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
mb_language("japanese");
mb_internal_encoding("UTF-8");
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Encoding = "7bit";
$mail->CharSet = '"UTF-8"';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Username = 'Gmailアドレス(差出人)';
$mail->Password = 'パスワード';
// ※1は、2段階認証有効なら「アプリ固有のパスワード」を生成してそれをいれる
// 無効なら「安全性の低いアプリからのアクセスを許可」しておく
$mail->From = 'Gmailアドレス(差出人)';
$mail->FromName = mb_encode_mimeheader("表示名","ISO-2022-JP","UTF-8"); // "表示名" <メールアドレス>
$mail->Subject = mb_encode_mimeheader("件名","ISO-2022-JP", "UTF-8");
$mail->Body = mb_convert_encoding("本文","UTF-8","auto");
$mail->AddAddress('宛先');
if (!$mail->send()) {
echo "送信エラー " . $mail->ErrorInfo;
} else {
echo "送信しました" . "\n";
}
のコードがベースになります。
赤文字の部分を修正してください。
※$mail->Body の本文は、php_send_test.php 自体の文字コードが UTF-8 なら文字エンコードは不要です。つまりは
- $mail->Body ="本文";
でもいけます。
ただしヘッダ部分(件名や表示名)については、ISO-2022-JP の文字コードでMIMEエンコードしてあげないと文字化けするので注意。そのため上記コードでは明示的に、文字エンコード変換をしてます。
ただしヘッダ部分(件名や表示名)については、ISO-2022-JP の文字コードでMIMEエンコードしてあげないと文字化けするので注意。そのため上記コードでは明示的に、文字エンコード変換をしてます。
3. 送信テスト
ターミナルより
php php_send_test.php
とタイプして、
「送信しました」
と出たら送信できています。
Could not open input file: php_send_test.php
と出てきたら、今いる場所が、php_send_test フォルダじゃないのでしょう。
cd $HOME/php_send_test
php php_send_test.php
として php_send_test.php のあるフォルダに移動してから実行してみてください。
Appendix A. 本文について改行をしたい
$mail->Body = mb_convert_encoding("本文
改行2
改行3
改行4
","UTF-8","auto");
とすれば
----
本文
改行2
改行3
改行4
-----
がメールの本文になります。
Appendix B. HTMLメールにしたい!
https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps
を参考に、$mail->Body の代わりに、
- $mail->msgHTML(file_get_contents('HTML ファイル名(パス含む)'), __DIR__);
HTML部分を読み込む - $mail->AltBody = mb_convert_encoding("本文","UTF-8","auto");
テキスト部分を読み込む
Appendix C. 添付ファイルをつけたい!
if (!$mail->send()) {
より前に、
を追加してみてください。
Appendix D. Google OAuth2 認証を使いたい!
Google OAuth2 認証を使えば、アプリ固有のパスワード(2段階認証有効時)や安全性の低いアプリからのアクセスを許可する(2段階認証無効時)をせずに、Gmailアドレスとパスワードを使うことができ、もっとも安全な方法といえます。
Google Developer Console で キーの発行が必要になります。
詳しくは
に丁寧に説明されているので参照にしてみるとよいです。
2017年11月24日 @kimipooh
0 件のコメント:
コメントを投稿