我想设置 Exim 通过我的 gmail(实际上是我的域名 google apps)发送邮件。
我添加了路由器、传输器和身份验证器。具体来说:
gmail_route:
driver = manualroute
transport = gmail_relay
route_list = * smtp.gmail.com
gmail_relay:
driver = smtp
port = 587
hosts_require_auth = $host_address
hosts_require_tls = $host_address
gmail_login:
driver = plaintext
public_name = LOGIN
hide client_send = :[email protected]:mypassword
我可以在 Debian 上为 Exim 设置它,但我无法在 Centos 上做到这一点。
当我在监控日志的同时尝试发送时,系统提示“未找到 IP 地址...”,然后提示“远程邮件服务器出现 SMTP 错误...”。系统还提示“需要身份验证”。
以下是更多细节:假装我正在发送给[电子邮件保护]
[email protected] R=gmail_route T=gmail_relay: SMTP error from remote mail server after MAIL FROM:<[email protected]> SIZE=1492:
host gmail-smtp-msa.l.google.com [2a00:1450:4001:c02::6d]:
530-5.5.1 Authentication Required. Learn more at\n530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 k41sm12066343een.19 - gsmtp
我可以尝试什么来解决这个问题?我计划主要使用它来向自己发送警报电子邮件(fail2ban、logwatch 等)。默认的 Exim 设置似乎有效,但我更喜欢使用我的 gapps 电子邮件,例如[电子邮件保护]- 首先,在我训练我的电子邮件帐户将电子邮件放入收件箱之前,这些电子邮件就被归为垃圾邮件……
谢谢,
答案1
我使用了以下配置
路由器
send_via_gmail:
driver = manualroute
domains = ! +local_domains
transport = gmail_smtp
route_list = * smtp.gmail.com
运输
gmail_smtp:
driver = smtp
port = 587
hosts_require_auth = $host_address
hosts_require_tls = $host_address
验证者
gmail_login:
driver = plaintext
public_name = LOGIN
client_send = : [email protected] : 7654321
一些简单的测试
# swaks -s 127.0.0.1 --to [email protected] --from [email protected]
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
<- 220 mail.example.net, [127.0.0.1]
-> EHLO mail.example.net
<- 250-mail.example.net Hello localhost [127.0.0.1]
<- 250-SIZE 52428800
<- 250-PIPELINING
<- 250-STARTTLS
<- 250 HELP
-> MAIL FROM:<[email protected]>
<- 250 OK
-> RCPT TO:<[email protected]>
<- 250 Accepted
-> DATA
<- 354 Enter message, ending with "." on a line by itself
-> Date: Wed, 05 Mar 2014 10:22:55 -0500
-> To: [email protected]
-> From: [email protected]
-> Subject: test Wed, 05 Mar 2014 10:22:55 -0500
-> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
->
-> This is a test mailing
->
-> .
<- 250 OK id=1WLDep-0004ED-Kb
-> QUIT
<- 221 mail.example.net closing connection
=== Connection closed with remote host.
检查邮件日志文件
# cat /var/log/exim/main.log | grep 1WLDep-0004ED-Kb
2014-03-05 10:22:55 1WLDep-0004ED-Kb <= [email protected] H=localhost (mail.example.net) [127.0.0.1] P=esmtp S=479
2014-03-05 10:22:55 1WLDep-0004ED-Kb gmail-smtp-msa.l.google.com [2a00:1450:4001:c02::6d] Network is unreachable
2014-03-05 10:23:00 1WLDep-0004ED-Kb => [email protected] R=send_via_gmail T=gmail_smtp H=gmail-smtp-msa.l.google.com [173.194.70.108] X=UNKNOWN:ECDHE-RSA-AES128-GCM-SHA256:128
2014-03-05 10:23:00 1WLDep-0004ED-Kb Completed
您可以在调试模式下运行 exim
# echo -e "helo localhost\nmail from:<[email protected]>\nrcpt to:<[email protected]>\nDATA\nHello world\n.\nquit" | exim -bhc 127.0.0.1 -d+all
之后你会得到很多数据。将输出添加到问题中
答案2
你尝试过这个吗?
使用 GMail 作为智能主机:
注意:必须将以下内容放在配置文件的适当部分,例如,在 begin authenticators 之后。
在 dnslookup 路由器之前或代替 dnslookup 路由器添加路由器:
gmail_route:驱动程序 = manualroute 传输 = gmail_relay route_list = * smtp.gmail.com
添加传输:
gmail_relay:驱动程序 = smtp 端口 = 587 hosts_require_auth = $host_address hosts_require_tls = $host_address
添加身份验证器(替换[电子邮件保护]并将 mypassword 替换为您自己的帐户详细信息):
gmail_login:驱动程序 = 纯文本 public_name = LOGIN 隐藏客户端发送 = :[电子邮件保护]: 我的密码
$host_address 用于 hosts_require_auth 和 hosts_require_tls,而不是 smtp.gmail.com,以避免偶尔出现 530 5.5.1 AuthenticationRequired 错误。这些错误是由 smtp.gmail.com 的 DNS 查询中 IP 地址的变化引起的。$host_address 将扩展为由 gmail_route 路由器解析的特定 IP 地址。为了增加安全性,请使用每个应用程序的密码。这也适用于 Google Apps 帐户。
来源:https://wiki.archlinux.org/index.php/Exim_with_Remote_SMTP_server
答案3
您需要将hosts_require_auth
和hosts_require_tls
选项更改为以下内容:
hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address
使用 IPv6 发送时会出现问题。使用 IPv6 发送时,$host_address
将是一个 IPv6 地址,因此将包含冒号 ( :
)。冒号通常用作 Exim 中的列表分隔符,因此地址匹配失败,Exim 不会对自身进行身份验证。
在列表前添加前缀会将<;
列表分隔符更改为分号,从而避免出现 IPv6 地址问题。