PHPでメール送信するときは
・mb_send_mail
・Qdmail
がよく使われる気がする。
mb_send_mail は SMTPサーバーを指定することは可能だけどSMTP認証ができません!
Qdmailはもうライブラリが古い!
ということで PHPMailer を使ってみた。
https://github.com/Synchro/PHPMaile
TOC
SMTP認証
LOGIN, PLAIN, NTLM, CRAM-MD5 and Google’s XOAUTH2 over SSL and TLS
が使えます。Postfixの解説サイトってPLAIN or CRAM-MD5 が多い気がするので困ることはないと思います。
Google’s XOAUTH2 ってなんなんでしょうか。
XOAUTH2
メールの送受信にパスワードなんていらない
こちらに詳しく書かれていました。
新しく取得したGmailアカウントにおいて、これまでの一般的なメーラーではもはやメールの送受信はできません。いや、完全にできないわけではなく、とある設定を変更しないと使えないようになっています。その設定名ときたらなんと、
「安全性の低いアプリのアクセス」です。
メーラーを使うためにはこの設定を「オン」にしなければなりません。
なんとも精神衛生上よろしくない行為ですよね。
通常この設定は「オフ」になっていて、ユーザー名とパスワードで認証する従来のメーラーはアクセスできず、いわゆる”安全性の高い”アプリしかアクセスできません。
では安全性の高いアプリとはなんでしょうか?
その答えはXOAUTH2認証を用いたメールアプリです。
らしいです。
PHPMailerでの使い方は公式Githubにあります。
https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2
DKIM
DKIMも使えます!
SPFとはちょっと違いますがまぁスパム認定されにくくなります。
多くのオープンソースでも使われ WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more らしいです。
CCやBccを使うことも想定されていた作りになっており、添付ファイルもパスを記述するだけです。
軽く使ってみた
<?php require_once 'PHPMailer-master/PHPMailerAutoload.php'; if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { $name = htmlspecialchars($_POST['name']); $address = htmlspecialchars($_POST['address']); $naiyou = htmlspecialchars($_POST['naiyou']); $youken = htmlspecialchars($_POST['youken']); /* 送信内容 */ $content = "名前: ${name} \r\n内容: ${naiyou}\r\n返信先: ${address}"; $mailer = new PHPMailer(); $mailer->IsSMTP(); $mailer->Host = 'ssl://smtp.gmail.com:465'; $mailer->SMTPAuth = TRUE; $mailer->Username = 'Gmail User name'; $mailer->Password = 'Gmail User password'; $mailer->From = 'From'; $mailer->FromName = mb_encode_mimeheader(mb_convert_encoding("${youken}", "JIS", "UTF-8")); $mailer->Subject = mb_encode_mimeheader(mb_convert_encoding("${youken}", "JIS", "UTF-8")); $mailer->Body = mb_convert_encoding("${content}", "JIS", "UTF-8"); $mailer->AddAddress('atesaki'); // 宛先 if ($mailer->Send()) { header("Content-Type: text/plain; charset=UTF-8"); print "情報の送信に成功しました。返信は48時間以内に行います。"; exit; } else { header("HTTP/1.0 400 Bad Request"); header("Content-Type: text/plain; charset=UTF-8"); print "情報の送信に失敗しました。復旧するまで今しばらくお待ち下さい"; } } else { header("HTTP/1.0 400 Bad Request"); header("Content-Type: text/plain; charset=UTF-8"); print "情報の送信に失敗しました。復旧するまで今しばらくお待ち下さい"; } ?>
今回はSMTPサーバーにGoogleを使いました。
XOAUTH2を使っていないので安全性の低いアプリへのアクセスをONにしています。
いと便利です。