我有一个简单的脚本设置:
<?php
mail('[email protected]', 'Hello World', 'Testing a message');
?>
我无法从我的服务器向 AOL 帐户发送电子邮件。错误详细信息如下。GMail 允许我发送邮件...所以我猜 AOL 有点严格。
Starting tcpick 0.2.1 at 2009-08-03 22:25 UTC
Timeout for connections is 600
tcpick: reading from tcp_dump.pcap
1 SYN-SENT 67.23.28.65:49516 > 64.12.138.153:smtp
1 SYN-RECEIVED 67.23.28.65:49516 > 64.12.138.153:smtp
1 ESTABLISHED 67.23.28.65:49516 > 64.12.138.153:smtp
220-rly-mg05.mx.aol.com ESMTP mail_relay_in-mg05.6; Mon, 03 Aug 2009 18:25:34 -0400
220-America Online (AOL) and its affiliated companies do not
220- authorize the use of its proprietary computers and computer
220- networks to accept, transmit, or distribute unsolicited bulk
220- e-mail sent from the internet. Effective immediately: AOL
220- may no longer accept connections from IP addresses which
220 have no reverse-DNS (PTR record) assigned.
EHLO bandop.com
250-rly-mg05.mx.aol.com fallsroadsunoco.com
250 HELP
MAIL FROM:<www-data@com>
501 SYNTAX ERROR IN PARAMETERS OR ARGUMENTS
RSET
250 OK
QUIT
1 FIN-WAIT-1 67.23.28.65:49516 > 64.12.138.153:smtp
2 SYN-SENT 67.23.28.65:45729 > 216.239.113.101:smtp
1 FIN-WAIT-2 67.23.28.65:49516 > 64.12.138.153:smtp
221 SERVICE CLOSING CHANNEL
1 RESET 67.23.28.65:49516 > 64.12.138.153:smtp
3 SYN-SENT 67.23.28.65:45729 > 216.239.113.101:smtp
tcpick: done reading from tcp_dump.pcap
20 packets captured
3 tcp sessions detected
您知道如何才能正确显示 FROM 参数吗?在 PHP 邮件函数中设置 FROM 标头不起作用。
更新
这个小技巧是有效的,但是我更愿意在 PHP 之外解决这个问题。
mail('[email protected]', 'Hello World', 'Testing a message', null,'[email protected]');
我对邮件服务器非常陌生
答案1
使用 AOL 时,除非您填写表单列入白名单。要更改邮件的来源,请编辑 php.ini 文件中的 sendmail_path 参数。这在php mail() 文档在 additional_parameters 下。
例如:
sendmail_path = "/usr/sbin/sendmail -t -f [email protected]"
您也可以将参数传递给 mail() 函数:
<?php
mail('[email protected]', 'the subject', 'the message', null,
'[email protected]');
?>
答案2
您想要更改信封发件人:地址,该地址与发件人:标题不同。请参阅此评论在 mail() 函数的文档中。
信封地址取决于您的 MTA 配置 - 在您的例子中,“www-data”是运行脚本的用户,“com”是机器主机名(的一部分?)。假设您使用的是 *nix,您可以尝试像这样覆盖信封地址:
mail('[email protected]', 'Hello World', 'Testing a message', null,'[email protected]');
在哪里[电子邮件保护]是您想要显示的信封发件人地址。
如果可行,并且您可以访问 php.ini 文件,则可以在那里设置信封发件人地址 - 请参阅 Kyle 的帖子。
您可能还想查看您的 MTA(sendmail、postfix)配置 - 看起来您的主机名设置有问题。更改 php-s 设置将修复 php 的问题,但如果系统上的其他程序(cron、logwatch)想要发送邮件,那么拥有一个正常工作的 MTA 会很有帮助。
在您的评论后进行编辑: 如果不知道您的邮件服务器的配置,就很难提出任何建议,但首先,请尝试以下步骤:
myhostname = mail.virtualhostname.com
mydomain = virtualhostname.com
myorigin = $mydomain
masquerade_domains = virtualhostname.com
答案3
尝试转义 at 符号。
mail('corgan1003\@aol.com', 'Hello World', 'Testing a message');