在Linux本地主机上configuration邮件服务器?

我无法让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服务器来发送你的邮件。

看到这些相关的问题:

  • 如何发送电子邮件,并避免被分类为垃圾邮件
  • 为什么我的PHP应用程序发送的电子邮件被视为垃圾邮件?

好的,人们在这里猜测,我想在实际给你一个答案之前,我宁愿去排除故障和诊断路线。 他们的答案是非常有效的,但无论如何,我们甚至不知道你的邮件是否被当地的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。