2012-03-05 46 views
1

由於PHP郵件已在我的服務器上禁用,因此它已停止主題集成聯繫表單的工作。在Wordpress中使用wp_mail()代替郵件()不起作用

這個主題叫做Boldy,它有它自己的sendmail.php文件,它使用mail()而不是wp_mail()

mail()更改爲wp_mail()不起作用,但我不知道爲什麼?

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

    function valid_email($str) 
    { 
     return (! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE; 
    } 

    if ($_POST['name'] != '' && $_POST['email'] != '' && valid_email($_POST['email']) == TRUE && strlen($_POST['comment']) > 1) 
    { 
     $to = preg_replace("([\r\n])", "", $_POST['receiver']); 
     $from = preg_replace("([\r\n])", "", $_POST['email']); 
     $subject = "Website contact message from ".$_POST['name']; 
     $message = $_POST['comment']; 
     $match = "/(bcc:|cc:|content\-type:)/i"; 

     if (preg_match($match, $to) || preg_match($match, $from) || preg_match($match, $message)) 
     { 
      die("Header injection detected."); 
     } 

     $headers = "From: ".$from."\r\n"; 
     $headers .= "Reply-to: ".$from."\r\n"; 

     if (mail($to, $subject, $message, $headers)) 
     { 
      echo 1; //SUCCESS 
     } 
     else 
     { 
      echo 2; //FAILURE - server failure 
     } 
    } 
    else 
    { 
     echo 3; //FAILURE - not valid email 
    } 

} 
else 
{ 
    die("Direct access not allowed!"); 
} 
?> 
+0

這是否解決?我現在遇到了同樣的問題,我的網站...任何幫助表示讚賞。 – jaressloo 2012-05-20 05:29:16

回答

1

我已經失去了大約30分鐘搞清楚這一點。

如果您使用的任何內容都允許您在WordPress中配置SMTP,請將其取出。

然後把一切都變成功能:

add_action('init','delay_until_init'); 
function delay_until_init(){ 
    // call wp_mail() here 
} 
1

默認情況下,WordPress的功能wp_mail()使用PHP的內部mail()功能,使您所做的更改不會解決問題。

如果您的網絡服務器已禁用標準的PHP mail()功能,那麼您將需要切換到使用SMTP發送電子郵件。

有幾種不同的方法來實現這一點,但我發現最簡單的方法是使用Easy WP SMTP plugin。安裝完成後,您需要配置插件以使用SMTP服務器的登錄詳細信息。如果您使用Gmail地址,則可以使用這些詳細信息進行設置。

編輯:你仍然需要切換到使用wp_mail()函數,它將自動使用SMTP(如果你有WP SMTP插件安裝)。