AT&T SMS 短信的 Sendmail 问题

AT&T SMS 短信的 Sendmail 问题

我的邮件中继工作正常,我的 DigOc 主机(上面有许多域)通过我单独的基于 cPanel 的共享托管计划邮件服务器中继邮件,登录到我在那里的邮件帐户。 (对我来说,这比安装和配置 Postfix 更简单。)

一切都很顺利,除非我想发送如下所示的 AT&T SMS 短信:

[电子邮件受保护]

(显然我已经改变了这个数字。)

如果我从网络浏览器通过 Gmail 手动发送邮件,则此方法有效,但如果我使用 PHP 脚本或带有 sendmail 邮件技术的 Bash 脚本则无效。当我检查邮件日志时,我看到以下内容。请注意,我故意更改了下面的 IP 地址和电话号码。

Jun  8 17:25:39 corp1 sendmail[5826]: u58HPdCP005826: from=root, size=51, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Jun  8 17:25:39 corp1 sm-mta[5827]: u58HPdKW005827: from=<[email protected]>, size=314, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=corp1.104-226-131-166-com [127.0.0.1]
Jun  8 17:25:39 corp1 sendmail[5826]: u58HPdCP005826: [email protected], ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30051, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (u58HPdKW005827 Message accepted for delivery)
Jun  8 17:25:39 corp1 sm-mta[5829]: STARTTLS=client, relay=mx3a.txt.att.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
Jun  8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005827: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120314, relay=mx3a.txt.att.net. [166.216.149.129], dsn=5.0.0, stat=Service unavailable
Jun  8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005827: u58HPdKW005829: DSN: Service unavailable
Jun  8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005829: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30000, dsn=2.0.0, stat=Sent

我强烈怀疑问题出在这一行:

Jun  8 17:25:39 corp1 sm-mta[5829]: STARTTLS=client, relay=mx3a.txt.att.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256

我在 Sendmail 配置中是否需要做一些明显的事情来帮助此邮件消息正常工作?

编辑

接受了 @Anderzej 的建议并做了这一步。我得到的回应是:

[email protected]... Connecting to mx3a.txt.att.net. via esmtp...
220 alpemg-mtmta04 bizsmtp ESMTP server ready
>>> EHLO corp1.104-226-131-166-com
250-alpemg-mtmta04 hello [104.226.131.166], pleased to meet you
250-HELP
250-SIZE 1500000
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO corp1.104-226-131-166-com
250-alpemg-mtmta04 hello [104.226.131.166], pleased to meet you
250-HELP
250-SIZE 1500000
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 OK
>>> MAIL From:<[email protected]> SIZE=65
554 5.1.0 corp1.104-226-131-166-com  has no MX or A record
/root/dead.letter... Saved message in /root/dead.letter
Closing connection to mx3a.txt.att.net.
>>> QUIT

答案1

感谢@JennyD,这似乎是解决方案:

  1. 开启调试在您的 sendmail 测试脚本上,以便您可以准确地了解问题所在。

  2. 即使通过另一台主机进行中继,某些邮件服务器也会对您进行检查。因此,您的 /etc/mail/sendmail.mc 文件中的 MASQUERADE_AS() 中需要一个有效的域,它必须位于同一台服务器上,并且必须响应 A 和 MX 记录的 DNS 查询。该域不需要是您希望“发件人:”甚至“回复:”所指定的实际域,而只是收件人邮件服务器将检查的域。

  3. 您需要阅读 MASQUERADE_DOMAIN,然后阅读 allmasquerade、masquerade_envelope 和 masquerade_entire_domain 功能来查看是否需要它们,如果您要从一台主机为多个域提供邮件,则需要运行多个测试。就我而言,我不需要这些。现在,我可以像从同一主机发送 x.com、y.com 和 z.com 一样发送邮件,并且当 AT&T 邮件服务器检查发送邮件的邮件服务器时,它将列出 x.com就我而言。但是,当 SMS 文本警报消息传入时,我可以使其显示为来自 x.com、y.com 和 z.com。

  4. 您还可能会遇到 AT&T 邮件服务器(也许还有其他邮件服务器)的奇怪情况,您需要mail()在 PHP 中的命令中添加第五个参数。我必须调整我的移动警报,其中 x.com 是我想要的发件人:地址域,而您的收件人:地址是.注意参数后面不要有空格。mail($sEmail,'',"HERE IS YOUR ALERT",'','[email protected]');$sEmail[email protected]-f

答案2

第一个也是主要的问题是您的 sendmail 被配置为在不存在的域中使用不存在的主机名。没有名为“104-226-131-166-com”的域。这意味着每当任何脚本或系统函数在没有指定发件人地址的情况下发送邮件时,它将使用无效的地址 - 这反过来意味着某些系统(如 att.net)将拒绝邮件其他人会立即将其分类到垃圾邮件箱中或默默地丢弃它。如果收件人系统确实接受了邮件,但随后无法投递邮件,您将不会收到任何错误消息来通知您该问题。

您应该更改 sendmail 配置,以便默认使用的主机名是服务器的实际主机名。

您还应该更改脚本,以便将其自己的发件人地址设置为您希望任何错误消息到达的任何地址。

相关内容