文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python实现邮件发送

2023-01-31 06:00

关注

使用smtplib模块发送邮件,它对smtp协议进行了简单的封装。

smtp协议的基本命令包括:

    HELO 向服务器标识用户身份

    MAIL 初始化邮件传输 mail from:

    RCPT 标识单个的邮件接收人;常在MAIL命令后面,可有多个rcpt to:

    DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输,以.结束

    VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

    EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用

    HELP 查询服务器支持什么命令

    NOOP 无操作,服务器应响应OK

    QUIT 结束会话

    RSET 重置会话,当前传输被取消

    MAIL FROM 指定发送者地址

    RCPT TO 指明的接收者地址

    一般smtp会话有两种方式,一种是邮件直接投递,就是说,比如你要发邮件給zzz@163.com,那就直接连接163.com的邮件服务器,把信投給zzz@163.com; 另一种是验证过后的发信,它的过程是,比如你要发邮件給zzz@163.com,你不是直接投到163.com,而是通过自己在sina.com的另一个邮箱来发。这样就要先连接sina.com的smtp服务器,然后认证,之后在把要发到163.com的信件投到sina.com上,sina.com会帮你把信投递到163.com。



文件形式的邮件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.text import MIMEText  

from email.header import Header  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msg = MIMEText('你好','text','utf-8')#中文需参数‘utf-8’,单字节字符不需要  

msg['Subject'] = Header(subject, 'utf-8')  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msg.as_string())  

smtp.quit()  



html形式的邮件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.text import MIMEText  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msg = MIMEText('<html><h1>你好</h1></html>','html','utf-8')  

msg['Subject'] = subject  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msg.as_string())  

smtp.quit()  



带图片的html形式邮件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.multipart import MIMEMultipart  

from email.mime.text import MIMEText  

from email.mime.image import MIMEImage  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msgRoot = MIMEMultipart('related')  

msgRoot['Subject'] = 'test message'  

msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!','html','utf-8')  

msgRoot.attach(msgText)  

fp = open('h:\\python\\1.jpg', 'rb')  

msgImage = MIMEImage(fp.read())  

fp.close()  

msgImage.add_header('Content-ID', '<image1>')  

msgRoot.attach(msgImage)  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msgRoot.as_string())  

smtp.quit()  



带附件的邮件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.multipart import MIMEMultipart  

from email.mime.text import MIMEText  

from email.mime.image import MIMEImage  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msgRoot = MIMEMultipart('related')  

msgRoot['Subject'] = 'test message'  

#构造邮件中的附件  

att = MIMEText(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')  

att["Content-Type"] = 'application/octet-stream'  

att["Content-Disposition"] = 'attachment; filename="1.jpg"'  

msgRoot.attach(att)  

  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msgRoot.as_string())  

smtp.quit()  



群邮件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.text import MIMEText  

sender = '***'  

receiver = ['***','****',……]  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msg = MIMEText('你好','text','utf-8')  

msg['Subject'] = subject  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msg.as_string())  

smtp.quit()  




也可使用yagmail模块来快速实现

实现代码如下:

import yagmail

yag = yagmail.SMTP(user='XXX@gmail.com',password='XXX'

yag.send(to = 'XXX@qq.com',subject ='test',contents = 'This is a test e-mail from Windows CMD tools with the yagmai')


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