python发html邮件_使用python发送html的邮件

实现功能1:查询数据,然后做成报表,再发送这些报表

代码:

写道

import smtplib

from datetime import datetime, timedelta

import time

from email.MIMEText import MIMEText

from email.MIMEMultipart import MIMEMultipart

def get_html_msg(send_date):

head = """

"""

p = """

大家好:
截止到 """ + get_cpu_report_date(send_date, format_min) + """,各个设备性     能指标报表如下,请查阅。

"""

body = """

""" + p + """

"""

html = """""" + head + body + """"""

return html

def send_mail(html_msg):

msg = MIMEMultipart()

content = MIMEText(html_msg,'html')

msg.attach(content)

msg['To'] = ";".join(to_list)

msg['From'] = from_addr

msg['Subject'] = subject

s = smtplib.SMTP('xxxx')

s.set_debuglevel(0)

s.sendmail(from_addr, to_list, msg.as_string())

s.quit()

print "ok"

if __name__ == "__main__":

now = datetime.now()

html = get_html_msg()

send_mail(html)

实现功能2(发送附件):(转载)

#!/usr/bin/env python

#-*-coding:utf8-*-

import os, smtplib, mimetypes

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email.mime.multipart import MIMEMultipart

MAIL_LIST = ["username@51cto.com"]

MAIL_HOST = "smtp.51cto.com"

MAIL_USER = "username"

MAIL_PASS = "password"

MAIL_POSTFIX = "51cto.com"

MAIL_FROM = MAIL_USER + ""

def send_mail(subject, content, filename = None):

try:

message = MIMEMultipart()

message.attach(MIMEText(content))

message["Subject"] = subject

message["From"] = MAIL_FROM

message["To"] = ";".join(MAIL_LIST)

if filename != None and os.path.exists(filename):

ctype, encoding = mimetypes.guess_type(filename)

if ctype is None or encoding is not None:

ctype = "application/octet-stream"

maintype, subtype = ctype.split("/", 1)

attachment = MIMEImage((lambda f: (f.read(), f.close()))(open(filename, "rb"))[0], _subtype = subtype)

attachment.add_header("Content-Disposition", "attachment", filename = filename)

message.attach(attachment)

smtp = smtplib.SMTP()

smtp.connect(MAIL_HOST)

smtp.login(MAIL_USER, MAIL_PASS)

smtp.sendmail(MAIL_FROM, MAIL_LIST, message.as_string())

smtp.quit()

return True

except Exception, errmsg:

print "Send mail failed to: %s" % errmsg

return False

if __name__ == "__main__":

if send_mail("测试信", "我的博客欢迎您/", r"G:\attachment.rar"):

print "发送成功!"

else:

print "发送失败!"

1、首先要理解一个常识(RFC)

RFC(The Request for Comments)是一个关于Internet各种标准的文档,定义了很多的网络协议和数据格式,标准的Internet邮件遵从RFC2822(Internet Message Format)等几个文档,其中RFC822中描述了邮件头(mail headers)的格式。具体文档在Python帮助里都可以查到全文。

2、其次要熟悉Python的几个模块

关于邮件的有email,smtplib等,关于编码的有base64,binascii等,发送邮件的方式就是先根据RFC构造好邮件的各个部分,然后登录到smtp服务器sendmail就可以了。

3、下面贴代码

1

f0cd6c7f9e7ae96feae062cb48f670f0.png# -*- coding: cp936 -*-

2

f0cd6c7f9e7ae96feae062cb48f670f0.png

3

f0cd6c7f9e7ae96feae062cb48f670f0.pngfrom email.Header import Header

4

f0cd6c7f9e7ae96feae062cb48f670f0.pngfrom email.MIMEText import MIMEText

5

f0cd6c7f9e7ae96feae062cb48f670f0.pngfrom email.MIMEMultipart import MIMEMultipart

6

f0cd6c7f9e7ae96feae062cb48f670f0.pngimport smtplib, datetime

7

f0cd6c7f9e7ae96feae062cb48f670f0.png

8

f0cd6c7f9e7ae96feae062cb48f670f0.png#创建一个带附件的实例

