2013-03-13 81 views
1

我已經創建了發送到PHP腳本的電子郵件。PHP表單字段不會發送到電子郵件

當發送只有一個字段(消息字段)時,表單似乎工作正常,但一旦添加了其他字段,表單就不再通過電子郵件發送到收件箱(但表單仍然正確激活並重新路由到三江源就好了。)

這裏是我目前擁有的代碼,這不起作用

<?php 
    $email = $_REQUEST['email'] ; 
    $name = $_REQUEST['name'] ; 
    $services = $_REQUEST['services'] ; 
    $message = $_REQUEST['message'] ; 

    if (!isset($_REQUEST['email'])) { 
    header("Location: feedback.html"); 
    } 
    elseif (empty($email) || empty($message)) { 
    header("Location: error.html"); 
} 
    else { 
    mail("[email protected]", "Message via your website!", 
      $name, $services, $message, "From: $email"); 
    header("Location: thankyou.html"); 
    } 
?> 

這是以前的代碼,這樣做的工作,但只顯示消息

<?php 
    $email = $_REQUEST['email'] ; 
    $message = $_REQUEST['message'] ; 

    if (!isset($_REQUEST['email'])) { 
    header("Location: feedback.html"); 
    } 
    elseif (empty($email) || empty($message)) { 
    header("Location: error.html"); 
} 
    else { 
    mail("[email protected]", "Message via your website!", 
      $message, "From: $email"); 
    header("Location: thankyou.html"); 
    } 
?> 

這是窗體的HTML:

<form method="post" action="sendmail.php"> 
    <label>Name:</label> <input name="name" type="text" /><br /> 
    <label>Email:</label> <input name="email" type="text" /><br /> 
    <label>What service do you require?:</label> <input name="services" type="text" /><br /> 
    <label>Message:</label><br /> 
    <textarea name="message" rows="15" cols="40"> 
    </textarea><br /> 
    <input type="submit" /> 
</form> 
+0

你應該淨化你的輸入http://stackoverflow.com/q/1055460/1607098 – Touki 2013-03-13 10:24:07

+0

你給郵件()參數太多。你想要$ name,$ services和$ message都在消息體中嗎?如果是這樣,你需要像這樣的郵件(「[email protected]」,「通過你的網站發送消息!」,「$ name $ services $ message」,「From:$ email」);' – 2013-03-13 10:24:37

+0

php mail functon在發送郵件後返回true或false。請檢查郵件功能返回什麼? – 2013-03-13 10:24:42

回答

3
作爲

mail() docs消息體應爲單參數傳遞。因此,它看起來應該更像:

mail("[email protected]", "Message via your website!", "$name\r\n $services\r\n $message", "From: $email"); 
+0

嗨,這工作,但服務不通過電子郵件,任何原因,你可以看到?字段名稱似乎都是正確的。 – Francesca 2013-03-13 10:37:14

+0

需要做一些調試。嘗試'var_dump($ _ POST);'爲了完成整個工作並幫助進行調試,可以考慮在'mail()'函數之外構造主體,例如'$ body =「$ name \ r \ n $ services \ r \ n $ message」;'然後嘗試'echo $ body'來檢查它看起來如何。 – juco 2013-03-13 10:40:52

-1

嘗試此

<?php 
    $email = $_POST['email'] ; 
    $name = $_POST['name'] ; 
    $services = $_POST['services'] ; 
    $message = $_POST['message'] ; 

    if (!isset($_POST['email'])) { 
    header("Location: feedback.html"); 
    } 
    elseif (empty($email) || empty($message)) { 
    header("Location: error.html"); 
} 
    else { 
    mail("[email protected]", "Message via your website!", 
      $name . $services. $message . "From: $email"); 
    header("Location: thankyou.html"); 
    } 
?> 
0

你不能只是添加越來越多變量mail()。只有指定的電子郵件的內容,這將是第三個一個參數,你可以在official documentation看到:

bool mail (string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]]) 

如果你想擁有的不僅僅是$message更在你的郵件,您需要把所有東西放到一個變量中作爲內容賦予函數。

$content = $message; 
$content .= "\n" . $services; 
// etc... 
mail($to, $subject, $content); 
1

據php.net正確使用mail()功能是:

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

// Additional headers 
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n"; 
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 
$headers .= 'Bcc: [email protected]' . "\r\n"; 

// Mail it 
mail($to, $subject, $message, $headers); 
?> 

您正在試圖爲標題發送附加數據($services)。

嘗試合併您$message$service>

$message = $service . "\r\n\r\n" . $message; 
mail("[email protected]", "Message via your website!", 
     $message, "From: $email");