2018/10/23

メールの到達率を高める。 SPF逆引き対策

受付完了のメールなどを、社内のサーバから送信しているのだが、
セキュアな対策を行っているメールサーバを利用している方に、メールが届かない
というケースが生じてきた。

SPF(Sender Policy Framework) という技術だそうで、
FORMのIPアドレスがDNSの逆引きで実在するかをチェックするという動きのようだ。

わざわざレンタルサーバ上でメールを作成して送信も手間なので、
今までは、特段気にしていなかったが、基幹システム化しつつあるため、そうも言ってられなくなった。
要は、実在するSMTPサーバを経由してメールを送ればいいので、少し調べた所
いくつか方法があった。

1.postfixのmain.cf にリレーさせる
2.Qdsmtpというhal456さんが作成したライブラリを利用させて頂き、smtpサーバ経由にする。
3.PHPMailerという老舗のライブラリを利用させて頂きsmtpサーバを経由にする。


1.は設定変更等が生じた際に面倒な気がしてならないので、保留。
2.は魅力的だが、php7.0以降でサポートしていないようなので、後ろ髪惹かれつ第2候補に
というわけで、PHPMailerをインストールしてみる。

依存関係を考慮しつつライブラリを使えるようにしてくれる
composerという PHPのパッケージ管理システムを使って
PHPMailerを導入してみる。


# mkdir comp 適当な作業ディレクトリを作成。
# cd comp

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php composer-setup.php
 All settings correct for using Composer
 Downloading...

 Composer (version 1.7.2) successfully installed to: /root/composer.phar
 Use it: php composer.phar
# rm -f composer-setup.php もう要らないので、消す
# mv composer.phar /usr/local/bin/composer システム全般で使えるように移動
セキュリティホールになるからルートで使うなと言われるらしいので、 一般ユーザで確認
$ composer
でロゴとか出れば、OK
 
続けて、ライブラリ phpmailerを入れる。
 
任意のユーザの任意のディレクトリで行うこと
 
$ composer require phpmailer/phpmailer
Using version ^5.2 for phpmailer/phpmailer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing phpmailer/phpmailer (v5.2.26): Downloading (100%)
phpmailer/phpmailer suggests installing league/oauth2-google (Needed for Google XOAUTH2 authentication)
Writing lock file
Generating autoload files
  
何処に置いたか忘れたら、これで探すようかな? 
$ find -name vendor -type d
 
 
 


smtp送信テストPHP


<?

require_once("/置いた所/vendor/autoload.php" ); //これを忘れると動かない!!
require_once("/置いた所/vendor/phpmailer/phpmailer/class.phpmailer.php"); //これを忘れると動かない!!
mb_language("japanese"); 
mb_internal_encoding("UTF-8");   
 
$to = "XXXX@gmail.com";
$subject = "SMTP587テスト";
$body = "smtpサーバ経由のメールテスト";
$from = "hoge@hogehoge.com";
$fromname = "送信テスト君";

$mail = new PHPMailer();//インスタンス生成
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";

$mail->IsSMTP(); //smtp利用宣言
$mail->SMTPAuth = TRUE;//smtp認証宣言
$mail->Host = 'mail.xxxx.jp:587';    // ホストアドレス:ポート25or587
$mail->Username = 'hoge'; //smtp認証ユーザ
$mail->Password = 'hogehoge';  //smtp認証パス

$mail->AddAddress($to);
$mail->From = $from;
$mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8"));
$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8"));
$mail->Body  = mb_convert_encoding($body,"JIS","UTF-8");

//メールを送信
if (!$mail->Send()){
    echo("Failed to send mail. Error:".$mail->ErrorInfo);
}else{
    echo("Send mail OK.");
}
?>
 
テスト送信が届いたら、
念のため、SMTPサーバの/var/log/maillog も確認し、上手くいってるようだ。
稼働中のプログラムの置き換えをして完了。
 
明日できれば置き換えよう 
うん、がんばろう・・・。
 
 

0 件のコメント:

コメントを投稿