【问题标题】:BCC not hidden on gmail using python smtplib使用 python smtplib 未在 gmail 上隐藏密件抄送
【发布时间】:2017-08-18 10:53:57
【问题描述】:

我正在编写一个 python 脚本,通过调查向我的客户发送电子邮件。我将在密件抄送字段中只发送一封包含所有客户电子邮件的电子邮件,这样我就不需要遍历所有电子邮件。当我测试向我公司的同事发送电子邮件以及发送到我的个人电子邮件时,一切正常,但是每当我发送到 gmail 帐户时,BCC 字段似乎没有被隐藏并显示所有电子邮件。我找到了这篇文章Email Bcc recipients not hidden using Python smtplib 并尝试了该解决方案,但是由于我使用的是 html 正文电子邮件,因此电子邮件显示在正文中。谁能帮我解决这个问题?

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage


def send_survey_mail():

template_path = 'template.html'
background_path = 'image.png'
button_path = 'image2.png'

try:
    body = open(template_path, 'r')
    msg = MIMEMultipart()

    msg['Subject'] = 'Customer Survey'
    msg['To'] = ', '.join(['myemail@domain.com.br', 'myemail2@domain.com'])
    msg['From'] = 'mycompany@mycompany.com.br'
    msg['Bcc'] = 'customer@domain.com'

    text = MIMEText(body.read(), 'html')
    msg.attach(text)

    fp = open(background_path, 'rb')
    img = MIMEImage(fp.read())
    fp.close()

    fp2 = open(button_path, 'rb')
    img2 = MIMEImage(fp2.read())
    fp2.close()

    img.add_header('Content-ID', '<image1>')
    msg.attach(img)

    img2.add_header('Content-ID', '<image2>')
    msg.attach(img2)

    s = smtplib.SMTP('smtpserver')

    s.sendmail('mycompany@mycompany.com.br',
               ['myemail@domain.com.br', 'myemail2@domain.com', 'customer@domain.com'],
               msg.as_string())
    s.quit()
except Exception as ex:
    raise ex

send_survey_mail()

我从代码中删除了以下行并再次尝试。现在电子邮件没有发送到我客户的 Gmail 电子邮件。

msg['Bcc'] = 'customer@gmail.com'

【问题讨论】:

    标签: python email smtplib bcc


    【解决方案1】:
    MAIL_FROM = default@server.com
    MAIL_DL = default@server.com
    
    def send(to, cc, bcc, subject, text, html):
        message = MIMEMultipart("alternative")
        message["Subject"] = subject
        message["From"] = MAIL_FROM
        message["To"] = to
        message["Cc"] = cc + "," + MAIL_DL
    
        if html is not None:
            body = MIMEText(html, "html")
        else:
            body = MIMEText(text)
        message.attach(body)
    
        server = smtplib.SMTP(MAIL_SERVER)
        server.set_debuglevel(1)
    
        server.sendmail(MAIL_DL, to.split(",") + bcc.split(","), message.as_string())
        server.quit()
    
        return {
            "to": to,
            "cc": cc,
            "bcc": bcc,
            "subject": subject,
            "text": text,
            "html": html,
        }
    

    【讨论】:

      【解决方案2】:

      请不要在 msg['To'] 或 msg['Cc'] 中提及密件抄送邮件。仅在 server.sendmail()

      中执行
      import smtplib
      from email.mime.multipart import MIMEMultipart
      from email.mime.text import MIMEText
      from email.mime.base import MIMEBase
      from email import encoders
      
      from_addr = "your@mail.com"
      to_addr = ["to@mail.com", "to2@mail.com"]
      
      msg = MIMEMultipart()
      
      msg['From'] = from_addr
      msg['To'] = to_addr
      msg['Subject'] = "SUBJECT"
      
      body = "BODY"
      
      msg.attach(MIMEText(body, 'plain'))
      
      filename = "FILE.pdf"
      attachment = open('/home/FILE.pdf', "rb")
      
      part = MIMEBase('application', 'octet-stream')
      part.set_payload((attachment).read())
      encoders.encode_base64(part)
      part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
      
      msg.attach(part)
      
      server = smtplib.SMTP('.....', 587)
      server.starttls()
      server.login(from_addr, 'yourpass')
      text = msg.as_string()
      server.sendmail(from_addr, to_addr + [bcc@mail.com], text)
      server.quit()
      

      【讨论】:

        【解决方案3】:

        您是否尝试不定义 msg['BCC'] 字段?设置该字段会强制将其包含在内。密件抄送电子邮件地址在 sendmail 命令的目标地址列表中就足够了。看看this post

        【讨论】:

        • 是的,我在链接上做了同样的解决方案,但在我的情况下,我需要正文是 html,所以当我这样做时,电子邮件地址以及主题出现在电子邮件。
        猜你喜欢
        • 2016-01-07
        • 2012-01-03
        • 2018-03-21
        • 2020-10-10
        • 2016-04-29
        • 1970-01-01
        • 2015-12-19
        • 2018-09-16
        • 2014-01-21
        相关资源
        最近更新 更多