Exim

如何設置 exim 以使用我的 ISP 的 SMTP 伺服器(在非 Debian 系統上)?

  • October 19, 2019

我想使用 exim通過我的 ISP 的 SMTP 伺服器發送電子郵件。然而,Arch wiki相當混亂(exim 在 Debian 系統上要簡單得多)。我按照最後一節中的說明,將 SMTP 地址從修改mail.internode.on.net為我的 SMTP 伺服器,然後修改*@* $1@bullet.homenet.org Ffr*@* $1@my_emaildomain.com Ffr. 當我通過我的 ISP 連接到網際網路時,這很有效。

但是,要在我的工作網路上使用它,我需要進行身份驗證。我嘗試按照為 Gmail 列出的說明,同時更改網址,但這失敗了

authenticator iinet_route: cannot find authenticator driver "manualroute"

如何設置exim身份驗證?(FWIW 我和iinet 在一起。)

編輯

我意識到我把類似“Gmail”的設置放在了錯誤的地方。我移動了它們,並且不再收到錯誤消息。然而,exim現在默默地失敗了。我沒有收到錯誤消息,但沒有郵件送達。

以下是我對出廠預設設置所做的更改:

--- exim.conf.factory_default   2015-08-03 02:14:31.000000000 +1000
+++ exim.conf   2015-11-10 08:09:54.196287461 +1100
@@ -402,7 +402,7 @@

  # Deny unless the sender address can be verified.

-  require verify        = sender
+  #require verify        = sender

  # Accept if the message comes from one of the hosts for which we are an
  # outgoing relay. It is assumed that such hosts are most likely to be MUAs,
@@ -552,14 +552,19 @@
# If the DNS lookup fails, no further routers are tried because of the no_more
# setting, and consequently the address is unrouteable.

-dnslookup:
-  driver = dnslookup
-  domains = ! +local_domains
-  transport = remote_smtp
-  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
+#dnslookup:
+#  driver = dnslookup
+#  domains = ! +local_domains
+#  transport = remote_smtp
+#  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
# if ipv6-enabled then instead use:
# ignore_target_hosts = <; 0.0.0.0 ; 127.0.0.0/8 ; ::1
-  no_more
+#  no_more
+
+iinet_route:
+  driver = manualroute
+  transport = iinet_relay
+  route_list = * mail.iinet.net.au


# This alternative router can be used when you want to send all mail to a
@@ -735,6 +746,12 @@
address_reply:
  driver = autoreply

+iinet_relay:
+  driver = smtp
+  port = 587
+  hosts_require_auth = <; $host_address
+  hosts_require_tls = <; $host_address
+


######################################################################
@@ -769,6 +786,7 @@
# There are no rewriting specifications in this default configuration file.

begin rewrite
+*@* test_exim_sender@mydomain.foo.com Ffr



@@ -821,6 +839,12 @@
#  server_advertise_condition = ${if def:tls_in_cipher }


+iinet_login:
+  driver = plaintext
+  public_name = LOGIN
+  hide client_send = : smtp_account@iinet.net.au : PASSWORD_HERE
+
+
######################################################################
#                   CONFIGURATION FOR local_scan()                   #
######################################################################

這是我完整配置文件。

編輯 2

我還嘗試將埠更改為 465,這也靜默失敗。(FWIW 587 在 msmtp 中執行良好。)

編輯 3

這是有關失敗電子郵件的資訊,使用exim -Mvl. 使用的原始發送嘗試echo body | /usr/bin/mail -s subject -r sender@mydomain.foo.com recipient@mydomain.foo.com

2015-11-10 11:53:39 Received from test_exim_sender@mydomain.foo.com U=sparhawk P=local S=428 id=20151110005339.ag4kfrHaJ%sender@mydomain.foo.com
2015-11-10 11:53:41 recipient@mydomain.foo.com R=iinet_route T=iinet_relay defer (-42): authentication required but authentication attempt(s) failed

編輯 4

我再次執行了郵件命令(根據編輯 3),得到了一個稍微不同的錯誤。我還連結到完整的輸出exim -d+all -M messageID <ID>

$ sudo exim -Mvl 1ZwMHr-0008I4-92
2015-11-11 14:41:31 Received from eximsender@mydomain.foo.com U=lee P=local S=426 id=20151111034131.VRuQn__aN%sender@mydomain.foo.com
2015-11-11 14:41:31 recipient@mydomain.foo.com R=iinet_route T=iinet_relay defer (-53): retry time not reached for any host

完整的調試輸出在這裡

根據您收到的錯誤,您已將 wiki 中 gmail 範例中的節放在錯誤的部分中。exim 配置按不同的部分建構,順序為:

  • main
    包含全域定義和設置
  • acl
  • 路由器
    如何處理地址;使用第一次命中,所以順序很重要
  • transports
    定義了處理消息的方法,這些是從上面的路由器中引用的;順序不重要
  • 重試
    重試傳遞的頻率
  • 重寫
    更改地址,例如將內部地址映射到全域可用地址
  • 驗證
    器定義了驗證方式;作為伺服器和客戶端

該錯誤消息authenticator iinet_route: cannot find authenticator driver "manualroute"清楚地表明您已在身份驗證器部分中放置了一個路由器節。

將每個節放在相關部分(即行後和行begin routers前的路由器定義begin transports,考慮到順序等),錯誤應該消失。

引用自:https://unix.stackexchange.com/questions/241456