PHPでメール送信するときは
・mb_send_mail
・Qdmail
がよく使われる気がする。

mb_send_mail は SMTPサーバーを指定することは可能だけどSMTP認証ができません!
Qdmailはもうライブラリが古い!

ということで PHPMailer を使ってみた。
https://github.com/Synchro/PHPMaile

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にしています。

いと便利です。