python学习笔记之使用smtplib模块发送邮件
2018-01-30 18:56
941 查看
本篇记录使用python内置模块email发送邮件的相关知识。
注意事项:本篇使用的是网易邮箱进行的测试
具体代码如下:
基础版本:
import smtplib #导入smtplib模块 HOST='smtp.163.com' #网易邮箱主机地址 #HOST='smtp.qq.com'#QQ邮箱主机地址 PORT=25#网易邮箱端口号 #PORT=465#QQ邮箱端口号 TO=xxxxxxx@qq.com #收件人邮箱 #TO=[XXXXX@qq.com,xxxxx@qq.com]#给多个收件人发邮件 SUBJECT='This is a test email'#邮件的标题 TEXT='This is a test email!HAHAHAHA!'#邮件的内容 smtp_obj=smtp.SMTP()#创建邮件客户端对象SMTP:传输过程不加密,网易默认 #smtp_obj=smtp.SMTP_SSL()#SMTP_SSL()传输过程加密,QQ邮箱默认 smtp_obj.connect(host=HOST,port=PORT)#通过主机地址HOST以及端口号PORT与QQ邮箱建立连接 result=smtp_obj.login(user=FROM,password='xxxxxx')#用户user就是发件人的邮箱,密码使用授权码!当前创建的邮箱客户端对象属于第三方客户端,要求使用授权码代替密码进行登录验证 print '登录结果:',result message_content='\n'.join(['From:%s' % FROM, 'To:%s' % TO, 'Subject:%s' % SUBJECT, '', TEXT])#From: To: Subject:这三个是发送邮件必填参数,且不能修改 smtp_obj.sendmail(from_addr=FROM, to_addrs=TO, msg=message_content)
加强版本:
1.发送纯文本文件
import smtplib from email.mime.text import MIMEText HOST='smtp.163.com' SUBJECT='This is a test email' FROM='xxxxx@163.com' TO='xxxxx@qq.com' #注意给多个发送邮件使用方法与上面不一样 方法一:#TO=['xxxxx@qq.com','xxxx@qq.com'] #TO=','.join(TO) #email_click.sendmail(from_addr=FROM,to_addrs=TO,msg=message.as_string())该行代码见下文 方法二:#TO='xxxxx@qq.com,xxxx@qq.com' #email_click.sendmail(from_addr=FROM,to_addrs=TO.split(','),msg=message.as_string())该行代码见下文 #参数:1.发送的消息的内容,MIMEText必须是字符串;2.信息内容的类型,默认是'plain'表示是一个纯文本,没有格式的文本。3.编码方式,默认是ascii编码 message=MIMEText('我爱你','plain','utf-8') message['From']=FROM message['To']=TO message['Subject']=SUBJECT email_click=smtplib.SMTP() email_click.connect(HOST,25) result=email_click.login(FROM,'xxxxx') print '登录结果:',result email_click.sendmail(from_addr=FROM,to_addrs=TO,msg=message.as_string()) email_click.quit()
2.发送图片和附件
import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart HOST='smtp.163.com' SUBJECT='This is a test email' FROM='xxxx@163.com' TO=['xxxxx@qq.com','xxxx@qq.com'] TO=','.join(TO) message=MIMEMultipart()#创建一个带附件的实例 message['From']=FROM message['To']=TO message['Subject']=SUBJECT #注意以下的文件都是存在当前目录中 #添加图片 image_message=MIMEText(open('1.jpg','rb').read(),'base64','utf-8') image_message['Content-Disposition'] = 'attachment;filename="image1.jpg"'.decode('utf-8').encode('gb18030') message.attach(image_message) #添加附件 #将一个xls的excel文档作为邮件的附件进行发送 #读取excel文件时,是以rb的形式读取的,是一个二进制文件内容,对于二进制文件需要设置默认的编码,如果对于二进制文件,没有设置base64编码,则附件的内容就是乱码。 message_xls = MIMEText(open('test.xlsx', 'rb').read(), 'base64', 'utf-8') #配置附件显示的文件名称,默认使用的是所保存的文件名 #gb18030是xx邮箱默认采用的编码方式,所以需要将附的内容转化为gb18030编码,和xx邮箱保持一致。 message_xls['Content-Disposition'] = 'attachment;filename="test111.xlsx"'.decode('utf-8').encode('gb18030') message.attach(message_xls) email_click=smtplib.SMTP() email_click.connect(HOST,25) result=email_click.login(FROM,'xxxxx') print '登录结果:',result email_click.sendmail(from_addr=FROM,to_addrs=TO,msg=message.as_string()) email_click.quit()
3. 发送HTML格式并且带附件的邮件
import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart HOST='smtp.163.com' SUBJECT='test email' FROM = 'xxxx@qq.com' # TO ='xxxx@qq.com,xxxx@qq.com,xxxx@qq.com' #创建用于发送邮件内容及附件的对象 #related:使用内嵌资源的形式,用该种形式可以将附件中的图片等嵌入到文本中 message = MIMEMultipart('releted') #'html',表示发送的内容是html代码 message_html = MIMEText('<h1 style="text-aline:center">恭喜你查收该邮件</h1><span style="color:red">详情如下:</span><br><img src="cid:smail">','html','utf-8') #将html的文本附件 添加到message附件对象当中 message.attach(message_html) def add_img(path,image_id): img_data = open(path,'rb') message_img = MIMEImage(img_data.read()) # 关闭图片文件 img_data.close() #指定message_img对象的Content_ID message_img.add_header('Content-ID',image_id) return message_img #将img图片附件也添加到message对象中,放在html文本的img标签中 message.attach(add_img('1.jpg','smail')) message['From']=FROM message['To']=TO message['Subject']=SUBJECT email_client = smtplib.SMTP_SSL() email_client.connect(HOST,25) result=email_client.login(FROM,'xxxxx') print '登录结果:',result email_client.sendmail(from_addr=FRO a1cf M,to_addrs=TO.split(,'),msg=message.as_string()) email_client.quit()
附:
1.QQ邮箱获取授权码:
第一步:进入账户设置
第二步:开启以下服务,即可获得授权码
2.网易邮箱获取授权码:授权码可以自己设置
疑惑点:
为什么一个可以直接传列表,另一个不可以直接传列表?而是要分割一下?注:本篇的错误之处,还望指正,多多包涵。
相关文章推荐
- 使用python内置smtplib模块发送邮件
- python中使用smtplib和email模块发送邮件实例
- Python_使用smtplib和email模块发送邮件
- python中使用smtplib和email模块发送邮件实例
- PYTHON模块学习之邮件发送模块smtplib(2015-4-3)
- Python3 使用smtplib和email模块发送邮件
- Python_使用smtplib和email模块发送邮件
- Python_使用smtplib和email模块发送邮件
- Python_使用smtplib和email模块发送邮件
- Python学习之使用Python发送邮件
- asp .net学习笔记之使用jmail发送邮件
- Python学习笔记-模块介绍(一)-模块概念和基本使用
- Python学习笔记之os模块使用总结
- python模块学习 ---- smtplib 邮件发送(转)
- Python学习笔记(五):CGI编程、SMTP发送邮件(快速入门篇)
- 转:python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python学习笔记------发送邮件(文本和html)
- python 使用Django 的 邮件模块 发送邮件
- 【Python】Python使用smtplib发送简单文本邮件