2017-08-14 183 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

相关问题