Python实现邮件发送

简介:

使用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')




本文转自 粗粮面包 51CTO博客,原文链接:http://blog.51cto.com/culiangmianbao/2058512,如需转载请自行联系原作者
相关文章
|
数据安全/隐私保护 Python
Python实现邮件发送(含详细设置方法),并总结自己遇到的错误
Python实现邮件发送(含详细设置方法),并总结自己遇到的错误
158 0
|
4月前
|
安全 数据库 数据安全/隐私保护
Python办公自动化实战:手把手教你打造智能邮件发送工具
本文介绍如何使用Python的smtplib和email库构建智能邮件系统,支持图文混排、多附件及多收件人邮件自动发送。通过实战案例与代码详解,帮助读者快速实现办公场景中的邮件自动化需求。
418 0
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
332 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
11月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
320 4
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
564 9
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
583 3
|
Windows Python
每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)
每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)
241 0
每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)
|
安全 数据安全/隐私保护 开发者
Python实现简单的邮件发送系统
Python实现简单的邮件发送系统
206 3
|
机器学习/深度学习 数据采集 自然语言处理
Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战
Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战
|
运维 Shell Linux
第十四章 Python发送邮件(常见四种邮件内容)
第十四章 Python发送邮件(常见四种邮件内容)