You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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()的第二个参数:

  1. 先单独定义抄送收件人变量(方便后续维护):
cc_email = "cc-somemail@other.com"
  1. 创建包含所有收件人的列表:
recipients = [receiver_email, cc_email]
  1. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:03:15