我有一个域名 example.com,设置如下
- 服务器托管一个网站和其他一些东西
- Google Apps 负责处理我的电子邮件,并配置为发送和接收电子邮件
每当服务器需要向我发送电子邮件时,它都会使用 Postfix 通过 Google 的 SMTP 服务器发送电子邮件。
这完全没问题,但服务器以 的身份发送电子邮件[email protected]
。我在 Google Apps 中设置了一个别名,以允许[email protected]
以 的身份发送和接收邮件[email protected]
。我希望 postfix 以 的身份发送电子邮件,[email protected]
同时以 的身份登录 Google 的 SMTP 服务器[email protected]
。简单的解决方案是为我的服务器开设另一个应用程序帐户,但对于一个小的业余项目来说,每月又要花 5 美元。
答案1
但它可以从盒子里取出即可使用(除了一个小例外,见下文)。[电子邮件保护]这是主电子邮件帐户的别名[电子邮件保护]
# echo "Hello world" | swaks -4 --server smtp.gmail.com:587 --from [email protected] \
--to [email protected] -tls --auth PLAIN --auth-user [email protected] \
--auth-password 1234567 --h-Subject TEST --h-From: '"Do not reply" <[email protected]>' --body -
=== Trying smtp.gmail.com:587...
=== Connected to smtp.gmail.com.
<- 220 smtp.gmail.com ESMTP un6sm65521lbb.18 - gsmtp
-> EHLO svn.example.net
<- 250-smtp.gmail.com at your service, [77.122.73.151]
<- 250-SIZE 35882577
<- 250-8BITMIME
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-PIPELINING
<- 250-CHUNKING
<- 250 SMTPUTF8
-> STARTTLS
<- 220 2.0.0 Ready to start TLS
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com"
~> EHLO svn.example.net
<~ 250-smtp.gmail.com at your service, [77.122.73.151]
<~ 250-SIZE 35882577
<~ 250-8BITMIME
<~ 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
<~ 250-ENHANCEDSTATUSCODES
<~ 250-PIPELINING
<~ 250-CHUNKING
<~ 250 SMTPUTF8
~> AUTH PLAIN VhAEBMZXHN7cyxhAGFG0ub9JnLnZaGhfsuaGhhQhhLTEiNTU8Ng==
<~ 235 2.7.0 Accepted
~> MAIL FROM:<[email protected]>
<~ 250 2.1.0 OK un6sm65521lbb.18 - gsmtp
~> RCPT TO:<[email protected]>
<~ 250 2.1.5 OK un6sm65521lbb.18 - gsmtp
~> DATA
<~ 354 Go ahead un6sm65521lbb.18 - gsmtp
~> Date: Wed, 09 Mar 2016 21:15:09 +0000
~> To: [email protected]
~> From: "Do not reply" <[email protected]>
~> Subject: TEST
~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
~>
~> Hello world
~>
~>
~> .
<~ 250 2.0.0 OK 1457558110 un6sm65521lbb.18 - gsmtp
~> QUIT
<~ 221 2.0.0 closing connection un6sm65521lbb.18 - gsmtp
=== Connection closed with remote host.
例外。
在标题中你仍然可以看到原始发件人用户(发件人:Alex Domoradov)
Return-Path: <[email protected]>
Received: from svn.example.net ([77.122.73.151])
by smtp.gmail.com with ESMTPSA id un6sm65521lbb.18.2016.03.09.13.15.10
for <[email protected]>
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Wed, 09 Mar 2016 13:15:10 -0800 (PST)
Message-ID: <[email protected]>
Sender: Alex Domoradov <[email protected]>
Date: Wed, 09 Mar 2016 21:15:09 +0000
To: [email protected]
From: "Do not reply" <[email protected]>
Subject: TEST
X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
Hello world
PS 您必须在帐户设置页面添加别名
答案2
因此,事实证明我需要做两件事才能使其正常工作。
首先,仅仅在 Google Apps 管理面板中为电子邮件地址添加别名是不够的,根据 Alex 的回答,还需要将附加地址添加到设置页面中的“以...身份发送邮件”面板中。如果您不这样做,Gmail 会将旧的发件人地址移动到额外的标题中,并使用您有权使用的地址发送。
其次,必须将 Postfix 配置为使用smtp_generic_maps
。这将根据 中指定的文件自动将内部地址映射到外部地址。/etc/postfix/main.cf
如果您希望服务器接收邮件,您还应该使用canonical_maps
。
我使用的配置旨在强制 postfix 发送所有用户的所有电子邮件,如下所示[email protected]
/etc/postfix/main.cf:
smtp_generic_maps = hash:/etc/postfix/generic
在/etc/postfix/通用:
[email protected] [email protected]
[email protected] [email protected]
@example.com [email protected]
@server-hostname [email protected]
@server-hostname.example.com [email protected]
文档位于 http://www.postfix.org/ADDRESS_REWRITING_README.html#generic