BCC没有使用python smtplib隐藏在gmail上

时间:2017-03-25 14:18:34

标签: python email smtplib bcc

我正在编写一个python脚本,通过调查向我的客户发送电子邮件。我将在BCC字段中只发送一封包含我所有客户电子邮件的电子邮件,这样我就不需要遍历所有电子邮件。当我测试向我公司的同事发送电子邮件以及发送到我的个人电子邮件时,一切正常,但每当我发送到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'

3 个答案:

答案 0 :(得分:1)

请勿在msg [&#39; To&#39;]或msg [&#39; Cc&#39;]中提及密件抄送邮件。只在 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()

答案 1 :(得分:0)

您是否尝试不定义msg ['BCC']字段?设置该字段会强制包含它。 Bcc电子邮件地址位于sendmail命令的目标地址列表中应该足够了。看看this post

答案 2 :(得分:0)

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,
    }