我正在尝试第一次configurationPostfix。 我不需要邮箱,我只需要虚拟别名,转发[email protected] --> [email protected]
我的Postfix运行在数字海洋液滴上的Docker容器中。
我已经得到:
$ postalias -q [email protected] [email protected]
…从容器内,即我的/etc/postfix/virtual
文件正在工作。
另外,从液滴上的容器外面:
telnet example.com 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 example.com ESMTP Postfix (Ubuntu)
但从我自己的电脑:
$ telnet example.com 25 Trying <droplet IP>... telnet: connect to address <droplet IP>: Operation timed out telnet: Unable to connect to remote host
我认为这是由于数字海洋推荐的mynetworks
configuration设置(见下文)的结果,我认为这是预期的和正确的 – 我不想托pipe一个“开放”的SMTP中继。
我有一个example.com.
的MXloggingexample.com.
设置和我可以ping example.com
就好,并访问它的网站。 另外(从我的电脑):
$ host -t mx example.com example.com mail is handled by 1 example.com.
所以看起来不错。
但是,如果我发送一个testing消息到[email protected]
什么也没有通过,我没有看到Postfix日志中的任何东西…我不知道它在什么时候失败。
我不确定问题是在我的Postfixconfiguration中还是在路由到容器中。
该容器暴露端口25(仅),并通过图
ports: - "25:25"
从液滴中的壳:
$ netstat -tulpn | grep 25 tcp6 0 0 :::25 :::* LISTEN 10680/docker-proxy
我的/etc/postfix/main.cf
有这个:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = example.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = /etc/mailname, <container id>, localhost.localdomain, localhost, example.com relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all virtual_alias_domains = example.com virtual_alias_maps = hash:/etc/postfix/virtual inet_protocols = ipv4
我并不清楚myhostname
(最初设置为<container id>
) mydestination
和virtual_alias_domains
之间的区别
更新
从http://mxtoolbox.com/SuperTool.aspx输出
Connecting to <server IP> 220 example.com ESMTP Postfix (Ubuntu) [733 ms] EHLO MXTB-PWS3.mxtoolbox.com 250-example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN [714 ms] MAIL FROM: <[email protected]> 250 2.1.0 Ok [722 ms] RCPT TO: <[email protected]> 454 4.7.1 <[email protected]>: Relay access denied [715 ms] MXTB-PWS3v2 4006ms
更新
正如@masegaloeh帮助我发现,我的后缀服务器基本上正在工作。 我有两个困惑的问题,但是:
由于在我的Dockerfile中有错误,我有root用户拥有的/var/log/mail.log
…这就是为什么它保持空白。 我没有看到任何错误,但基本上rsyslog无法写入它。 一个chown syslog:adm /var/log/mail.log
步骤修正了这个问题,而且我能够看到确实postfix正在处理和转发邮件给别名。
我错误地认为我能够通过笔记本电脑远程login到端口25上的其他服务器,这是因为我认为我以前做过的东西需要这样做。 但实际上我做不到。 然而,我能够从另一台服务器telnet example.com 25
,所以再次,东西实际上是工作。
发送邮件到另一台服务器的别名工作,并通过我的Gmail目标地址。
这似乎是我的问题实际上是用Gmail …当我从Gmail帐户发送邮件到[email protected]
它不显示。 我自从尝试了别名我已经安装在另一个托pipe…一些工作,一些不…导致:
结论:
Gmail似乎只接受在Settings > Accounts and Import > Send mail as
别名的Settings > Accounts and Import > Send mail as
…不幸的是,Gmail现在要求您在设置新邮件时为其指定第三方SMTP服务器,我将不得不在我的后缀安装中处理TLS等。
此Telnet日志消息
telnet: connect to address <droplet IP>: Operation timed out
不是由postfix中的mynetworks
configuration造成的! 该错误表明您的telnet数据包未达到docker IP地址,或者docker中的postfix不响应您的telnet 。
正如你所提到的,你从你自己的电脑telnet,那么也许你的ISP阻止端口25 。 但是,因为你提到外面的电子邮件不能通过,甚至后缀日志是空的,也许后缀容器根本不响应。 也许你没有把DO液滴端口绑定到后缀docker端口。 尝试运行netstat -tulpn | grep 25
从DO滴中的 netstat -tulpn | grep 25
确认postfix是从外面到达的。
因为我不熟悉docker工人,所以我不能在这里提供确切的解决scheme。 但是,一些谷歌search结果表明,你已经设置了IPtables做官方文档伪装:将容器端口绑定到主机
编辑
无论如何,你的netstat输出看起来不错。 它表示只在IPv6中侦听。 但是这篇文章和这篇文章表明,Ubuntu / Debian使用IPv4映射的IPv6地址方法提供连接,所以也许从外部IPv4也是可以访问的 。
为了进一步排除故障,我在这里给最不需要发送电子邮件
netstat
和telnet来确认这个到localhost 因为你把docker代理引入你的栈,所以你必须确认
tcpdump port 25
,以确认您的主机收到了数据包。