HardMailCheck つくりました。
SMTP接続してメールアドレスの存在確認をするライブラリを作りました。
- github: https://github.com/fantasista21jp/hard_mail_check
- packagist: https://packagist.org/packages/fantasista21jp/hard_mail_check
注意点
100%完璧にメールアドレスが存在するもののみを通すという思想で作ってるので、ここでエラーと判定されたけど、実は存在するといったメールアドレスもありえます。
なので、
『SESなどのバウンスメールの比率に対しシビアな対応をされるメールサービスを使用する時、メールアドレスの精査をしたい!』
そんな時に使って下さい。
また、smtpサーバによっては、短期間に何度も存在しないメールアドレスをチェックすると、一定期間接続をブロックされてしまうこともあります。
※有名どころでは、 docomo ですね。『421 Service not available』エラーを返すようになります。
メールアドレスが存在しないのではなく、ブロックされたリストも取得できるようにしているので、そこはうまい具合に使って下さい。
サンプルコード
<?php
require 'vendor/autoload.php';
$fromEmail = 'shimada@fusic.co.jp';
$checkEmailList = [
'hoge@docomo.ne.jp',
'hoge.shimada@gmail.com',
'hogehoge.shimada@gmail.com',
'hoge@fusic.co.jp',
'hoge@aaaaaa',
'fantasista21jp@docomo.ne.jp',
'fantasista21jp@docomos.ne.jp',
'hoge..hoge..hoge@docomo.ne.jp',
];
$hardMailCheck = new \HardMailCheck\HardMailCheck();
$hardMailCheck->setEmailList($checkEmailList);
try {
$hardMailCheck->checkEmailList($fromEmail);
// 個々のメールアドレスのチェックで引っかかった時
} catch (\HardMailCheck\Exceptions\EmailListNotValidException $e) {
var_dump($e);
var_dump($hardMailCheck->getErrorEmailList()); // メールアドレスが存在しない(っぽい)リスト(smtpブロック含む)
var_dump($hardMailCheck->getBlockEmailList()); // smtpサーバでブロックされたリスト
// 設定値がミスってる時はこっちに入る
} catch (\HardMailCheck\Exceptions\HardMailCheckException $e) {
var_dump($e);
}
お願い
telnet(fsockopen)で接続してる辺りの処理がかなり雑になってます。
なんかいい方法あったら教えて下さいな。