电子邮件表格不会从aol.com yahoo.com地址发送

时间:2014-08-29 15:14:09

标签: php email

我的电子邮件表单正在运行,但在用户使用aol.com和yahoo.com电子邮件地址时不会发送电子邮件。我需要改变什么? PHP文件由godaddy托管。

我是设计师,PHP不是我的强项,你能解释我对现有代码的更改(如果改变是代码的话)。这个问题非常令人沮丧。

 // Only process POST reqeusts.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Get the form fields and remove whitespace.
    $name = strip_tags(trim($_POST["name"]));
            $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $message = trim($_POST["message"]);

    // Check that data was sent to the mailer.
    if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        // Set a 400 (bad request) response code and exit.
        // http_response_code(400);
        echo "Oops! There was a problem with your submission. Please complete the form and try again.";
        exit;
    }

    // Set the recipient email address.
    // FIXME: Update this to your desired email address.
    $recipient = "mysite@mysite.com";

    // Set the email subject.
    $subject = "New contact from $name";

    // Build the email content.
    $email_content = "Name: $name\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Message:\n$message\n";

    // Build the email headers.
    $email_headers = "From: $name <$email>";

    // Send the email.
    if (mail($recipient, $subject, $email_content, $email_headers)) {
        //Set a 200 (okay) response code.
      //  http_response_code(200);
        echo "Thank You! Your message has been sent.";
    } else {
        // Set a 500 (internal server error) response code.
       // http_response_code(500);
        echo "Oops! Something went wrong and we couldn't send your message.";
    }

} else {
    // Not a POST request, set a 403 (forbidden) response code.
   // http_response_code(403);
    echo "There was a problem with your submission, please try again.";
}

4 个答案:

答案 0 :(得分:0)

我唯一可以想到的是goDaddy已阻止这些域发送电子邮件,因为mail()使用服务器设置

答案 1 :(得分:0)

我也没有在您的简单代码中看到任何错误。有些事情需要考虑:

  • 正文标题中的新行应使用CRLF \r\n,而不仅仅是\n

  • 您还可以使用其他参数并使用-f命令(发送程序的可信用户)将您的电子邮件设置为第五参数

示例:

// Send the email.
if (mail($recipient, $subject, $email_content, $email_headers,"-f".$email)) {
  • 由于您是设计师,我还建议使用 PHPMailer 等工具,这样可以简化电子邮件流程并为您修复一些内容。

答案 2 :(得分:0)

那是因为您不应该代表您无法通过未经授权的邮件服务器控制的电子邮件地址发送邮件。这是关于大多数人似乎忽略的电子邮件的规则,但雅虎和AOL最近都改变了他们的政策,以阻止你想要做的事情。

http://blog.mailchimp.com/aol-changes-dmarc-policy/

我希望随着时间的推移,这将成为越来越多邮件提供商所做的事情。

应该正在做的是使用您拥有的电子邮件地址,通过该域出站服务器或域授权的邮件发送邮件,以及不要试图欺骗别人的地址。除了所有人都不会显得阴暗之外,你不太可能与DMARC和SPF政策,垃圾邮件过滤器以及厌恶StackOverflow的愤怒电子邮件管理员发生冲突。

答案 3 :(得分:0)

我在这个问题上撕掉了好几个星期的头发。终于今天弄明白了。如果您的表单有一个电子邮件字段,并且其名称为&#34; email&#34;,并且用户键入@aol或@yahoo电子邮件地址,那么Formmail将表现得没什么不对,但表单将不会被发送。

这很容易解决。只需使用其他东西(其他任何,但&#34;电子邮件&#34;)作为电子邮件字段名称,例如&#34; FromEmail&#34; ..轻松便捷。

如果用户输入类似dingbat@aol.com或doofus@yahoo.com的内容:

这不会起作用:

<input type="text" name="email" size="30" maxlength="100" />

但这会:

<input type="text" name="FromEmail" size="30" maxlength="100" />
祝你好运!

查兹