内网要如何架设 postfix 邮局?

2016-04-21 20:49:56 +08:00
 mengjue

现在有一个内网的 gitlab ,需要一个邮件发送系统?但是这个服务器没有外网的 IP ,直接强上 postfix ,得到的是如下结果:

postfix/smtp[15249]: 0A6B61AE1151: to=<xxx@xxx.com>, relay=sample.com[x.x.x.x]:25, delay=917, delays=917/0.01/0.04/0, dsn=4.4.2, status=deferred (lost connection with xxx while receiving the initial server greeting)

似乎 relay 不对,然后我把 relay 改为我司的 exchange server 的 smtp ,然后返回需要 531 认证。似乎没有一个好办法能把邮箱发出去了?需要一个外部的不需要认证的 smtp relay server ?

对运维不熟,知道的麻烦提个醒,谢谢。

3159 次点击
所在节点    问与答
11 条回复
pubby
2016-04-21 20:53:42 +08:00
postfix 编译的时候记得加上 sasl 支持
可以支持需要认证的 smtp 进行 relay 的。

我就是 gitlab 通过 postfix 发信( relay 到阿里云的邮件推送服务)
pubby
2016-04-21 21:00:03 +08:00
relayhost = [smtp.mail.server]:25

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/path/to/sasl_passwd
smtp_sasl_mechanism_filter = plain, login


------- sasl_passwd -------
[smtp.mail.server]:25 user:password


记得 postmap /path/to/sasl_passwd 跑一下生成 sasl_passwd.map 文件
mengjue
2016-04-21 22:58:05 +08:00
阿里云的推送是要收费的,如果要搞免费的,不知道 relay server 是否受到 relay server 的 smtp 的垃圾邮件的策略限制?
dynaguy
2016-04-22 13:14:07 +08:00
postfix 有点杀鸡牛刀了。装个 mailx , 配个用户账号就行了。
guoxu1231
2016-08-10 22:45:01 +08:00
@pubby 你阿里云邮件推送能成功吗? 我试了很多次都不行, 但是 gmail 倒是可以.
pubby
2016-08-10 23:19:39 +08:00
@guoxu1231 可以啊,我的一些服务器状态报告都是 postfix relay 到阿里云邮件推送的
guoxu1231
2016-08-11 15:43:19 +08:00
@pubby 方便分享你的 postfix 配置吗?
我用了一个 postfix 的 docker 镜像,
https://github.com/juanluisbaptiste/docker-postfix
更改了 relayhost = [$SMTP_SERVER]:587" 成 25 端口, 也尝试添加 smtp_sasl_mechanism_filter = plain, login, 但还是不成功. 提阿里云工单咨询客服人员, 客服人员的回答是 邮件推送(direct mail)目前不支持 smtp delay 的用法....
https://github.com/juanluisbaptiste/docker-postfix/blob/master/run.sh
pubby
2016-08-11 16:40:42 +08:00
@guoxu1231 确保阿里云>邮件推送>发信地址 SMTP 密码设置之类的都 OK

main.cf:

relayhost = [smtpdm.aliyun.com]:465
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_sasl_mechanism_filter = plain, login
smtp_tls_loglevel = 1
smtp_use_tls = yes
smtp_enforce_tls = yes
# CA 文件如果没有的话,从另外的包安装一下
smtp_tls_CAfile = /usr/local/share/certs/ca-root-nss.crt
smtp_sasl_security_options =
smtp_sasl_tls_security_options = noanonymous
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt


sasl_passwd 文件:
[smtpdm.aliyun.com]:465 user@youmiail.domain:阿里云 SMTP 设的密码
# 这个文件需要 postmap sasl_passwd 处理一下才能使用


# 测试
echo "test" |mail -s "test title" target@mail.com

如果有问题的话,看 postfix 的日志,一般都能找到问题
guoxu1231
2016-08-12 00:25:20 +08:00
@pubby 似乎不太行, 报错.
(lost connection with smtpdm.aliyun.com[110.75.48.181] while receiving the initial server greeting)
客服的回复是:
售后工程师 : 您好,邮件推送并不是一个转发服务,不支持中继邮件,且通过调用邮件推送 smtp 接口发信需要有账户认证,中继可能会产生认证失败无法发送。

用 gmail 的 smtp relay 倒是一次就成功了.
pubby
2016-08-12 00:56:12 +08:00
@guoxu1231 我这里可以

Aug 12 00:01:00 dev postfix/pickup[50246]: 773471B822: uid=1001 from=<pubby>
Aug 12 00:01:00 dev postfix/cleanup[53100]: 773471B822: message-id=<20160811160100.773471B822@dev.mytest.com>
Aug 12 00:01:00 dev postfix/qmgr[64627]: 773471B822: from=<noreply@mail.xxxx.com>, size=354, nrcpt=1 (queue active)
Aug 12 00:01:01 dev postfix/smtp[53104]: Verified TLS connection established to smtpdm.aliyun.com[110.75.48.181]:465: TLSv1 with cipher AES256-SHA (256/256 bits)
Aug 12 00:01:01 dev postfix/smtp[53104]: 773471B822: to=<mygmailaccount@gmail.com>, relay=smtpdm.aliyun.com[110.75.48.181]:465, delay=1.2, delays=0.33/0.26/0.53/0.08, dsn=2.0.0, status=sent (250 Data Ok: queued as freedom ###envid=82880264085)
Aug 12 00:01:01 dev postfix/qmgr[64627]: 773471B822: removed


你要么再加上 sender 重写规则,把所有邮件发信人改写成你的阿里云邮件推送的发信地址

main.cf 里加上:
sender_canonical_maps = pcre:/usr/local/etc/postfix/sender_canonical_map

sender_canonical_map 内容:
/.*/ noreply@mail.xxxx.com

# 所有发件人都改写成 noreply@mail.xxxx.com
# 同样需要 postmap sender_canonical_map 预处理一下这个文件


我这边确是也有这样的设置
guoxu1231
2016-08-13 12:08:49 +08:00
碰到了新的错误.
TLS is required, but was not offered by host smtpdm.aliyun.com[110.75.48.181]
可能目前阿里云邮件推送对于 SMTP 中继支持的还是不完善, 文档也没有任何提及.

不像 AWS 的 Simple Email Service, 在 FAQ 里明确提到了支持 SMTP 中继:
Amazon SES 提供功能全面的 SMTP 接口,以实现与能够通过 SMTP 发送电子邮件的应用程序的无缝集成。 您可从应用程序直接连接至此 SMTP 接口,或将现有电子邮件服务器配置为使用此接口作为 SMTP 中继。
可将 Amazon SES 发送功能与 Sendmail 、 Postfix 和 Exim 等常用邮件传输代理 (MTA) 相集成。您甚至可从命令行连接到 SMTP 接口,直接发送 SMTP 命令.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273476

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX