我有一个 Ubuntu 网络服务器,使用 Sendmail 作为我的 MTA
目前,当我将电子邮件发送到我的网络服务器域之外的地址(例如 example.com)时,例如 gmail 或 example.com 域之外的任何其他电子邮件,它都能正常工作。我不希望我的 sendmail 守护程序将 example.com 识别为本地地址,我希望它以与发送任何其他电子邮件相同的方式发送到 example.com。
我绝不会出现使用网络服务器上的本地用户来收集 example.com 的这些电子邮件的情况。
那么我该如何禁用本地传送?
答案1
您可以通过从 /etc/hosts 文件中删除您的域名来实现这一点。您需要配置 senmail 以在发送电子邮件时使用您的域名 (example.com) 而不是 localhost。
编辑/etc/mail/sendmail.mc
添加以下内容:
MASQUERADE_AS(example.com)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(example.com)dnl
前:
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl
输入 m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
然后运行/sbin/service sendmail restart
在任何更改之前备份您编辑的所有内容!
这个解决方案对我来说很有效!
答案2
Sendmail 将“w”类视为它将尝试本地投递的域。默认的 CentOS 配置包括以下几行,例如:
Cwlocalhost
# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names
这指定“w”包含名称“localhost”和文件“/etc/mail/local-host-names”的内容。我怀疑您在“/etc/mail/local-host-names”中有一个“example.com”,可能是在系统安装期间设置的。
您需要仔细检查这一点,因为我没有 sendmail 测试系统来验证这一点,所以我无法在这里验证这一点。此外,它可能会因您的确切 sendmail 安装而有所不同,这可能会因发行版或操作系统的不同而有所不同。
答案3
您可以通过向规则集 2 添加规则来实现这一点。在 sendmail.mc 文件中添加以下内容:
LOCAL_RULE_2
R$* < $=w . > $* $#esmtp $@[MX server for example.com] $: $1 < @ $2 > $3
请记住,规则的左侧和右侧通过制表符分隔,因此不要复制粘贴。然后从 sendmail.mc 构建 sendmail.cf,重新启动 sendmail 并测试。
如果您不想在括号之间硬编码 MX 服务器名称,则可以使用 bestmx 映射。