2012-07-27 162 views
2

我寫了一個腳本,如果表單失敗,用戶會看到一條錯誤消息,並且應該向我發送一封電子郵件。但是,我沒有收到電子郵件。我在腳本中看不到任何錯誤,並且無法找到電子郵件(甚至沒有發現垃圾郵件)。可能是什麼問題?我相信我們正在開發Linux服務器,所以默認情況下應該安裝郵件代理,對吧?防火牆可以阻止這些消息嗎?發送PHP郵件

代碼:

<?php 

if (isset($aErrors) && count($aErrors) > 0) { 
     print '<ul class="errorlist">'; 
     foreach ($aErrors as $error) { 
      print '<li>' . $error . '</li>'; 
     } 
     print '</ul><br />'; 


$mail_ontv = "[email protected]"; 

$_POST['onderwerp'] = "Geen Twinfield Abonnement"; 

    // set datum 
    $datum = date("d.m.Y H:i"); 

    // set ip 
    $ip = $_SERVER['REMOTE_ADDR']; 

    $inhoud_mail .= $_SERVER['SCRIPT_URI'] . "\n\n"; 

    $inhoud_mail .= "Iemand probeerde zich aan te melden, maar had geen Twinfield abonnement!\n"; 
    $inhoud_mail .= "Bedrijfsnaam: " . $_SESSION['bedrijfsnaam'] . "\n"; 
    $inhoud_mail .= "Telefoonnummer: " . $_SESSION['telefoonnummer'] . "\n"; 
    $inhoud_mail .= "E-mail adres: " . $_SESSION['email'] . "\n"; 
    $inhoud_mail .= "Telefoonnummer contactpersoon: " . $_SESSION['telefoonnummercontact'] . "\n"; 
    $inhoud_mail .= "E-mail adres contactpersoon: " . $_SESSION['emailcontact'] . "\n"; 
    $inhoud_mail .= "Gewenste gebruikersnaam: " . $_SESSION['gebruikersnaam'] . "\n"; 
    $inhoud_mail .= "Gekozen abonnement: " . $_SESSION['abonnement'] . "\n\n"; 

    $inhoud_mail .= "Verstuurd op " . $datum . " via het ip " . $ip . "\n\n"; 

    $headers = "From: " . $_SESSION['bedrijfsnaam'] . " <" . $_SESSION['emailcontact'] . ">"; 

    $headers = stripslashes($headers); 
    $headers = str_replace("\n", "", $headers); // Verwijder \n 
    $headers = str_replace("\r", "", $headers); // Verwijder \r 
    $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes 

    $_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n 
    $_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r 
    $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes 

    mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);          
} 

?> 

謝謝你們!

+0

我猜它必須做你的頭。在它們傳遞到你的'mail()'函數之前,它們看起來像什麼? – Crontab 2012-07-27 19:41:25

回答

2

您是否檢查了mail()的返回值?如果你得到一個布爾錯誤,當PHP試圖處理電子郵件到你的SMTP服務器時,一些東西就爆發了。

如果郵件返回true,那麼切換成功,您將不得不查看SMTP服務器的日誌以瞭解此時發生的電子郵件事件。

請記住:PHP參與發送電子郵件,在現實世界中是等同的,將信封放入郵箱。而已。其他一切完全不在PHP的權限和控制範圍之內。你

+0

我做了一個變量轉儲,結果是'bool(true)',這是否意味着它不是我的PHP代碼不工作? – user1555076 2012-07-27 19:58:34

+0

這意味着PHP完成了它的工作,並將電子郵件交給了SMTP服務器。所以去看看smtp服務器的日誌,看看發生了什麼。 – 2012-07-27 19:59:20

5

一些額外的想法超出了蘋果乙建議:

1)有很多PHP庫在那裏,將採取發送電子郵件給你的照顧。他們可以使用本地或遠程SMTP服務器。例如,http://swiftmailer.org/。 2)現在大多數電子郵件提供商(Gmail,Yahoo等)都會阻止來自本地計算機的垃圾郵件。我建議使用廉價的第三方SMTP服務來發送您的電子郵件 - 這將有助於提高可靠性。我多年來使用的一個名爲CritSend(critsend.com)。還有很多其他的。

+0

謝謝,我將檢查我是否可以解決我們某些SMTP服務器記錄的問題,但我會牢記這一點! – user1555076 2012-07-27 20:10:21

+0

critsend看起來很酷+1 – tubaguy50035 2012-08-14 20:11:55