Python电子邮件未发送到密件抄送

时间:2020-06-19 18:10:30

标签: python email smtp smtplib bcc

我正在尝试制作一些可以发送电子邮件的python代码。到目前为止,我已经成功了,但是没有向密件抄送人发送消息。

"""
June 18, 2020

@author: Carlos
"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
mail = smtplib.SMTP("smtp.gmail.com", 587)
msg = MIMEMultipart()

message = input("Your message: ")
password = input("Your password: ")
msg['From'] = input("Your email: ")
msg['To'] = input("Reciever(s): ")
msg['CC'] = ", " + input("CC(s): ")
msg['BCC'] = ", " + input("BCC(s): ")
msg['Subject'] = input("Your header: ")

msg.attach(MIMEText(message, 'plain'))

mail.ehlo()

mail.starttls()

mail.login(msg['From'], password)

mail.sendmail(msg['From'], msg['To'] + msg['CC'] + msg['BCC'], msg.as_string())

mail.close()

print("Successfully sent email to %s:" % (msg['To']))

2 个答案:

答案 0 :(得分:0)

您可能不希望BCC成为消息本身的一部分(因为按定义它并不意味着收件人可以看到它),因此,最好将它存储在单独的变量中,而不是作为BAC的元素。 MIMEMultipart个实例。

您也不想将前导逗号等(您只是为了帮助连接字符串而添加了这些内容)放入msg的元素中,因为它们将构成消息的一部分。

如果您这样做:

msg['To'] = input("Receiver(s): ")
msg['CC'] = input("CC(s): ")
bcc = input("BCC(s): ")

然后,您可以使用以下内容构建所有收件人的列表:

all_recipients = sum([s.split(",") for s in (msg['To'], msg['CC'], bcc) if s],
                     [])

然后您可以使用以下方式发送消息:

mail.sendmail(msg['From'], ",".join(all_recipients), msg.as_string())

上面的代码假定您的输入字符串不包含逗号,除了作为分隔符。原则上,标头(例如“ To:”)可以包含实名部分,并且可以包含逗号,例如:

"John Doe, Yoyodyne, Inc." <john.doe@yoyodyne.example.com>

如果可以使用,则另一种方法是列出所有To / CC / BCC标头不为空的列表,然后将其合并到","上,这样就不必拆分任何字符串:

non_empty_recipient_headers = [h for h in (msg['To'], msg['CC'], bcc) if h]

mail.sendmail(msg['From'], ",".join(non_empty_recipient_headers), msg.as_string())

答案 1 :(得分:0)

我发现了不发送的解决方案!如果有人感兴趣,这是我的代码!

"""
June 20, 2020

@author: Carlos
"""
import smtplib
mail = smtplib.SMTP("smtp.gmail.com", 587)

sender = input("Your email: ")
password = input("Your password: ")
reciever = input("Receiver(s): ")
cc = [input("CC(s): ")]
bcc = [input("BCC(s): ")]
subject = input("Your header: ")
message_text = input("Your message: ")
message = "From: %s\r\n" % sender + "To: %s\r\n" % reciever + "CC: %s\r\n" % ",".join(cc) + "Subject: %s\r\n" % subject + "\r\n"  + message_text
to = [reciever] + cc + bcc

mail.ehlo()

mail.starttls()

mail.login(sender, password)

mail.sendmail(sender, to, message)

mail.close()

print("Successfully sent email!")