2013-08-21 42 views
1

我使用下面的代碼片段通過php郵件功能發送郵件。php - 知道郵件功能是否發送郵件的最佳做法

$mailsent = mail($to_address, $subject, $message, $headers); 

    if ($mailsent) 
     return "mail send"; 
    else 
     return "error"; 

我檢查布爾在$mailsent變量來確定郵件是否成功或不發送。 這是正確的做法,通過PHP郵件功能找到郵件發送狀態。任何幫助將是appreciated.Thanks

+2

是的,但是,如果對於'true'情況並不意味着發送郵件%100,但它意味着PHP發送了該郵件... – 2013-08-21 06:44:08

回答

1

郵件功能的php.net描述here狀態:

返回true如果郵件被成功接受交付,否則返回FALSE。 重要的是要注意,僅僅因爲郵件被接受發送,並不意味着郵件實際上會到達預期的目的地。

這是正確的方式來查看郵件是否被接受發送,但不是看它是否確實到達收件人。您可以隨時查看您發送的電子郵件,以收到發送錯誤電子郵件。

1

是的這是正確的做法, 這是失敗安全實踐的一部分。 您應該檢查mail()是否返回true或否,以確定郵件是否已成功發送。

郵件如果從服務器中繼,即如果從服務器發送的郵件將返回true,除此之外,我同意Akam的評論。這是沒有必要的,郵件傳遞成功。(這確認發送郵件。)

我已經給上只能提交此郵件檢查將發送一個較長的片段,你可能會忽略這個..

<?php 
if(isset($_POST['submit'])) { 

    $to = "[email protected]"; 
    $subject = "Portfolio Contact"; 
    $name_field = $_POST['name']; 
    $email_field = $_POST['email']; 
    $message = $_POST['message']; 
    $headers = "From: $email_field"; 
    $body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message"; 

    $success = mail($to, $subject, $body, $headers); 
    if ($success) { 
     echo "Mail has been sent!!!!"; 
     // redirect to thank you page here 
    } 
    else { 
     echo "Message failed"; 
    } 
} else { 

echo "Malfunction alert!"; 

} 
?>