まぁ PHPMailer だけじゃ対応できないのですけどね。
昨今の携帯電話にメールを送ろうとするなら、SPFレコードを使った送信ドメイン認証に対応必須のようなので一応対応してみました。
まずは SPF とはなんぞやと。
1. 送信元は SPFレコード っていうのをDNSサーバに登録(公開)しておく。
2. 受信者は送信元のFROMアドレスから DNSを参照し、『SPFレコード』が公開されているかどうかチェック。
3. SPFレコードには IPアドレス等の情報を含むので、「なりすましメール」の判定等を実施して捨てたり破棄したり。
と、まぁこんな感じで理解しましたけども中らずとも遠からずーな感じかと思います。
で本題ですが、PHPMailer というライブラリを使うとほんとに簡単に PHPからメールが送信できます。sendmail だとか phpのmail()関数だとかまったく意識しません。オススメです。
ただ、2番の補足ですが、『送信元のFROMアドレス』はヘッダーのFROMではなくて、エンベロープのFROMのようです。うちの環境では PHPMailer の Sender プロパティに値を設定しないとエンベロープFROMの値は変わりませんでした。
てなわけでサンプルソースです。環境は osが linux。PHP のバージョンは 5.2.6 です。
これがベストではないと思いますが、こうしたら SPFが passしたよってソースです。
$mail = new PHPMailer(); $mail->CharSet = "iso-2022-jp"; $mail->Encoding = "7bit"; $mail->Hostname = "hoge.com"; // message-id $mail->Sender = "test@hoge.com"; // spf $mail->From = "test@hoge.com"; $mail->AddAddress($to); $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $mail->Body = mb_convert_encoding($bodystr,"JIS","UTF-8"); $mail->Send();
くわえて自ドメインの DNSに SPFレコード(TXT)を追加します。
テストに利用したレンタルサーバ(mochahost)ではワンクリックでした。
設定内容の確認は(windowsなら) nslookup -q=txt hoge.com で v=spf1 ~ というのが表示されればまずok。
詳細はここがとても参考になりました。
独自ドメインのメール送信を SPF に対応させる方法
ここまでできたらあとは送ってみて確認。
受信したメールのヘッダに以下のようなものがあれば成功。
Received-SPF : pass (xx.hoge.com: domain …
こんな感じだと失敗してます。
Received-SPF : none (xx.hoge.com: domain …
なんとなくおもしろそうなので受信側も実装してみようかなぁと思う今日この頃です。