メールが届かない?XServerでSPF認証メールを送信する(PHP使用例付き)

はじめに

今までPHPでmb_send_mail()を使って手抜きメール送信をしていたのですが、迷惑メールに入るという事態が発生してしまいました。
そこでXServerでSPF認証付きメールをPHPから送れるよう対応しました。
そのときの内容をここにまとめておきます。

スポンサーリンク

1.XServerでメールアカウントを作る

Xserverでメールアカウントを作ります。

以下のXServer公式の説明を参照してください。

メールアカウントの追加 | レンタルサーバーならエックスサーバー
レンタルサーバー「エックスサーバー」のご利用マニュアル|サーバーパネルからメールアカウント(メールアドレス)を追加するための手順を記載しています。

2.SPF設定を追加する

XServerにSPF認証の設定を追加します。

以下のリンクの『DNSレコードへのSPF設定』の項目を参照してください

DNSレコードの編集 | レンタルサーバーならエックスサーバー
レンタルサーバー「エックスサーバー」のご利用マニュアル|エックスサーバーで運用中のドメイン名は、サーバーパネルの「DNSレコード設定」よりDNSレコードを編集することが可能です。当ページでは変更可能なレコードの種類等についてご案内しています。
SPFとは
電子メールの送信元ドメインが詐称されていないかを検査する仕組みです。
この認証がされていないと、メールサーバによっては迷惑メール扱いされてしまいます。

以上で、SPF認証されたメールが送信できるようになりました。

作成したメールアカウントを使ってメールを送信すれば、SPF認証されたメールが送信できます。

次に作成したメールアカウントをPHPから使えるようにします。

3.PHPでSPF認証付きのメールを送信する

PHPからSPF認証付きのメールを送信するには、先ほど作成したメールアカウントを使って、メールを送信すればよい、というところまできました。

しかし、作成したメールアカウントをPHPから使うためには、メールアカウントの認証を突破する必要があります。
しかしこの認証(SMTP認証)を突破するのが曲者で、PHPの標準関数を使うだけでは難しいです。

そこでPHPMailerというライブラリを使うことにしました。
使い方は簡単で、phpファイルをダウンロードして、それを自分のphpから読み込むだけです。
以下に、PHPMailerの使用方法を記載しました。

PHPでSMTP認証してメールを送信する
PHPに標準で用意されている関数には、SMTP認証してメールを送るというような機能はありません。 そこで外部ライブラリを使うのですが、2019/12月現在でオススメの方法はPHPMailerです。PHPファイルをダウンロードして読み込むだけと手軽です。

ちなみに、PHPMailerに設定するXServerのSMTPサーバ名や、そのポート番号などはここに載っています。

これらをPHPMailerに設定してやれば、作成したメールアカウントからメール送信ができるようになるはずです。

SMTPとは
メール送信規約(メールを送信するときの決まりごと)のことです。
SMTPサーバとは
SMTPに従って、メールを送信するサーバのことです。
PHPMailerの使用例

念のため、PHPMailerの設定のどこをいじったかが分かるようにソースコードを載せておきます。

//PHPMailerの使用
$mailer = new PHPMailer(true);
try {
   $mailer->CharSet = 'UTF-8';
   $mailer->SMTPDebug = 0;
   $mailer->isSMTP();
   $mailer->Host = 'sv****.xserver.jp';  //SMTPサーバを入れます
   $mailer->SMTPAuth = true;
   $mailer->Username = 'メールアカウント@ドメイン名';  //SMTP user を入れます
   $mailer->Password = 'パスワード';      // SMTP password を入れます
   $mailer->SMTPSecure = "ssl";          // "ssl"にします
   $mailer->Port = 465;                // 465を使います

   //送信者や宛先の設定
   $mailer->setFrom('メールアカウント@ドメイン名', mb_encode_mimeheader('送信者'));
   $mailer->addAddress('you@example.com');//送り先

   //メール内容
   $mailer->isHTML(true); // HTMLメール有効
   $mailer->Subject = mb_encode_mimeheader('件名');
   $mailer->Body    = 'HTML形式の本文 <b>太字</b>';
   $mailer->AltBody = '非HTML受信者用本文';

   $mailer->send();       //送信
   echo 'Message has been sent';

} catch (Exception $e) {
   echo 'Message could not be sent. Mailer Error: ', $mailer->ErrorInfo;
}

以上で、XServerでPHPを使って、SPF認証されたメールを送れるようになりました。

コメント

タイトルとURLをコピーしました