LoginSignup
3
5

More than 5 years have passed since last update.

HardMailCheck 始めました

Last updated at Posted at 2015-09-01

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)で接続してる辺りの処理がかなり雑になってます。
なんかいい方法あったら教えて下さいな。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5