使用Python smtplib发送带附件邮件时Postfix忽略CC收件人的问题排查求助
问题分析与解决方案
你的问题核心出在**smtplib.SMTP.sendmail()方法的收件人参数处理**上。虽然你在邮件头里设置了msg["Cc"]来展示抄送信息,但这个字段仅仅是用于邮件内容的显示——SMTP服务器并不会自动读取这个头字段来投递邮件,它只会发送给你在sendmail()方法里明确指定的收件人地址。
看你的代码片段:
smtp.sendmail(smtp_username, receiver_email, text)
这里第二个参数只传入了主收件人somemail@other.com,所以Postfix日志里只会记录邮件发送给这个地址,抄送地址根本没被传递给SMTP服务器,自然收不到邮件。而RoundCube在发送时会自动把Cc地址加入到SMTP的收件人列表中,所以两个收件人都能收到邮件。
修复步骤
你需要把主收件人和抄送收件人合并成一个列表,传给sendmail()的第二个参数:
- 先单独定义抄送收件人变量(方便后续维护):
cc_email = "cc-somemail@other.com"
- 创建包含所有收件人的列表:
recipients = [receiver_email, cc_email]
- 修改
sendmail()的调用逻辑:
smtp.sendmail(smtp_username, recipients, text)
修改后的完整发送环节代码如下:
# Login to server using secure context and send email context = ssl.create_default_context() smtp = smtplib.SMTP(smtp_server, port=smtp_port) smtp.ehlo() smtp.starttls() smtp.login(smtp_username, smtp_password) cc_email = "cc-somemail@other.com" recipients = [receiver_email, cc_email] smtp.sendmail(smtp_username, recipients, text) smtp.quit()
这样调整后,SMTP服务器会同时投递邮件到主收件人和抄送收件人的地址,同时邮件头里的Cc字段依然会正常显示,完全符合你的预期效果。
内容的提问来源于stack exchange,提问作者Marko Todoric
相关产品推荐
相关产品推荐

