从phpmailer发送邮件时,为什么我会收到postfix拒绝的发件人?

从phpmailer发送邮件时,为什么我会收到postfix拒绝的发件人?,php,email,smtp,phpmailer,postfix-mta,Php,Email,Smtp,Phpmailer,Postfix Mta,当我运行下面的PHP代码时,我得到一个错误 $mail = new PHPMailer; $mail->isSMTP(); $mail->SMTPDebug = SMTP::DEBUG_SERVER; // debug $mail->Host = 'localhost'; $mail->Port = 25; $mail->SMTPAuth = true; $mail->Username = $uname; $mail->Password = $pw; $

当我运行下面的PHP代码时,我得到一个错误

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER; // debug
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->SMTPAuth = true;
$mail->Username = $uname;
$mail->Password = $pw;
$mail->CharSet = PHPMailer::CHARSET_UTF8;
$mail->setFrom('no-reply@example.com', 'website registration');
$mail->addAddress($cleaned_email);
$mail->Subject = 'Please verify your account';
$msg = '[registration text...]'
$msg = wordwrap($msg, 70);
$mail->Body = $msg;
                        
if (!$mail->send()) {
  echo $mail->ErrorInfo;
  exit();
} else {
  [... add user to db, etc...]
}
邮件似乎已发送。PHPMailer不会生成错误,数据库代码正在运行

下面是mail.log中生成的错误

8月22日11:47:06服务器后缀/smtp[8339]:079AB1F909:to=,relay=mail.brighthouse.com[47.43.26.56]:25,delay=5.7,delays=0.06/0.02/0.31/5.3,dsn=2.0.0,status=sent(拒绝250个2.0.0发件人。有关详细信息,请参阅了解电子邮件错误代码)。

我已经尝试在PHP代码中将发送自地址更改为我正在进行身份验证的用户

我已尝试将带有匹配哈希表的smtpd_sender_login_maps参数添加到我的postfix配置中,以将无应答地址映射到我的身份验证用户,但它将其作为未使用的参数忽略

后缀配置:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Raspbian)
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

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file = /etc/letsencrypt/live/www.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/www.example.com/privkey.pem
#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

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        defer_unauth_destination
myhostname = server
mydomain = example.com
virtual_alias_domains = example2.com
virtual_alias_maps = hash:/etc/postfix/virtual
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $mydomain
mydestination = $myhostname, $mydomain, server, localhost.localdomain, localhost
relayhost = mail.brighthouse.com
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
notify_classes = resource, software, 2bounce
home_mailbox = Maildir/
#mailbox_command =
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtpd_sender_restrictions = permit_sasl_authenticated
smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_unauth_destination
        reject_sender_login_mismatch
smtpd_helo_required = yes
smtpd_helo_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname,
        check_helo_access hash:/etc/postfix/helo_access
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smptd_sender_login_maps = hash:/etc/postfix/controlled_envelope_senders

“发件人”地址的语法不正确:

$mail->setFrom('no-reply at example.com','website registration')

您需要使用有效的电子邮件地址,例如:

$mail->setFrom('no-reply@example.com', 'website registration');

我的问题与PHP Mailer无关。我发布的php代码可以正常工作。我的问题是我的电子邮件服务器设置。我在这里发布了一个关于超级用户的与服务器更相关的问题:


谢谢大家的回复。

这里有很多电子邮件地址的语法规则可供参考,但您可以在这里查看示例:抱歉,我已正确设置了电子邮件地址的格式。堆栈溢出一直在抱怨我的帖子是垃圾邮件,我试图弄清楚它是什么。一些搜索建议可能是文本中的链接和电子邮件地址。>$mail->Username=uname$邮件->密码=pw;这仅仅是为了不公开发布您的授权吗?因为这些不是有效的PHP变量……这与PHPMailer无关。本地邮件服务器接受邮件,但转发失败。这将是因为你选择的地址;有些主人比其他人挑剔得多。您可以通过从PHPMailer发送到目标主机,绕过本地服务器进行更直接的测试,至少在您弄清楚发生了什么之前是这样。这是否意味着中继服务器(在本例中是我的ISP)正在发送发送方拒绝错误?如果是这样的话,为什么来自邮件客户端(outlook、ios)的电子邮件会被接受和发送,但当来自php,特别是phpmailer时会失败。php中的native mail()函数也返回相同的错误。我该如何进行你建议的测试?绕过本地服务器是可行的生产选择吗?因为它们来自不同的地方。是,中继服务器正在发送拒绝。PHPMailer和mail()都使用相同的发送服务器。简言之,问题在于你的地址,而不是我说过的PHPMailer。你能详细说明我的地址是什么意思吗?如果我输入的地址与outlook和ios客户端使用的发件人地址相同,我会在日志文件中收到完全相同的邮件,但邮件被中继接受,而不是拒绝。php有什么不同之处?检查每种情况下的信封发送者。在中继接收到消息后,但在发送之前,比较这些消息可能会有所帮助。