3

我对 php 还很陌生,我最近尝试使用邮件功能,但它不起作用。这是我的代码:

<?php

// Pick up the form data and assign it to variables
$name = $_POST['name'];
$email = $_POST['email'];
$topic = $_POST['topic'];
$comments = $_POST['comments'];

// Build the email (replace the address in the $to section with your own)

$to = 'tishsny@gmail.com';
$subject = "New message: $topic";
$message = "$name said: $comments";
$headers = "From: $email";

// Send the mail using PHPs mail() function
if( mail($to, $subject, $message, $headers) ) header("Location:../forms/success.html");
else header( "Location:../forms/failure.html" );
?>

我将 sendmail 的路径添加到 php.ini 文件中,但它仍然无法正常工作。mail 函数总是返回 true,但我没有收到任何邮件。mail.log 显示了一堆超时。这是一些输出:

postfix/qmgr[3523]: BB800B124A: from=<_www@Leticias-MacBook-Pro.local>, size=382, nrcpt=1 (queue active)
postfix/qmgr[3523]: CB34EB0E9F: from=<_www@Leticias-MacBook-Pro.local>, size=405, nrcpt=1 (queue active)
postfix/qmgr[3523]: D6C18B0D7B: from=<_www@Leticias-MacBook-Pro.local>, size=394, nrcpt=1 (queue active)
postfix/smtp[3527]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400e:c01::1b]:25: No route to host
postfix/smtp[3533]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400e:c01::1b]:25: No route to host
postfix/pickup[3522]: 8A9EEB1823: uid=70 from=<_www>
postfix/cleanup[3524]: 8A9EEB1823: message-id=<20130321193156.8A9EEB1823@Leticias-MacBook-Pro.local>
postfix/qmgr[3523]: 8A9EEB1823: from=<_www@Leticias-MacBook-Pro.local>, size=392, nrcpt=1 (queue active)
postfix/smtp[3526]: connect to mx3.hotmail.com[65.55.37.72]:25: Operation timed out
postfix/smtp[3531]: connect to gmail-smtp-in.l.google.com[74.125.141.27]:25: Operation timed out
postfix/smtp[3531]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400e:c01::1b]:25: No route to host
postfix/smtp[3531]: connect to alt1.gmail-smtp-in.l.google.com[2607:f8b0:400e:c02::1b]:25: No route to host
4

3 回答 3

0

It appears that your ISP and/or your network/host's firewall may be disallowing outbound SMTP connections. There's no reason you should be seeing those errors about Operation Timed Out and No route to host.

于 2013-03-21T20:29:45.097 回答
0

以下是一些可能的原因:

  1. 您的 ISP(Verizon、AT&T、Comcast 或您的学校等)阻止了您的出站端口(以防止垃圾邮件和网络攻击)。

这是最有可能的情况。基本上,您不能在家庭网络中作为电子邮件“主机”发送电子邮件。过去,您可以通过 gmail 或其他 SMTP 服务器设置中继服务器,但最近 ISP 变得更聪明并且也阻止了中继请求(是的,他们确实读取了您发送或接收的每个数据)。

所以我的建议是:如果您愿意,请为安全的 VPN 付费。

  1. 您不在家庭网络中,但中继服务器/路由器阻止了您的出站请求。您必须找到一种方法在防火墙中转发您的端口。根据路由器或中继服务器的操作系统/固件,可能有数百万种不同的方式来转发您的端口。或者您可以完全关闭防火墙。

  2. 它完全不在你的掌控之中。您的 IP 被标记为垃圾邮件机器人(很可能有人窃取了您的 IP 并将其用于网络攻击)。您将不得不更改您的 IP(或为安全的 VPN 付费)。

于 2015-03-13T07:45:37.360 回答
0

你能发布你的 php.ini smtp 部分吗?

如果您使用的是 GMail(看起来像...),您将需要使用 SSL/TLS,我不知道 PHP 是否本机支持 SMTP。您可以将转发器与 Sendmail 一起使用并在本地发送未加密的邮件,然后让 Sendmail 使用 TLS 在 Gmail 上转发它。

您可能需要考虑使用第三方解决方案,例如 PHPMailer。它支持 Gmail 的 SSL/TLS,查看以下示例:

http://phpmailer.worxware.com/index.php?pg=examplebgmail

您可以从以下位置下载 PHPMailer:

http://sourceforge.net/projects/phpmailer/

这是 PHPMailer 的另一个教程:

http://phpmailer.worxware.com/index.php?pg=tutorial#2

编辑:正如马克所说,您的 ISP 可能会阻止出站端口 25。Gmail 还支持端口 465 上的 SMTP(但同样,您将需要 TLS)。

于 2013-03-21T20:25:40.620 回答