如何設定 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.domain.com,sendmails class 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

相關內容