![Postfix 在不同的用户 ID 下发送重复的电子邮件,如何修复?](https://linux22.com/image/793489/Postfix%20%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E6%88%B7%20ID%20%E4%B8%8B%E5%8F%91%E9%80%81%E9%87%8D%E5%A4%8D%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%EF%BC%9F.png)
我在 postfix 设置中找不到原因,但重复的电子邮件被发送到不同的 uid 下。查看电子邮件标题,它们具有唯一的 ID,并且每个都有不同的Postfix, from userid
。例如,其中一个说:
Received: by localhost.localdomain (Postfix, from userid 1000)
id AFFE880C9E43; Thu, 7 Mar 2024 03:04:02 -0800 (PST)
而另一方则表示:
Received: by localhost.localdomain (Postfix, from userid 0)
id A076980CB3FD; Thu, 7 Mar 2024 03:04:02 -0800 (PST)
邮件日志显示postfix/pickup
行中也包含两个 uid,并且电子邮件在行中被发送两次postfix/smtp
:
Mar 7 20:57:01 localhost postfix/pickup[1523368]: A0DA580CC916: uid=1000 from=<[email protected]>
Mar 7 20:57:01 localhost postfix/cleanup[1534353]: A0DA580CC916: message-id=<Aej4eFk4CtMsohU6wbxrlXigdloI53zuZDvecHneZ9Y@localhost>
Mar 7 20:57:01 localhost postfix/qmgr[1487578]: A0DA580CC916: from=<[email protected]>, size=1059, nrcpt=1 (queue active)
Mar 7 20:57:01 localhost postfix/pickup[1523368]: C74B180CB50F: uid=0 from=<[email protected]>
Mar 7 20:57:01 localhost postfix/cleanup[1534353]: C74B180CB50F: message-id=<jUeGOoaBFebz2tFQZEhCnoShgiL8EL0RhvaynFZKM@localhost>
Mar 7 20:57:01 localhost postfix/qmgr[1487578]: C74B180CB50F: from=<[email protected]>, size=1046, nrcpt=1 (queue active)
Mar 7 20:57:04 localhost postfix/smtp[1534359]: A0DA580CC916: to=<[email protected]>, relay=d96439a.ess.barracudanetworks.com[209.222.82.255]:25, delay=2.6, delays=0.19/0.01/0.41/1.9, dsn=2.0.0, status=sent (250 OK ([email protected]:250 Ok: queued as D76BE1180056))
Mar 7 20:57:04 localhost postfix/qmgr[1487578]: A0DA580CC916: removed
Mar 7 20:57:05 localhost postfix/smtp[1534363]: C74B180CB50F: to=<[email protected]>, relay=d96439b.ess.barracudanetworks.com[209.222.82.253]:25, delay=4.1, delays=0.09/0.01/0.47/3.5, dsn=2.0.0, status=sent (250 OK ([email protected]:250 Ok: queued as 933FB1180056))
Mar 7 20:57:05 localhost postfix/qmgr[1487578]: C74B180CB50F: removed
在main.cf文件中,有:
mydestination = $myhostname, localhost.$mydomain
不确定还有哪些相关设置。
为什么电子邮件会用两个 uid 发送?一个是“root”用户的,另一个是另一个用户的,但为什么两个都用呢?我查看了发送电子邮件的 php 文件,它们只发送一次。为了测试,我使用了 vanilla html 电子邮件格式。示例:
$to = '[email protected]';
$subject = "A message for you";
$message = "Hello there!";
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
$headers[] = 'From: Test <[email protected]>';
if(mail($to, $subject, $message, implode("\r\n", $headers))) {
echo "E-Mail Sent";
} else {
echo "There was a problem";
}
操作系统是 AlmaLinux 9.3,基本上是 RHEL 的一个分支。
编辑:
回应@dennis-nolte,“postconf -n”返回:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
meta_directory = /etc/postfix
milter_default_action = accept
mydestination = $myhostname, localhost.$mydomain
mynetworks = 127.0.0.0/8
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = $smtpd_milters
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix/README_FILES
sample_directory = /usr/share/doc/postfix/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
shlib_directory = /usr/lib64/postfix
smtpd_milters = inet:localhost:8891
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_rbl_client zen.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
unknown_local_recipient_reject_code = 550
...并且 /etc/aliases 文件包含一堆列为“root”的伪帐户,末尾有这些:
newsadm: news
newsadmin: news
usenet: news
ftpadm: ftp
ftpadmin: ftp
ftp-adm: ftp
ftp-admin: ftp
www: webmaster
webmaster: root
noc: root
security: root
hostmaster: root
info: postmaster
marketing: postmaster
sales: postmaster
support: postmaster
我承认我不知道如何处理这些信息。
回复 @anx,我如何才能确定谁生成了 @localhost 消息 ID?在“postconf -n”响应中,有几个对“localhost”的引用 -inet_interfaces = localhost
其中mydestination = $myhostname, localhost.$mydomain
一个可能是罪魁祸首吗?
感谢您对追踪此事提供的任何帮助。
答案1
收到:本地主机.本地域名
消息 ID=<Aej4eFk4CtMsohU6wbxrlXigdloI53zuZDvecHneZ9Y@本地主机>
您的服务器似乎不知道自己的名称 - 但这是在互联网上发送邮件所必需的。根据发行版的文档进行配置。
致电确认结果
hostname -s
:应该只输出主机名, 然后hostname -f
:应该输出完全合格域名。
Postfix 设置的默认设置myhostname
通常mydomain
适用于您的主机名,但请mydestination
在更改后进行检查。
答案2
请检查 fe /etc/aliases 中的本地重定向
此外,您的 main.cf 中可能有特定的别名配置,这可能会导致这种情况。
请注意,您可能在配置更改后没有重新加载/重新启动 postfix,从而导致激活的配置与您期望的配置不同。
postconf -n
可能会帮助您识别此行为的配置细节。
答案3
好吧,事实证明问题与 postfix 无关,而是由于重复的 cronjobs(我不知道)、根 cronjob 和用户 cronjob(由发送电子邮件的同一用户创建,尽管我认为这并不重要)而发生的。
回想起来,我应该提到 cronjob 正在触发电子邮件脚本,但我认为这并不重要,因为我没有意识到有多个 cronjob。
因此我消除了根 cronjob,现在脚本仅由用户 cronjob 触发,效果良好且没有重复。
我希望这可以帮助其他人避免像我一样花费大量时间在 Google 上搜索和摆弄后缀设置!