如何配置sendmail通过MX记录而不是localhost发送邮件?


8

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

我已经看过sendmail文档,但是不太了解如何解决我的情况。本质上,我的服务器的主机名是“ www.domain.com”,但是当我向“ me@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]

我如何获得它以允许绑定到users@domain.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
您问题的逻辑是完全错误的。归结为“我不想使用Sendmail发送邮件。我如何使用额外的配置重新配置Sendmail以发送邮件,确切地说,Sendmail默认情况下如何发送邮件?” 答:不要管它。您需要完全重新措辞您的问题以理解您实际尝试执行的操作,或者您需要停止干预服务器的配置并让其执行其工作而不会破坏它。
Sammitch 2013年

1
好吧。或者,向我解释如果我只想从服务器发送电子邮件而不向它发送电子邮件该怎么办。
Octopus

Answers:


8

我终于在这里找到了一个相当全面的解决方案。总而言之,有很多选择(其他答案中都提到了其中大多数,但是由于某种原因在我的特定情况下不起作用)。

选项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.domain.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>必须是实际的制表符


我会选择选项5,并使用bestmx地图使其通用。
adamo 2013年

这是完美的作品。感谢章鱼LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com。> $ * <tab> $#esmtp $ @ mail.domain.com $:$ 1 <@ domain.com。> $ 2这需要放在文件末尾,而<tab>实际上您必须使用Tab键代替编码。
Vinodh Kumar

7

更改服务器的主机名。没有合理的理由使主机名等于裸域名。


是的,即使我将主机名设置为www.domain.com,sendmail仍希望将所有内容都绑定到www.domain.com,domain.com和localhost。我可以看到以调试模式运行sendmail并键入$ = w。我改了一下这个问题,以作解释。
Octopus

3

这是我对您的问题的理解:

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

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

  3. 您不希望Sendmail对您的公共DNS名称空间具有权威性。您希望将发送到公共DNS名称空间的电子邮件发送到您的Google托管电子邮件。

解决方案:重新配置Sendmail,使其对您的公共DNS名称空间没有权威。


2
我的问题是关于sendmail的配置。您的答案能否比“重新配置sendmail”更具体?
Octopus

0

我对sendmail的配置不太熟悉,但是我认为它应该在MX记录方面做得正确。但是,我想在DNS查找之前,sendmail可能首先会/etc/hosts在使用它的DNS服务器之前先在大多数基于unix的操作系统上查询本地主机文件。如果是这样,并且在hosts文件中有一个条目,如果将其设置为主机名,则将您的计算机称为domain.com。您可以通过修改条目或添加新条目来编辑hosts文件以适合特定情况下的需要。

或者,您可以将sendmail配置为在解析URL时忽略本地系统主机文件。我不确定该怎么做。


0

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

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

define(`confDONT_PROBE_INTERFACES',`True')

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

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

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

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

3)mailertableNOT consultede用于运送到所列域$=w


但是define(confDONT_PROBE_INTERFACES',True')已经(并且一直被启用)
Octopus

所以,你的情况下,可以通过选项2.覆盖
AnFi

这些都是Ive完全探讨过的好建议,但我相信选项2与将主机添加到local-host-names文件相同。在这种情况下,我要排除一个主机而不包括一个主机。
Octopus

0

发送邮件的代码,您使用的是完整的电子邮件地址,还是服务器仅通过本地帐户将其发送出去?因为:

这是告诉sendmail将所有邮件本地传递到users@localhost.localdomain

LOCAL_DOMAIN(`localhost.localdomain')dnl

这是告诉sendmail将本地地址中的域重写为domain.com,但不会更改本地传递

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

好吧。或者,向我解释如果我只想从服务器发送电子邮件而不向它发送电子邮件该怎么办。

步骤1:返回到默认配置。
步骤2:使用默认配置。


是的,没错,但是,我要发送到user@domain.com。默认配置与我在问题中概述的问题完全相同。
Octopus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.