Edited at

HardMailCheck 始めました

More than 3 years have passed since last update.


HardMailCheck つくりました。

SMTP接続してメールアドレスの存在確認をするライブラリを作りました。


注意点

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)で接続してる辺りの処理がかなり雑になってます。

なんかいい方法あったら教えて下さいな。