python: 发送内容带图片的邮件

强推:Python 菜谱,里面对 python发送带图片的邮件讲的比较清楚。

刚好我有一个需求,就发送一个网页形式的邮件,而且网页中有图片。

下面是我自己的发送带图片的邮件的代码:

def send_email(subject, to_address_list, cc_address_list):
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage

    sendObj = smtplib.SMTP('mail.gometech.com.cn', 25)
    sendObj.set_debuglevel(1)  # 打印debug日志
    print(sendObj)  # ok 了
    # 2. 跟服务器建立连接
    sendObj.ehlo()
    # 3. 实现加密的必须的步骤
    # sendObj.starttls()

    username = r'[email protected]'
    password = _get_password()

    # ##########################--------------- start
    # 读取html文件内容
    f = open('e:/py/notification.html', 'r', encoding='utf-8')
    mail_body = f.read()
    f.close()

    # 00. 类型需要是 multipart 的
    msg = MIMEMultipart('related')
    msg['To'] = ",".join(to_address_list)
    msg['Cc'] = ",".join(cc_address_list)
    msg['Subject'] = Header(subject, 'utf-8').encode()

    # 01. 添加文本
    msgText = MIMEText(mail_body.replace('{username}', newly_gerrit()), _subtype='html', _charset='utf-8')
    msg.attach(msgText)
    # 02. 添加图片
    file = open("e:/py/dns.jpg", "rb")
    img_data = file.read()
    file.close()
    img = MIMEImage(img_data)
    img.add_header('Content-ID', 'dns_config') 
    msg.attach(img)

    login_result = sendObj.login(username, password)
    # 4. 发送邮件
    send_result = sendObj.sendmail(username, to_address_list + cc_address_list,
                                   msg.as_string())
    # 5. 发送完成,退出
    quit_result = sendObj.quit()
    print(login_result, send_result, quit_result)

注意点:

msg = MIMEMultipart('related') 必须选择这个类型的,不然不能又包含图片,又包含文字。msg相当于一个容器,本身没有具体的内容。如果要什么内容,就调用 msg.attach(msgText)这样的方法去包含。

# 02. 添加图片
file = open("e:/py/dns.jpg", "rb")
img_data = file.read()
file.close()
img = MIMEImage(img_data)
img.add_header('Content-ID', 'dns_config') # todo: 注意这里的 dns_config 是和 html中对应的
msg.attach(img)

对应的 html中的代码:

<img src="cid:dns_config" alt="dns配置"> 
<!--todo: src 不是一个路径了,而是 cid:dns_config 这样的一个东西 -->

大体上内容就这些,跪安吧。

猜你喜欢

转载自blog.csdn.net/DucklikeJAVA/article/details/80056100