1

メール アドレスを (,) で区切った PHP の mail() 関数を使用して、複数の受信者にメールを送信できます。

ただし、リスト内の電子メールのいずれかが無効である場合、この関数は失敗します。したがって、私が持っている唯一のオプションは、ループして mail() 関数を複数回呼び出して、応答の遅延を引き起こすことです。

この問題の解決にご協力いただき、誠にありがとうございます。


みんな、それはまだ問題です。問題は、形式は正しいが、電子メールが正当なものではない場合です。例: 「google@yahoo.com」がメール リストの一部である場合、リスト内の他のユーザーにメールを送信することさえできず、メール機能が失敗します。

問題は、提供された電子メールの有効性であり、構文ではありません。

4

3 に答える 3

0

これは、サーバー (メール プログラム、つまり sendmail、postfix など、PHP の構成を確認する) に、存在しないメール アドレス (または同等のもの) のブラックリストがある場合にのみ発生します。

PHP の mail() 関数の通常の動作は、メールと受信者のリストをメール プログラムに委譲し、データが受け入れられたかどうかを報告することです。mail() の戻り値は、配信の成功について何も伝えません。

これを知っていると、2 つの解決策が考えられます。

  1. これらのアドレスを受け入れるようにメール プログラムを再構成します。または、

  2. mail() を呼び出す前に、受信者アドレスの MX レコードをチェックして、メール アドレスの存在をチェックします。

于 2013-03-31T03:19:14.400 に答える
0

単純なフィルターで十分です。

function MYFILTERS_emails($val){
    return !!(filter_var($val, FILTER_VALIDATE_EMAIL));
}

$emails = implode(', ', array_filter($emails, 'MYFILTERS_emails'));

実施例

于 2013-03-07T11:48:30.997 に答える
-1

これを解決するには、電子メール アドレスをループする必要がありますが、毎回メールを使用する必要はありません。

メールリストをループして有効性を確認し、それに応じて削除してから、元の mail() fx をクリアリストで使用します。

PHP: (配列としてのメールリスト - $emails)

$cleanList = '';
foreach($emails as $email){

    //REGEX email verify
if (eregi("^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$", $email)) {
    $cleanList .= $email.',';
}

//Remove last comma
$cleanList = substr($cleanList,0,-1);

主要()....

于 2012-08-21T02:48:52.897 に答える