2011-12-05 14 views
5

私はphp mail()からメールを送信しています:送信が失敗した場合、失敗したメッセージを受信したいと思います。phpメールが失敗したかどうかを知る方法

$to = '[email protected]'; 
    $email_from = "[email protected]"; 

    $full_name = 'XXXX'; 
    $from_mail = $full_name.'<'.$email_from.'>'; 



    $subject = "testing sender name"; 
    $message = ""; 
    $message .= ' 
      <p><strong>This is only a test mail. Please do not reply.</strong><br /> 
    '; 
    $from = $from_mail; 

    //$headers = "" . 
    //   "Reply-To:" . $from . "\r\n" . 
    //   "X-Mailer: PHP/" . phpversion(); 

    $headers = "From:" . $from_mail . "\r\n" . 
       "Reply-To:" . $from_mail . "\r\n" . 
       "X-Mailer: PHP/" . phpversion(); 


    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";   

    if(!mail($to,$subject,$message,$headers)) 
    { 
     echo 'failed !!'; 
    } 

しかし$toメールが何が存在しませんが、それはfailed !!

+0

FromヘッダーとReply-Toヘッダーが設定されている場合、本当にそのアドレスでバウンスを受信することができます。別の 'Bounces-To:'ヘッダも指定できます。 –

+0

PHPが配信するメッセージをSMTPサーバに渡した後、配信の成功または失敗を直接知ることができないためです。 SMTPサーバーは必ずしもメッセージをすぐに配信するとは限りません。バウンスを待つだけです。 –

+0

実際には、メールへのメッセージが失敗したか、成功したかどうかを知る方法はありませんか? – AssamGuy

答えて

3

私はあなたが望むものは、有効なフォーマットされた電子メールだけでなく、実際の電子メールをチェックすることだと思います。だから私はあなたにこれを見てみることをお勧めしますblog

+0

はいSeRPRo、正確に。私は今ブログをチェックします。ありがとう – AssamGuy

+0

@AssamGuyあなたは大歓迎です:) – SERPRO

1

を示すのではなく、メールに$が何が存在しませんが、それが失敗した表示されていません!

実際にメールがSMTPサーバーに配信されているという意味では、エンドユーザーに配信されるわけではありません。それが配信されているかどうかを確認するPHPの簡単な方法はありません。

5

メールの送信方法はメールを送信するだけです。エラーが発生しない場合(サーバーなどが見つからないなど)、正常に返されます。あなたには、いくつかのコードを作成しない限り、あなたは、などの周りの電子メールをバウンスメールが実際に受信者の受信トレイに上陸したかどうかを知ることができなくなります

3

メールだった場合TRUE mail

戻り値のからの復帰をチェック配送のために首尾よく受け入れられ、そうでなければ である。

メールが 配信のために受け入れられたという理由だけで、実際には宛先が目的の宛先 に届くわけではありません。

それがtrueを返しているという事実は、おそらくあなたのメールプログラムがメッセージを受け入れたが、それは誰に送信しようとすると失敗していることを意味しますが...

あなたがにバリデータによって$toを実行する必要があります有効なアドレスを確認してからエラーが発生した場合は、mail()に頼っておらず、間違っていることをフィルタリングしたり、簡単にチェックすることができます。

--update

その後@SeRPRoをチェックアウトするが、何あなたがやろうとすると、プログラム的にテストするためのハードワークである - そのはるかに簡単に、より信頼性の高いリンクをクリックするようユーザーに要求する電子メールを送信しますすべてが異なる動作(読み取り:異なる程度に壊れている)を持つSMTPサーバーを照会するよりも、実際のものかどうかを検証する必要があります。また、あなたの意図した動作(コードワイズ)はスパマーと区別するのが難しいので、検証電子メールルートを避けると困難になることはありません。

+0

には分からないが、上記の '$ to'は有効な電子メールですが、存在しません。$ toのメールが失敗した場合、私は見つけられません。 – AssamGuy

0

あなたは送信トレイから出ることをテストする方法として自分自身を参照することができます。

+0

私はuを取得していない...あなたは少し説明することができます – AssamGuy

0

私のケースでは、mail()の$ additional_parametersパラメータで渡すことができるコマンドラインパラメータ "-f"でリターンパスを設定するのに役立ちました。だから私は電話する

mail($to, $subject, $message, $headers, "-f [email protected]"); 

...http://www.php.net/manual/en/function.mail.php hosting-inviromentsに関するいくつかのコメントによれば、異なるホスティングアカウントに登録する必要があるか、同じドメインにある必要があります(アドレスは "From:"と同じです)...など)

私はそれはそうとバウンスは、前述の制限の非を(受信するようになったページ)が電子メールを送信して設定するために使用さphpmailerの

0

Domainfactory http://www.df.euでホストされています$ mail-> AddCustomHeader( 'Return-path:[email protected]'); これは、受信者のメールIDが存在しない場合、または他のケースで受信者がメールを受信しない場合、[email protected]でバウンスメールを送信します。

関連する問題