邮件未发送给 CC 中的人

Posted

技术标签:

【中文标题】邮件未发送给 CC 中的人【英文标题】:Mails not being sent to people in CC 【发布时间】:2012-04-16 00:39:25 【问题描述】:

我有以下使用 python 发送邮件的脚本

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import os

FROMADDR = "myaddr@server.com"
PASSWORD = 'foo'

TOADDR   = ['toaddr1@server.com', 'toaddr2@server.com']
CCADDR   = ['ccaddr1@server.com', 'ccaddr2@server.com']

# Create message container - the correct MIME type is multipart/alternative.
msg            = MIMEMultipart('alternative')
msg['Subject'] = 'Test'
msg['From']    = FROMADDR
msg['To']      = ', '.join(TOADDR)
msg['Cc']      = ', '.join(CCADDR)

# Create the body of the message (an html version).
text = """Hi  this is the body
"""

# Record the MIME types of both parts - text/plain and text/html.
body = MIMEText(text, 'plain')

# Attach parts into message container.
msg.attach(body)

# Send the message via local SMTP server.
s = smtplib.SMTP('server.com', 587)
s.set_debuglevel(1)
s.ehlo()
s.starttls()
s.login(FROMADDR, PASSWORD)
s.sendmail(FROMADDR, TOADDR, msg.as_string())
s.quit()

当我使用脚本时,我看到邮件同时发送到 toaddr1toadd2 但是ccaddr1ccaddr2 根本没有收到邮件。

有趣的是,当我查看toaddr1toadd2 收到的邮件时,发现 ccaddr1ccaddr2 存在于 CC 中。

脚本有错误吗?最初我认为这可能是我的邮件服务器的问题。我用 Gmail 试了一下,看到了同样的结果。也就是说,无论是我当前邮件服务器中的帐户,还是我在 CC 中的 Gmail 帐户,收件人都不会收到邮件,即使“收件人”字段中的人正确接收邮件并且具有中提到的正确地址抄送字段

【问题讨论】:

【参考方案1】:

我认为您在发送邮件时需要将 CCADDR 和 TOADDR 放在一起:

s.sendmail(FROMADDR, TOADDR+CCADDR, msg.as_string())

您在邮件中正确添加了地址,但您还需要信封上的抄送地址。

来自docs:

注意 from_addr 和 to_addrs 参数用于构造传输代理使用的消息信封。

【讨论】:

这里需要注意的更重要的一点是 - 所需的参数是一个发件人地址字符串,一个收件人地址字符串列表(裸字符串将被视为具有 1 个地址的列表),以及一个消息字符串。确保你有 to_addr 是一个列表对象。【参考方案2】:

您在邮件中指定了抄送条目,但未在信封中指定。您的工作是确保消息也发送到抄送和密送条目。

【讨论】:

我的错...谢谢你的信息:)【参考方案3】:

TOADDR+CCADDR 出现以下错误 => TypeError:只能将str(不是“list”)连接到str

我做了以下更改,它对我有用。 它成功地将带有附件的电子邮件发送到“收件人”、“抄送”和“密送”。

toaddr = ['mailid_1','mailid_2']
cc = ['mailid_3','mailid_4']
bcc = ['mailid_5','mailid_6']
subject = 'Email from Python Code'
fromaddr = 'sender_mailid'
message = "\n  !! Hello... !!"

msg['From'] = fromaddr
msg['To'] = ', '.join(toaddr)
msg['Cc'] = ', '.join(cc)
msg['Bcc'] = ', '.join(bcc)
msg['Subject'] = subject

s.sendmail(fromaddr, (toaddr+cc+bcc) , message)

【讨论】:

以上是关于邮件未发送给 CC 中的人的主要内容,如果未能解决你的问题,请参考以下文章

如何将相同的回复邮件(模板保存在outlook中)发送给邮件发件人(to,cc)?

在Outlook邮件中包含多个CC

Mandrill 未显示正确的抄送信息

python使用chilkat解析出邮件文本中的发送to和抄送cc

Laravel 5.4 - 单击电子邮件中的验证链接时未传递或发送电子邮件验证令牌令牌。

如何从android中的联系人中搜索号码?