如何設置 exim 以使用我的 ISP 的 SMTP 伺服器(在非 Debian 系統上)?
我想使用 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
,考慮到順序等),錯誤應該消失。