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

Python批量邮件用BCC而非TO致Kindle无法接收,如何修改代码?

解决Kindle无法接收BCC邮件的问题:将收件人移至TO字段的两种实现方式

原代码的核心问题是提前生成了邮件字符串,之后修改msg['To']不会影响已经固定的text变量,导致收件人设置根本没生效。下面给两种符合需求的修改方案:


方案一:单封邮件发送给多个TO收件人

这种方式会把所有Kindle邮箱放在同一份邮件的TO字段里,所有收件人能看到彼此的邮箱地址,发送效率更高。

修改后的代码:

receiver_email = ["email1@mail.com", "email2@mail.com", "email3@mail.com", "email4@mail.com", "email5@mail.com"]

subj = "Issue - "+fullDate
msg = MIMEMultipart('alternative')
msg['Subject'] = subj
msg['From'] = sender_email
# 设置TO字段为逗号分隔的收件人字符串
msg['To'] = ", ".join(receiver_email)

msg.attach(MIMEText('Forward this email to your kindle account'))

# 附件部分保持不变
print("Attaching "+epubname)
fp = open(epubname, "rb")
epub_file = MIMEApplication(fp.read())
fp.close()
encoders.encode_base64(epub_file)
epub_file.add_header('Content-Disposition', 'attachment', filename=epubname)
msg.attach(epub_file)

debug = False
if debug:
    print(msg.as_string())
else:
    server = smtplib.SMTP('smtp.office365.com',587)
    server.ehlo()
    server.starttls()
    server.login("##EMAIL##", "##PASSWORD##")
    # 必须在设置完所有邮件头后再生成最终邮件文本
    text = msg.as_string()+ "\r\n" + message_text
    # sendmail第二个参数传收件人列表
    server.sendmail(sender_email, receiver_email, text.encode('utf-8'))
    server.quit()

方案二:发送多封独立的单收件人邮件

这种方式会给每个Kindle邮箱单独发一封邮件,收件人看不到其他邮箱地址,更符合隐私需求。

修改后的代码:

receiver_email = ["email1@mail.com", "email2@mail.com", "email3@mail.com", "email4@mail.com", "email5@mail.com"]

subj = "Issue - "+fullDate
debug = False

# 提前建立SMTP连接,避免重复握手
if not debug:
    server = smtplib.SMTP('smtp.office365.com',587)
    server.ehlo()
    server.starttls()
    server.login("##EMAIL##", "##PASSWORD##")

for email_to in receiver_email:
    # 每次循环重新创建邮件对象,避免邮件头污染
    msg = MIMEMultipart('alternative')
    msg['Subject'] = subj
    msg['From'] = sender_email
    msg['To'] = email_to

    msg.attach(MIMEText('Forward this email to your kindle account'))

    # 附件部分
    print(f"Attaching {epubname} for {email_to}")
    fp = open(epubname, "rb")
    epub_file = MIMEApplication(fp.read())
    fp.close()
    encoders.encode_base64(epub_file)
    epub_file.add_header('Content-Disposition', 'attachment', filename=epubname)
    msg.attach(epub_file)

    if debug:
        print(msg.as_string())
    else:
        text = msg.as_string()+ "\r\n" + message_text
        server.sendmail(sender_email, email_to, text.encode('utf-8'))

# 最后统一关闭连接
if not debug:
    server.quit()

关键说明

  1. 方案一适合不在乎收件人互相可见的场景,只需要发送一次邮件;方案二更注重隐私,每个收件人收到独立的专属邮件。
  2. 两种方案都修复了原代码提前生成邮件字符串的问题,确保msg['To']的修改能正确反映到最终发送的邮件内容中。

内容的提问来源于stack exchange,提问作者MovieAddicted

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:20:25