我有一台主机名和 DNS 为 的服务器example.com
。我还有一个 的 Google 应用帐户。我的 MX 记录设置正确,我可以使用我的个人电子邮件[email protected]
发送和接收电子邮件。[email protected]
在服务器 上example.com
,我有一些代码使用 sendmail 向 发送电子邮件[email protected]
。我没有使用 sendmail 配置任何 smtp。我可以从服务器example.com
向发送邮件[email protected]
,但是当我尝试从服务器向 发送电子邮件时example.com
,[email protected]
我在 中收到以下错误/var/log/maillog
:
... while talking to [127.0.0.1]:
>>> DATA
<<< 550 5.1.1 <[email protected]>... User unknown
550 5.1.1 <[email protected]>... User unknown
<<< 503 5.0.0 Need RCPT (recipient)
我想象这是因为 sendmail 正在接收电子邮件[email protected]
,然后“啊哈!我是example.com!我只需要将其发送给此服务器上的用户。”而不是查看 MX 记录并看到它需要将其转发到 gmail 服务器。
我如何告诉 sendmail 将所有消息转发到 Gmail 服务器而不管域名是什么?
注意:域名已更改为example.com
保护无辜者。
答案1
问题是 - 正如您所推断的 - 您的服务器的主机名使得example.com
该服务器上的 MTA 认为任何电子邮件都应@example.com
在本地传递。
快速解决方案是简单地更改主机名,例如调用您的服务器www.example.com
。
或者,您可以使用 sendmail 的 MAIL_HUB 功能将本地邮件重定向到另一台服务器:在 sendmail.mc 宏文件中设置:
define(`MAIL_HUB', `mailer:servername')
将该服务器名称替换为您的主 MX 记录的主机名。这会将从您的服务器发送到<username>@<hostname>
ie的消息重定向[email protected]
到服务器名称。
该问题的实际答案:“我怎样才能告诉 sendmail 将所有消息转发到 Gmail 服务器而不管域名是什么?”是:
您不希望这样。Gmail 不是开放中继,会拒绝任何未在本地处理的内容。
该功能确实存在,在 sendmail 术语中称为 SMART_HOST。这需要专门配置为中继您的 ip 地址(范围)的传出 smtp 服务器,例如您的 ISP 的传出 SMTP 服务器。
define(`SMART_HOST', `smtp.your.provider')dnl
答案2
命名主机
hostname.example.com
(如 所报告hostname --fqdn
)。
此过程取决于操作系统/发行版。如果
example.com
仍然在本地电子邮件域列表中,则关闭本地电子邮件域列表的自动配置。
检查本地电子邮件域列表:
以 root 身份执行
echo $=w | sendmail -bt
删除本地电子邮件域列表的自动配置:
在 sendmail.mc 中添加以下行,重新编译 sendmail.cf 并重新启动/重新加载 sendmail 守护程序
define(`confDONT_PROBE_INTERFACES',`True')
本地电子邮件域名可能会在 中明确列出/etc/mail/local-host-names
。