我正在设置一个 Ubuntu 服务器,并使用 Postfix 作为我的电子邮件帐户。该服务器将托管几个不同的域,我已为每个域设置了相应的虚拟服务器和主目录。在网络托管方面,一切都运行良好,但我遇到了我完全不明白的电子邮件问题。
假设我的主域名是 example1.com。最初我设置了一个用户“chris”,该用户可以在[电子邮件保护],但是当我回复该用户时,发件人地址是[电子邮件保护](出于演示目的更改了 IP)。在我使用过的其他服务器上,我的用户名实际上是一个电子邮件地址,所以我想将此用户更改为[电子邮件保护]我发现它确实运行得很好。我仍然可以接收电子邮件,而且现在当我回复时,使用的是正确的域名!
问题出现在我的下一个用户身上。我创建了“pat”,他们的域名是 example2.com。此用户可以像“chris”最初一样接收电子邮件,发件人电子邮件再次是内部“域”。但现在,当我将此用户名更改为“[电子邮件保护]“我收到邮件守护进程的回复,内容是:。This is the mail system at host ip-123-45-43-21.ec2.internal. I'm sorry to have to inform you that your message could not be delivered... <[email protected]>: unknown user: "pat"
9 个小时后,我的头发都快掉光了,我不知道自己在做什么。以下是我尝试过的各种组合(所有组合都显示相同的消息)– 每次尝试后我都会重新启动 postfix(并在适当newaliases
的时候执行:
- 花费数小时处理 DNS 记录(认为域名需要有所不同)
- 修改 main.cf Postfix 配置文件(使用 和的不同组合更改
mydestinations
和 之类的内容)myorigin
$mydomain
example1.com, example2.com
- 设置别名(pat to[电子邮件保护])
- 设置虚拟域映射()
pat [email protected]
我查看了各种日志文件,但很难判断到底发生了什么。其中有一行...Relay access denied...
,但我不知道那是来自我发送的测试电子邮件还是其他什么。时间戳很难确定,因为我从 Gmail 发送测试电子邮件和收到守护进程响应之间有几分钟的延迟。
最后,我将用户重新命名为“pat”,它可以再次接收电子邮件(感谢上帝),但发件人地址是错误的([电子邮件保护])。
我觉得这是一种非常常见的设置(单个服务器实例上的多个域),对于典型的网络管理员来说是一项简单的任务,但我已经浏览过数百个论坛、教程和问答帖子,它们都只关注一个域。
以下是我的各种配置文件和日志消息(请记住,这是经过 9 小时的反复修改后的结果,因此我确信存在潜在的冲突和残留)。有什么明显不对劲的地方吗?其他配置文件会更有帮助吗?
设置:AWS Lightsail、Ubuntu、Webmin、Postfix
/etc/postfix/main.cf
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = ip-123-45-43-21.ec2.internal
alias_maps = hash:/etc/aliases
myorigin = localhost
mydestination = $myhostname, ip-123-45-43-21.ec2.internal, localhost.ec2.internal, localhost, localhost.$mydomain, $mydomain, example1.com, example2.com
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.1.0/24
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
virtual_alias_maps = hash:/etc/postfix/virtual
/etc/别名
...
pat: [email protected]
邮件日志(在我恢复为“pat”用户名之前)
Jul 7 21:24:04 ip-123-45-43-21 postfix/local[3842]: F19DA2EE6AF: to=<[email protected]>, relay=local, delay=0.27, delays=0.26/0/0/0.01, dsn=5.1.1, status=bounced (unknown user: "pat")
...
Jul 7 21:27:20 ip-123-45-43-21 postfix/smtpd[4829]: NOQUEUE: reject: RCPT from mail-lj1-f170.google.com[209.85.208.170]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-lj1-f170.google.com>
有人能用一些我能遵循和理解的简单方法给我指明正确的方向吗?
[email protected]
最终,我希望[email protected]
(甚至[email protected]
将来)能够从同一台服务器接收和发送电子邮件。
答案1
好的,感谢@yoonix(加上几个小时的故障排除),我能够想出一个可行的组合,并将为未来的用户所用。
对于其他遇到此问题的人来说,这对我有用,但您可能知道所有服务器都是不同的,并且您的里程肯定会有所不同。
- 我使用我想要的完整电子邮件地址作为用户名。在我上面的例子中,这将是
[email protected]
。 - 然后我为“名称”创建一个别名,并将其指向我想要的文件。
pat
别名也是如此(当您创建用户时,此文件应该会自动创建,但您可以手动创建它)/var/mail/[email protected]
- 我遇到了此文件的权限问题。我将进行更多故障排除,因为这可能是团队的问题,但我
chmod
已尝试过,666
并且它正在运行。
现在我可以从正确的域接收和发送电子邮件。
我确信其他人会说更改该邮件文件的权限并不是666
最好的方法——我当然同意他们的观点。如果我找到一种更好的方法来处理与默认设置兼容的用户组,660
我会更新此答案。