我有一个服务器与主机名和DNS example.com
。 我也有一个谷歌应用程序帐户[email protected]
。 我的MXlogging设置正确,我可以用我的个人电子邮件发送和接收来自[email protected]
电子邮件。
在服务器example.com
,我有一些代码使用sendmail将电子邮件发送到[email protected]
。 我没有任何使用sendmailconfiguration的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]
的电子邮件,并且“ah-ha! 我是 example.com!我只需要将它发送给此服务器上的用户”。 而不是看MXlogging,看到它需要将它们转发到Gmail服务器。
如何告诉sendmail将所有消息转发到gmail服务器而不考虑域名?
注意:域名更改为example.com
以保护无辜者。
问题是 – 正如你推断的那样 – 你的服务器的主机名是example.com
使得该服务器上的MTA认为任何到@example.com
的电子邮件都应该在本地交付。
快速解决scheme是简单地更改主机名,例如调用您的服务器www.example.com
。
或者,您可以使用sendmail的MAIL_HUBfunction将本地邮件redirect到另一台服务器:在sendmail.mcmacros文件集中:
define(`MAIL_HUB', `mailer:servername')
将该服务器名称replace为主MXlogging的主机名。 这将redirect从您的服务器发送到<username>@<hostname>
即[email protected]
到服务器名称的[email protected]
。
问题的实际答案是: “我怎样才能告诉sendmail将所有消息转发到gmail服务器,而不考虑域名? 是:
你不要那个。 Gmail不是一个开放的中继,并会拒绝任何不在本地处理的内容。
该function确实存在,在sendmail术语中称为SMART_HOST。 这需要一个外出的SMTP服务器专门configuration为您的IP地址(范围),如您的ISP的传出SMTP服务器中继。
define(`SMART_HOST', `smtp.your.provider')dnl
将主机命名为hostname.example.com
(由hostname --fqdn
报告)。
该过程是操作系统/分布相关的。
如果example.com
保持在本地电子邮件域列表中,则closures本地电子邮件域列表的自动configuration。
检查本地电子邮件域名列表:
作为根执行
echo $=w | sendmail -bt
删除本地电子邮件域名列表的自动configuration:
在sendmail.mc中添加以下行,重新编译sendmail.cf并重新启动/重新载入sendmail守护进程
define(`confDONT_PROBE_INTERFACES',`True')
本地电子邮件域可以在/etc/mail/local-host-names
明确列出。