如何配置 sendmail 通过 MX 记录发送邮件而不是发送到本地主机?

如何配置 sendmail 通过 MX 记录发送邮件而不是发送到本地主机?

我正在尝试让 sendmail 将邮件传输到 MX 记录中指定的服务器,因此当服务器发送电子邮件到[电子邮件保护]我希望它跳过 localhost 并直接转到 gmail。

我查看了 sendmail 文档,但不太明白如何解释我的情况。本质上,我的服务器的主机名是“www.domain.com”,但当我发送电子邮件到“[电子邮件保护]' 它最终进入本地邮件池。

当我在调试模式下运行 sendmail 时:

sendmail -bt
> $=w

我得到:

www.domain.com
www.domain.com.
domain.com
localhost
[54.245.___.___] 

因此,它会拦截所有发往 的外发邮件domain.com。我不希望它到达localhost。我希望它发往 Gmail 服务器。

所有发往其他地址的邮件都可以正常工作。我还将 sendmail 配置为使用 DKIM。

我已经向 mailertable 添加了一条记录(并重建了 mailertable.db 并重新编译了 mc>cf 文件)但我不确定这是否是我需要做的或者我是否做得正确。

domain.com esmtp:[aspmx.l.google.com]

我如何让它允许邮件发往[电子邮件保护]离开服务器?

附加信息:这是我的 sendmail.mc 文件:

divert(-1)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl

define(`confDEF_USER_ID', ``8:12'')dnl

define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl

define(`confTO_IDENT', `0')dnl

FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl

FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`relay_entire_domain')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

EXPOSED_USER(`root')dnl

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')

MAILER(smtp)dnl
MAILER(procmail)dnl

答案1

我终于找到了一个相当全面的解决方案这里总而言之,有很多选择(其中大多数已在其他答案中提到,但无论出于什么原因,在我的特定场景中不起作用)。

选项1:从 /etc/mail/local-host-names 中删除条目

对我来说这个文件已经是空的

选项 2:删除 mc 文件中的所有 LOCAL_DOMAIN 条目

我没有

选项 3:告诉 sendmail 不要探测接口

define(`confDONT_PROBE_INTERFACES', `true')dnl

在我的情况下,这个已经设置好了,但有问题的主机仍然存在于 sendmail 的 w 类中

选项 4:重命名服务器。上面提供的外部链接甚至明确指出,“如果我想从 w 类中删除 whipple.org,我可以将服务器重命名为 frodo.whipple.org、www.whipple.org、elvis.whipple.org 等。”

对我来说这还不够。主机名为www.域名.com,sendmails 类 w 仍然包含 www.domain.com 和 domain.com (即使重启后)

选项 5:这是对我有用的方法将 LOCAL_RULE_0 添加到 sendmail mc 文件

LOCAL_RULESETS
LOCAL_RULE_0
R$* < @domain.com. > $*  <tab>$#esmtp $@ mail.domain.com $: $1<@domain.com.>$2

它需要放在文件末尾,并且<tab>需要是一个实际的制表符

答案2

更改服务器的主机名。主机名与裸域名没有任何相同之处。

答案3

以下是我对您问题的理解:

  1. 您安装了 Sendmail,以便可以使用它从您的网站发送电子邮件。

  2. 您将 Sendmail 配置为公共 DNS 命名空间的权威电子邮件服务器。

  3. 您不希望 Sendmail 成为您公共 DNS 命名空间的权威。您希望发送到您的公共 DNS 命名空间的电子邮件能够发送到您的 Google 托管电子邮件。

解决方案:重新配置 Sendmail,使其不具有您的公共 DNS 命名空间的权威性。

答案4

1) Sendmail 自动填充本地电子邮件域列表($=w)。

您无法使用 sendmail.mc 中的以下行将其关闭:

define(`confDONT_PROBE_INTERFACES',`True')

/etc/mail/local-host-names您可以在文件中添加本地电子邮件(手动) 。
(之后需要 HUPing 或重新启动 sendmail 守护程序)

2) Sendmail 可能会将(自动配置)“此主机电子邮件名称”($j)添加至本地电子邮件域列表。

您可以定义“此主机电子邮件名称”

define(`confDOMAIN_NAME',`hostname.example.net')

3)mailertable不是已咨询 ,以便向 列出的域名进行交付$=w

相关内容