9

f0cd6c7f9e7ae96feae062cb48f670f0.pngmsg = MIMEMultipart()

10

f0cd6c7f9e7ae96feae062cb48f670f0.png

11

f0cd6c7f9e7ae96feae062cb48f670f0.png#构造附件

12

f0cd6c7f9e7ae96feae062cb48f670f0.pngatt = MIMEText(open('d:\\tc201.rar', 'rb').read(), 'base64', 'gb2312')

13

f0cd6c7f9e7ae96feae062cb48f670f0.pngatt["Content-Type"] = 'application/octet-stream'

14

f0cd6c7f9e7ae96feae062cb48f670f0.pngatt["Content-Disposition"] = 'attachment; filename="tc201.rar"'

15

f0cd6c7f9e7ae96feae062cb48f670f0.pngmsg.attach(att)

16

f0cd6c7f9e7ae96feae062cb48f670f0.png

17

f0cd6c7f9e7ae96feae062cb48f670f0.png#加邮件头

18

f0cd6c7f9e7ae96feae062cb48f670f0.pngmsg['to'] = 'zhousl@xxx.com'

19

f0cd6c7f9e7ae96feae062cb48f670f0.pngmsg['from'] = 'zhousl@xxx.com'

20

f0cd6c7f9e7ae96feae062cb48f670f0.pngmsg['subject'] = Header('冒烟测试结果 (' + str(datetime.date.today()) + ')', \

21

f0cd6c7f9e7ae96feae062cb48f670f0.png                        'gb2312')

22

f0cd6c7f9e7ae96feae062cb48f670f0.png#发送邮件

23

f0cd6c7f9e7ae96feae062cb48f670f0.pngserver = smtplib.SMTP('smtp.xxx.com')

24

f0cd6c7f9e7ae96feae062cb48f670f0.pngserver.sendmail(msg['from'], msg['to'], \

25

f0cd6c7f9e7ae96feae062cb48f670f0.png                 msg.as_string())

26

f0cd6c7f9e7ae96feae062cb48f670f0.pngserver.close

4、几个值得注意的地方

1)构造附件时注意采用正确的字符集,这个困惑我好久,开始没有用gb2312,发过去的压缩文件就是坏的;

2)上面的代码中没有包括登录smtp服务器的指令,而Internet上面的smtp服务器一般都是要求认证的,可以通过smtp.login方法进行登陆

3)sendmail方法中的参数to可以是包含多个地址的元组,这样可以发送邮件给多个人了

4)Python2.4以前的版本是不支持gb2312字符集的,要下载安装Python2.4才能跑上面的代码,当然2.4.1肯定会更好一点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,展示如何使用Python发送HTML格式的电子邮件: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage # 邮件发送者和接收者的信息 sender = 'sender@example.com' receiver = 'receiver@example.com' # 邮件主题 subject = 'HTML格式邮件' # 邮件正文内容 html = """ <html> <head></head> <body> <p>这是一封HTML格式的邮件!</p> <p>以下是一张图片:</p> <img src="cid:image1"> </body> </html> """ # 创建包含HTML内容的MIMEText对象 msg = MIMEMultipart('related') msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver html_part = MIMEText(html, 'html') msg.attach(html_part) # 添加图片 with open('image.jpg', 'rb') as f: img = MIMEImage(f.read()) img.add_header('Content-ID', '<image1>') msg.attach(img) # 发送邮件 smtp_server = 'smtp.example.com' smtp_port = 587 smtp_username = 'username' smtp_password = 'password' server = smtplib.SMTP(smtp_server, smtp_port) server.ehlo() server.starttls() server.login(smtp_username, smtp_password) server.sendmail(sender, receiver, msg.as_string()) server.quit() ``` 在上述代码中,我们创建了一个 `MIMEMultipart` 对象,并使用 `MIMEText` 类将HTML内容添加为邮件正文。同时,我们还添加了一张图片,并使用 `MIMEImage` 类将其作为附件添加到邮件中,并在HTML中通过 `Content-ID` 引用该图片。最后,我们使用SMTP协议发送邮件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值