我无法让PHP的mail()函数在我的本地主机笔记本电脑上工作。 我正在使用Ubuntu 9.04,并在家中连接到无线networking进行互联网连接。 我在terminal中运行以下命令:
sudo apt-get install postfix
一切都很好。 我没有看到任何错误。 当我跑了
mail('[email protected]', 'Subject', 'Message', 'From: localhost <[email protected]>')
在PHP中,函数返回true。 但即使它回复真实,我从来没有收到我的Hotmail帐户的电子邮件。
我错过了一个步骤?
我看着我的mail.log,它说我的连接超时:
Nov 7 00:36:30 john-laptop postfix/pickup[28698]: BB7E14F00AD: uid=33 from=<www-data> Nov 7 00:36:30 john-laptop postfix/cleanup[29131]: BB7E14F00AD: message-id=<20091107053630.BB7E14F00AD@john-laptop> Nov 7 00:36:30 john-laptop postfix/qmgr[4088]: BB7E14F00AD: from=<www-data@john-laptop>, size=316, nrcpt=1 (queue active) Nov 7 00:37:03 john-laptop postfix/smtp[29133]: connect to mx01.1and1.com[74.208.5.4]:25: Connection timed out Nov 7 00:37:33 john-laptop postfix/smtp[29133]: connect to mx00.1and1.com[74.208.5.3]:25: Connection timed out Nov 7 00:37:33 john-laptop postfix/smtp[29133]: BB7E14F00AD: to=<[email protected]>, relay=none, delay=63, delays=0.02/0.01/63/0, dsn=4.4.1, status=deferred (connect to mx00.1and1.com[74.208.5.3]:25: Connection timed out)
嗯…
虽然您可以在工作站上安装SMTP服务器,但很可能您的邮件将在各个位置被阻止。
许多互联网服务供应商阻止住宅帐户传出的SMTP来抵制垃圾邮
许多电子邮件提供商保留与住宅宽带访问相关联的IP地址列表,并阻止收到的邮件,或立即将其移动到垃圾邮件文件夹。
这听起来像是被postfix接受的消息,所以你可以看看postfix日志,如果消息不能传递,你会看到错误消息。 这些错误消息将帮助您找出您被阻止的位置。
但正如我上面提到的,你可能无法解决阻碍你的任何事情。 你可能应该find一个邮件服务提供者,你可以连接到一个SMTP服务器来发送你的邮件。
看到这些相关的问题:
好的,人们在这里猜测,我想在实际给你一个答案之前,我宁愿去排除故障和诊断路线。 他们的答案是非常有效的,但无论如何,我们甚至不知道你的邮件是否被当地的MTA转发。
好的,首先是你已经安装了Postfix …它在运行吗?
$ sudo /etc/init.d/postfix status $ telnet localhost 25
telnet到端口25上的本地主机应该会给你一个指示Postfix安装的标题:
220 gromit.brassy.net ESMTP Postfix (Ubuntu)
好的,所以你已经确认Postfix正在运行。 接下来的事情,search你的mail.log:
$ sudo grep [email protected] /var/log/mail.log
(你看起来像你可能在Ubuntu / Debian,你的邮件日志通常在/var/log/mail.log在其他系统可能是/ var / log / maillog。其次,如果你在Ubuntu上,很多您的用户帐户将有权访问的时间直接阅读mail.log而不需要sudo'ing,因为您在appropiate组中)
你应该看到如下行:
Nov 8 08:37:24 hostname postfix/smtp[7164]: E97DE56A31: to=<[email protected]>, relay=mx.hotmail.com[1.2.3.4]:25, delay=4.2, delays=0.21/0.11/3.8/0.1, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 1D7BF761F3)
所以有很多这方面的信息,但是你想要的是后缀队列ID来查看发生的一切。
该行的开始包含时间和date,以及logging该行的进程的后缀和PID。 下一部分是队列ID: E97DE56A31
现在这行通常会告诉你是否发送了你的邮件,但是最好通过这个过程来运行:
$ sudo grep E97DE56A31 /var/log/mail.log
这应该给你你的邮件的完整抄本。
如果在上面的情况下,你可能在mail.log文件中找不到任何感兴趣的东西,它看起来像你的邮件没有提交给Postfix。 你需要开始检查你的php.ini邮件设置。
其他海报的概述可能有多种原因。 我要做的第一件事是运行mailq命令行应用程序,看看你的testing消息是否坐在等待交付。 我还会在/var/log/mail.log中查看电子邮件发生了什么(就像Zoredache说的那样)。
Hotmail(或者任何desintation)都可能只是甩掉了你的电子邮件。 它可能会有一些基本的反垃圾邮件testing失败(例如,主机名可能不完全合格,可能不会匹配PTR)。
干杯,jmi
如果你想使用你的本地主机作为邮件服务器(如你想testing脚本等),你需要告诉你的邮件服务器使用你的ISP的邮件服务器作为“智能主机”。 现在“智能主机”是sendmail术语(我不使用后缀),但我相信有一个后缀等效。
对于你发送的每封电子邮件(无论如何)和你的本地主机是邮件中继,它将使用你的ISP的邮件服务器来完成这项工作,通过postfix连接到你的ISP的邮件服务器,而不是直接的,例如hotmail。
ISP的阻止(在您的连接)端口25,这是邮件端口,以打击垃圾邮件,所以你不能直接发送,但你可以间接使用您的ISP的邮件服务器发送。
HTH。