2017-06-08 65 views
1

我創建了一個表單,允許用戶從網站發送電子郵件。 HTML代碼(見附件)調用一個PHP腳本(參見附件),並且該電子郵件應該被髮送。該網頁顯示消息「郵件成功發送」,但我從未真正收到過電子郵件(它也不在垃圾郵件中)。雖然確認PHP郵件()函數無法工作

我已聯繫我的託管服務(等待回覆)以檢查PHP是否受支持。同時,我想確保我的代碼沒有錯誤。

HTML:

<form action="message.php" method="post"> 
    <fieldset> 
     <p>Name <span class="requiredAsterisk">*</span></p> 
     <input name="name"/> 
     <p>Email <span class="requiredAsterisk">*</span></p> 
     <input name="email"/> 
     <p>Message <span class="requiredAsterisk">*</span></p> 
     <textarea name="message"></textarea> 
    </fieldset> 
    <fieldset> 
     <input class="sendMessage w3-large" type="submit" value="Send Message"/> 
    </fieldset> 
    </form> 

PHP:

<?php 
$header = 'From: ' .$_POST['name'] ."\r\n" .'Reply-to: ' .$_POST['email'] ."\r\n" .'X-Mailer: PHP/' .phpversion(); 
if (mail("[email protected]", "Email from website", $_POST['message'], $header)) { 
    echo ("<p>Email successfully sent</p>"); 
} else { 
    echo ("<p>Email failed</p>"); 
} 
?> 

在此先感謝

+1

當'mail'返回true時,這隻表示電子郵件已被郵件服務器接受。這並不意味着電子郵件可以發送,發送或交付。 – fubar

+0

@fubar這是否意味着這是一個服務器端問題? –

+1

是的,我會說這是一個服務器端問題。但這可能是一個配置問題,黑名單問題,任何事情。希望您的託管公司可以提供一些見解。 – fubar

回答

0

(我可能會評論這一點,但我的代表處是太低了),你應該使用 $message = wordwrap($_POST['message'], 70, "\r\n");所以你消息在mail()的文檔之後。除此之外,你的代碼似乎很好。正如您所提到的,這可能與您的託管服務提供商有關,因爲它們是阻止mail功能的常用位置。另請參閱this question on it瞭解可能導致問題的一些附加信息。

1

PHP中原始mail()函數的一個很好的替代方法就像PHPMailer。正如在github上頁指出:

絕大多數的代碼,你會發現,使用郵件在線()函數 直接簡直是完全錯誤的!請不要試圖做 它自己 - 如果你不使用PHPMailer的,有你應該看看滾動自己以前很多其他優秀的 圖書館 - 嘗試SwiftMailer,使用Zend_Mail,eZcomponents等

PHPMailer非常容易設置和開始。這是發送電子郵件的基本語法:

<?php 
require 'PHPMailerAutoload.php'; 

$mail = new PHPMailer; 

//$mail->SMTPDebug = 3;        // Enable verbose debug output 

$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers 
$mail->SMTPAuth = true;        // Enable SMTP authentication 
$mail->Username = '[email protected]';     // SMTP username 
$mail->Password = 'secret';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 

$mail->setFrom('[email protected]', 'Mailer'); 
$mail->addAddress('[email protected]');  // Add a recipient 

$mail->Subject = 'Here is the subject'; 
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 
+0

lol在「這是發送電子郵件的基本語法」:-)如果您手邊沒有SMTP,它也完全沒用,因爲它會使用內部' mail()'函數。 – Capsule

+0

當然,但他提到他有一個託管服務,所以他最有可能擁有一個SMTP。即使他沒有託管服務,他也可以使用無數其他服務提供諸如Yahoo或Gmail等SMTP服務。 @Capsule –

+0

雅虎或Gmail會在您的表單因爲會產生流量而被濫用時立即阻止您,共享主機通常不會提供auth-SMTP。我並不是說這不是一個有效的答案,但我正在減輕熱情:-) – Capsule