2014-08-29 112 views
-1

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

我是一名设计师,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 = "[email protected]"; 

    // 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."; 
} 
+0

使用'filter_var'验证电子邮件地址的道具。 – amphetamachine 2014-08-29 15:16:58

+0

这不是垃圾邮件文件夹问题吗? – 2014-08-29 15:18:27

+0

它不......没有发送,它可能被抓到你的垃圾邮件或垃圾邮件过滤器。 – cmorrissey 2014-08-29 15:19:09

回答

0

,我能想到的唯一的事情是,GoDaddy的已阻止这些域名用于发送电子邮件,因为电子邮件()使用服务器设置

0

我还没有看到任何错误的简单的代码。有些事情要考虑:

  • 你体内头新线路应采用CRLF \r\n,而不是简单地\n

  • 您也可以使用其他参数和设置您的电子邮件作为5带-f命令的参数(发送程序的可信用户)。

例子:

// Send the email. 
if (mail($recipient, $subject, $email_content, $email_headers,"-f".$email)) { 
  • 既然你是一名设计师,我也建议使用的工具,如PHPMailer,它可以简化电子邮寄过程和修复了一些东西给你。
0

那么,那是因为你不应该通过邮件服务器无法控制的邮件地址发送邮件。这是大多数人似乎忽视的关于电子邮件的规则,但雅虎和美国在线最近都改变了他们的政策,以阻止你正在尝试做的确切事情。

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

我预计这将成为越来越多的邮件提供商做,随着时间的事情不胜枚举。

什么你应该可以是使用你自己发出邮件的电子邮件地址,通过这样做,无论是域的出站服务器或一个由域的授权,而不是试图欺骗别人的地址。除了没有出现任何泄露之外,您将不太可能与DMARC和SPF政策,垃圾邮件过滤器以及愤怒的电子邮件管理员发生冲突,从而无法看到StackOverflow。

+0

但是,感谢您的解释,这只是通过联系表单接收信息,而不是发送给其他电子邮件地址。我意识到这只是前往我的垃圾邮件文件夹,它被埋没了。 – 2014-09-24 17:05:57

0

我把这个问题的头发撕了好几个星期。终于明白了今天。如果您的表单有一个电子邮件字段,并且其名称为“电子邮件”,并且用户键入@aol或@yahoo电子邮件地址,Formmail将表现为没有错误,但不会发送该表单。

这是一个简单的修复。只需使用其他的东西(其他任何,但“电子邮件”)的电子邮件字段名称,如“FromEmail”..容易peasy。

如果用户键入类似[email protected][email protected]

这是行不通的:

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

但这会:

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

祝你好运!

查兹

相关问题