python发送带附件邮件
1. 不包括附件的邮件 #coding:utf-8 import smtplib import string # 发送普通的文本邮件 # 邮件smtp的地址 HOST = 'smtp.163.com' # 定义邮件的标题 SUBJECT = '这是邮件标题' # 发件人 FROM = 'xxx@163.com' # 收件人 To = 'xxx@qq.com' # 发送的邮件文本内容 TEXT = '这是一封测试邮件,由<xxx@163.com>发出' # 构建邮件内容 # From 发件人 To 收件人 Subject 邮件标题 邮件内容 # split:将字符串根据某些字符分割成列表 # join:把列表中的所有元素根据某个字符进行拼接 msg_content = string.join(['From:%s'%FROM,'To:%s'%To,'Subject:%s'%SUBJECT,'',TEXT],"\r\n") # 构造smtp服务对象,可以在构造对象时将host和port传入,可以直接连接服务器 smtp_server = smtplib.SMTP() # 开启发送debug模式,把发送邮件的过程显示出来 smtp_server.set_debuglevel(1) # 连接邮箱服务器 smtp_server.connect(host=HOST,port='25') # 启动安全传输模式 smtp_server.starttls() # 登录邮箱服务器 smtp_server.login(FROM,'xxxxxx') # 发送邮件 smtp_server.sendmail(from_addr=FROM,to_addrs=To,msg=msg_content) # 关闭smtp服务器连接 smtp_server.quit()
2.包括附件的邮件
#coding:utf-8 import smtplib import email from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage HOST = 'smtp.163.com' SUBJECT = '带附件的测试邮件' FROM = 'xxx@163.com' To = 'xxx@qq.com' # 定义添加图片附件的函数 # path 图片路径 imgid对应附件id,可以根据id嵌入正文 def add_image(path,imgid): data = open(path,'rb') # 创建MIMEImage对象,读取图片作为imgdata的数据参数 msg_image = MIMEImage(data.read()) # 关闭文件 data.close() # 指定图片文件的Content-ID msg_image.add_header('Content-ID',imgid) return msg_image # 创建要发送的邮件正文及附件对象 # related 使用邮件内嵌资源,可以把附件中的图片等附件嵌入到正文中 msg = MIMEMultipart('related') # 创建一个用于发送文本的MIMEText对象 msg_text = MIMEText('<h1 style="text-algin:center">恭喜您查收到该邮件</h1><span style="color:red">详情如下:</span><br><img src="cid:zg">','html','utf-8') msg.attach(msg_text) # 添加图片附件 msg.attach(add_image('center.png','zg')) # 将xls作为附件添加到邮件中 # 创建MIMEText对象,保存xls文件 attach = MIMEText(open(u'内涵段子.xls','rb').read(),'base64','utf-8') # 指定当前文件格式类型 attach['Content-type'] = 'application/octet-stream' # 配置附件显示的文件名称,当点击下载附件时,默认使用的保存文件的名称 # gb18030 qq邮箱中使用的是gb18030编码,防止出现中文乱码 attach['Content-Disposition'] = 'attachment;filename="内涵段子.xls"'.decode('utf-8').encode('gb18030') # 把附件添加到msg中 msg.attach(attach) # 设置必要请求头信息 msg['From'] = FROM msg['To'] = To msg['Subject'] = SUBJECT # 发送邮件 smtp_server = smtplib.SMTP() smtp_server.set_debuglevel(1) smtp_server.connect(HOST,'25') smtp_server.starttls() smtp_server.login(FROM,'xxx') smtp_server.sendmail(FROM,To,msg.as_string()) smtp_server.quit()