2017-08-14 179 views
-2

我的網頁上的聯繫表格最終發送電子郵件,但它不會以正確的格式發送。這是我所得到的電子郵件。我爲隱私原因隱藏了電子郵件和組織。聯繫表格電子郵件發送,但郵件在主題

From-- norgun 
Subject-- Test Email: ***@gmail.com Message: Sbsbdb 
Message-- 
MIME-Version: 1.0 
Content-type: text/plain; charset=iso-8859-1 
From: Test <***@gmail.com> 
Reply-To: <***@gmail.com> 
X-Mailer: PHP/7.0.21 

無論如何,你可以從上面看到,這個人會一直寫在聯絡表格姓名,電子郵件和短信內容是在主題行,而不是實際的郵箱。有沒有一種方法可以格式化我的代碼,以便他們寫下的消息和名稱位於消息框中而不是主題框中,並且電子郵件是從將電子郵件放在表單中的人員發送的,而不是「 norgun「,這是我想出的網站?

這是到目前爲止我的代碼:

<?php 
$to = '[email protected]'; 
$name = !empty($_POST['name']) ? filter_var(trim($_POST['name']), FILTER_SANITIZE_STRING) : ''; 
$from = !empty($_POST['email']) ? filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL) : $to; 
$message = !empty($_POST['message']) ? filter_var(trim($_POST['message']), FILTER_SANITIZE_STRING) : ''; 

$body = "Name: {$name}\r\nEmail: {$from}\r\nMessage: {$message}"; 

$body = wordwrap($body, 70, "\r\n"); 

$headers = [ 
    'MIME-Version: 1.0', 
    'Content-type: text/plain; charset=iso-8859-1', 
    "From: $name <$from>", 
    "Reply-To: <$from>", 
    'X-Mailer: PHP/' .phpversion() 
]; 

$success = mail($to, $body, implode("\r\n", $headers)); 

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') { 
    die(json_encode(['success' => $success])); 
} 

echo $success ? 'Sent Successfully.' : 'An error occurred'; 

ini_set('display_errors', 1); error_reporting(E_ALL); 
+0

您收到的答案是正確的。如果您檢查了[文檔](http://php.net/manual/en/function.mail.php),您將很快發現此錯誤。請注意,這裏的問題應該顯示一點研究成果(見** [問] **)。關於不工作的代碼的問題應該包含[mcve](這意味着,在關於PHP代碼損壞的問題中,您不應該發佈不會導致問題的HTML,JavaScript和CSS)。 –

+0

對不起,我是新來的,我說第二種語言,所以我的語法不太好。我會確保將來做到這一點。然而,我收到的答案並不奏效,而且我在這方面做了更多的研究,你可能會想。如果我不認爲自己做了我所能做的一切,我就不會花時間問這個問題。我把其他代碼放在那裏的原因恰恰就是爲什麼我收到的答案不起作用。這是因爲我的HTML顯示我沒有用於填寫頁面查看器的主題行,這可能會影響一些答案。 – Nora

+0

你說,「他回答我收到的東西沒有用。」它怎麼沒用?它肯定是解決你身體出現在主題中的問題的解決方案。另外,順便說一下:在這種情況下,使用'implode()'是沒有意義的。沒有理由使用它。 –

回答

1

這是因爲,您將您的變量$bodysubject參數爲mail()功能。這條線:

$success = mail($to, $body, implode("\r\n", $headers)); 

應該改爲是這樣的:

$success = mail($to, $subject, $body, implode("\r\n", $headers)); 

確保您設置$subject的東西。

+0

我做了你告訴我要做的事,這次我甚至沒有收到電子郵件。我不希望網站查看者必須填寫主題行,那麼是否有辦法做到這一點,並仍然得到它,以便名稱和消息在電子郵件主消息框中? – Nora

+0

@Nora只需將'$ subject'設置爲您選擇的值即可。沒有人說網站瀏覽者必須填寫它。 – ceejayoz

+0

謝謝 - 我這樣做了,我編輯了我的問題,以顯示我輸入的內容。這次我填寫表格時,我甚至沒有收到電子郵件。 – Nora

相關問題