折磨了好几天了。 用PHP的原生的mail()发邮件,显示发送成功。就是收不到

2013-06-25 09:43:03 +08:00
 meteor2013
这是PHP网站上的示例代码:

<?php
$to = 'nobody@example.com'; //这里已经改为自己的email
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>


我的环境是,
1. Mac Pro上mountain lion运行的MAMP
2. Windows 7上运行的XAMPP

都修改了php.ini 里面的 [mail function]的设置.

不管是MAMP 还是XAMPP , 都是发送成功。就是收不到邮件。
大家觉得是什么原因啊?
16519 次点击
所在节点    PHP
23 条回复
solupro
2013-06-25 09:49:35 +08:00
这个是要本地smtp服务支持的吧
meteor2013
2013-06-25 09:55:49 +08:00
@solupro

必须要本地smtp服务吗?
为什么php.ini 里面的 [mail function], 如果设置For Unix 就不需要设置SMTP 呢?
是不是可以选SMTP 发送,也可以sendmail发送? 有点晕了。。。。。


[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
lichao
2013-06-25 10:01:38 +08:00
你声称邮件来自 example.com,那你机器的 hostname 是否是 example.com 呢,收邮件的时候会去验证的。否则你能以任何人的名义发邮件了
meteor2013
2013-06-25 10:10:02 +08:00
@lichao 发件人地址没有关系。只要收件人地址对了就可以。
我在MT(http://mediatemple.net/)上的服务器上运行 上面的示例代码, 就可以发到我的Gmail邮箱。

现在的问题是我自己架设的2台电脑发出去收不到 (1. Mac Pro上mountain lion运行的MAMP
2. Windows 7上运行的XAMPP)
lichao
2013-06-25 10:15:35 +08:00
@meteor2013 发件人地址没有关系??

不认同你的看法。Gmail 会去验证你邮箱的 domain 跟你发邮件的 IP 是否匹配的。否则你可以用 任意如:sjobs@apple.com 的发件人地址来发邮件了。
wtbhk
2013-06-25 10:36:43 +08:00
@meteor2013 这么草率的就说发件地址没关系?我记得我当时学习邮件协议的时候就试过了,发件地址还真有关系,但具体取决于收件邮箱服务器的规则。
solupro
2013-06-25 10:42:43 +08:00
@meteor2013
嗯,配置默认就是监听localhost的25端口了吧。
至于调用远程服务器的smtp服务发送邮件,可以看看这里
http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Remote_SMTP_Server_for_Sending_Mail.htm
但是如果远程服务器需要验证好像就不能通过mail函数发送了,里面有相关链接你可以参考一下!
jerry
2013-06-25 10:46:44 +08:00
需要smtp服务支持的,linux一般默认都安装了sendmail做MTA
meteor2013
2013-06-25 10:51:18 +08:00
@wtbhk @lichao
各位大哥,我是真用example.com发到我gmail了啊。
请看下图:
[img]http://s8.postimg.org/z5xxdxa3p/20130624223627.jpg[/img]
meteor2013
2013-06-25 10:53:09 +08:00
@jerry 看来问题真是smtp? 就是说一定要设置smtp服务?
在 MAMP上怎么装sendmail做MTA呢?
lichao
2013-06-25 11:07:28 +08:00
@meteor2013 那说明 Gmail 过滤规则有时候会变(你即使受到了,应该也是在垃圾箱吧),我几年前还伪装成比尔盖茨的邮件地址发邮件给我同学来着,但是现在肯定行不通了。
solf
2013-06-25 12:11:40 +08:00
linux 下的sendmail或者postfix关了,启动一下这个service吧。

Mac不知道有没有这个MTA
darasion
2013-06-25 12:17:50 +08:00
haijd
2013-07-02 17:58:23 +08:00
发邮件还是建议使用 SMTP 协议,注册一个正规的邮箱来发,不然很容易被当做垃圾邮件过滤掉的。
Gmail少量测试还可以,数量多以后一样会被判为垃圾邮件。
code4craft
2013-07-03 07:37:08 +08:00
程序内调用的话,应该也是用SMTP协议发送(不清楚PHP,但是如果之前发送收到了,那应该就是对的),跟本地搭建MTA的效果差距不大。
SMTP本身不复杂,但是邮件运营方的过滤策略就比较复杂了。抛开内容不谈,大的运营商都会根据发信IP进行过滤,你可以在gmail里选一封邮件,显示原始邮件,`Received: from`一栏就能说明问题了。你这样的邮件很可能已经被gmail拒收了。
你可以本地搭建一个接收服务器(postfix之类的),然后测试一下。
gdtv
2013-07-04 13:06:17 +08:00
你电脑上必须要有邮件服务器才行,
我是windows7+xampp
php.ini 里面的 [mail function]不用修改,用默认的设置就行
在win7里运行1st smtp server这个简单的邮件服务器软件,打开就行,不用设置,下载地址自己去谷歌一下。
然后就可以在php里直接用mail()函数发送了,并且1st smtp server还能看到出错信息,方便调试。

如果你电脑上没有邮件服务器,就要用smtp方式发送,要修改php.ini 里面的 [mail function]或者在php里用代码实现。
shiny
2013-07-04 13:08:15 +08:00
发件地址gmail和国内一些邮箱是不会验证的,但是QQ邮箱会。以前试过伪造 @taobao.com 的地址都成功了。
clowwindy
2013-07-04 13:25:33 +08:00
1. 本地要有 sendmail。
2. 生产环境要支持 SPF 和 DKIM,或者找邮件服务商,比如 Mailgun 帮你发。否则多半会进垃圾邮件,或者垃圾邮件都没进。
vilic
2013-07-04 13:32:10 +08:00
服务器信誉问题?对应发件域名添加相关txt记录应该就可以了。就像hotmail验证其他邮箱之后可以发送对应邮件一样,别个收件的相信那个发件服务器。
shixinyu
2013-07-04 23:25:30 +08:00
现在自建邮件服务器不靠谱的地方就在于发出去了,对方不一定能收到,不是被对方邮箱服务商拒收就是放入垃圾箱了。所以应该考虑使用EDM商,非专业的用QQ企业邮箱绑定自己域名来走SMTP协议发送,专业的用搜狐的SendCloud(http://sendcloud.sohu.com)来发送吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/73517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX