为什么此电子邮件表单代码不起作用?

时间:2016-12-30 23:49:02

标签: php html forms email

我正在尝试运行一个电子邮件表单,该表单从用户的输入表单中获取文本并将其发送到我想要的电子邮件(在下面的php中显示为$ myemail)。

body

我将上面的代码吐出到网页上并将文件上传到我的服务器。在线访问网页,向表单填写内容,然后单击sbmit,页面刷新,输入和textarea按预期清除。当我查看我设置的电子邮件时,没有收到任何消息。我该怎么做才能更正此代码,以便所需的电子邮件地址实际收到消息?

非常感谢。

3 个答案:

答案 0 :(得分:1)

您需要在双引号内插入实际的$ email变量:
   $headers = "From: $myemail\n";来    $headers = "From: ${myemail}"."\r\n";
 如果指定其他标题,例如From,Cc和Bcc。
其他标题应使用CRLF(\ r \ n)分隔。

这是来自php doc的例子:

 `<?php
  $to      = 'nobody@example.com';
  $subject = 'the subject';
  $message = 'hello';
  $headers = 'From: webmaster@example.com' . "\r\n" .
  'Reply-To: webmaster@example.com' . "\r\n" .
  'X-Mailer: PHP/' . phpversion();
  mail($to, $subject, $message, $headers);
 ?>

快乐的编码!

答案 1 :(得分:1)

您应该尝试使用PHPMailer等库。 mail()函数有时不够灵活,无法在大多数情况下实现所需。此外,mail()功能还需要本地邮件服务器。此外,PHPMailer提供了许多插件,例如设置附件的功能或向用户发送HTML电子邮件的功能。使用这样的库也意味着您的电子邮件几乎会一直发送出来,因为它经过了许多人的测试和使用。

您可以在此处找到使用PHPMailer的教程:https://www.sitepoint.com/sending-emails-php-phpmailer/

使用PHPMailer从网站获取的示例代码:

<?php

require_once "vendor/autoload.php";

//PHPMailer Object
$mail = new PHPMailer;

//From email address and name
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";

//To address and name
$mail->addAddress("recepient1@example.com", "Recepient Name");
$mail->addAddress("recepient1@example.com"); //Recipient name is optional

//Address to which recipient will reply
$mail->addReplyTo("reply@yourdomain.com", "Reply");

//CC and BCC
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com");

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

if(!$mail->send()) 
{
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
else 
{
    echo "Message has been sent successfully";
}

?>

答案 2 :(得分:1)

一些可能很好地解决您的问题的指针,而没有具体告诉您这个问题的原因是什么:

1) Use Error Logging

2)检查服务器上是否设置了有效的邮件服务器。正如Jason K的评论中所述。

3)使用PHPMailer等邮件库。它避免了大量的头痛。

4)检查您的电子邮件是否有效the correct code,主要使用filter_var而不是迟钝的正则表达式。

同时检查电子邮件 Sanitized FILTER_SANITIZE_EMAIL)。

5)如果没有使用或设置PHPMailer或SwiftMailer等库,那么您需要来检查mail headers are exactly correct

<强>奖金
似乎有一些conflicting accounts用于电子邮件行结尾[包括标题],但我建议PHP_EOL\r\n(在Linux服务器上同样的事情) )。 \n不合适。正如Barmar的评论中所述。

祝你好运