Postfix 在不同的用户 ID 下发送重复的电子邮件,如何修复?

Postfix 在不同的用户 ID 下发送重复的电子邮件,如何修复?

我在 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 上搜索和摆弄后缀设置!

相关内容