我在后缀设置中找不到原因,但在不同的 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 文件,它们只发送一次。为了进行测试,我使用了普通的 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
- 其中之一可能是罪魁祸首吗?
感谢您提供任何帮助来追踪此问题。
您的服务器似乎不知道自己的名称 - 但这是在互联网上发送邮件所必需的。根据您的发行版的文档进行配置。
致电确认结果
hostname -s
:应该只输出主机名,然后hostname -f
: 应输出完全限定的域名。Postfix 设置的默认值
myhostname
通常mydomain
与您的主机名一致,但mydestination
更改后请进行检查。请检查 fe /etc/aliases 中的本地重定向
此外,您的 main.cf 中可能存在特定的别名配置,这可能会导致这种情况。
请注意,在配置更改后您可能没有重新加载/重新启动 postfix,从而导致不同的配置处于活动状态,而不是您期望的配置。
postconf -n
可能会帮助您确定此行为的配置细节。好吧,事实证明这个问题与 postfix 无关,而是由于重复的 cronjobs(我不知道)、root cronjob 和用户 cronjob(由发送电子邮件的同一用户创建的)而发生的。 ,尽管我认为这并不重要)。
回想起来,我应该提到一个 cronjob 正在触发电子邮件脚本,但我认为这并不重要,因为我没有意识到有不止一个。
所以我消除了 root cronjob,现在脚本仅由用户 cronjob 触发,效果良好且没有重复。
我希望这可以帮助其他人避免我所做的所有时间的谷歌搜索和摆弄后缀设置!