我正在设置一个使用 apache2、PHP5 和 sendmail 的 Science Fair in a Box 服务器(尽管我们已经卸载了 sendmail 并安装了 postfix,但问题没有任何变化)来向参与者发送他们的登录名/注册号码。
当调用 PHP mail() 时,它具有正确格式的 FROM: 地址,但是因为 sendmail 经过身份验证并从 www-data@localhost 接收它,所以它会删除电子邮件地址并将其替换为 <@>,这会导致邮件被发送但被它发送到的任何服务器过滤掉。
以下是发送到 PHP mail() 的 PHP 输出:
2018-01-23,1516725176,[email protected],[email protected],Registration for Kiwanis Southeast Alberta Regional Science Fair,We have received a request for the retrieval of your registration number from this email address. Please find your existing registration number below Registration Number: 380285
这是 /var/mail/mail.log 摘录:
Jan 23 16:28:36 localhost sendmail[813]: w0NGSaU2000813: Authentication-Warning: seab-sciencefair.com: www-data set sender to @ using -f
Jan 23 16:28:36 localhost sendmail[813]: w0NGSaU2000813: from=@, size=259, class=0, nrcpts=1, msgid=<[email protected]>, relay=www-data@localhost
Jan 23 16:28:36 localhost sm-mta[814]: w0NGSasq000814: from=<>, size=575, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=ip6-localhost [127.0.0.1]
Jan 23 16:28:36 localhost sendmail[813]: w0NGSaU2000813: [email protected], delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30259, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (w0NGSasq000814 Message accepted for delivery)
Jan 23 16:28:36 localhost sm-mta[816]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES128-GCM-SHA256, bits=128/128
Jan 23 16:28:37 localhost sm-mta[816]: w0NGSasq000814: to=<[email protected]>, delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=120575, relay=gmail-smtp-in.l.google.com. [74.125.202.26], dsn=2.0.0, stat=Sent (OK 1516724916 i8si684450iof.207 - gsmtp)
过去我们曾从命令行发送邮件,因此 sendmail 可以发送。
它正在发送邮件,但 FROM: 需要更改。因此,我将其解释为配置问题或 apache2 别名问题。
我注意到该服务器位于 digitalocean 上,这是一个云配置问题吗?
下一步我应该尝试什么?哪个软件可能是罪魁祸首?
答案1
看看第三个例子https://secure.php.net/manual/en/function.mail.php:
<?php mail('[email protected]', 'the subject', 'the message', null, '[email protected]');?>
该-f
选项是您需要设置发件人值的内容。单独的“@”不合适,也许您的设置php.ini
不正确?
但也请注意,sendmail 可能会决定丢弃该值并放置其他内容,具体取决于其自己的设置,通常是在日志中发出警告。