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'lemon.tony@163.com'
    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 这样的一个东西 -->

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


另外,对于给多个收件人设置昵称,需要使用到新的方法 : email.utils.formataddr

    from email.utils import parseaddr, formataddr

    subject = r"这是主题"
    to_address = [r'灰猫不是猫<grey.cat@gmail.com>']  
    cc_address = [formataddr((r'蓝猫不是猫', 'blue.cat@gmail.com'), charset='utf-8'),
                  formataddr((r'吕布', 'tom.cat@gmail.com'), charset='utf-8'),]
    send_email(subject, to_address, cc_address)
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值