【问题标题】:Python Emails Not Sending to BCCPython 电子邮件未发送到密件抄送
【发布时间】:2020-10-10 01:25:45
【问题描述】:

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

"""
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']))

【问题讨论】:

    标签: python email smtp smtplib bcc


    【解决方案1】:

    我找到了一个解决我的问题的方法,它不发送!如果有人感兴趣,这是我的代码!

    """
    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!")
    
    

    【讨论】:

      【解决方案2】:

      您可能不希望密件抄送成为消息本身的一部分(因为根据定义,收件人不会看到它),因此最好将其存储在单独的变量中,而不是作为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())
      

      【讨论】:

      • 我已经尝试了这两种方法,但我发现它们都没有发送到 CC 或 BCC,但我注意到它们确实显示在 Gmail 的 CC 和 BCC 列表中。
      猜你喜欢
      • 2012-03-20
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多