python中的SMTP发送邮件
一. 介绍
python3中自带了smtplib模块和email模块
smtplib模块:负责与邮件服务器的交互
email模块:负责组织邮件内容
二. smtplib模块
smtplib模块:主要是通过SMTP类来与邮件系统进行交互
1. 实例化一个SMTP对象
s = smtplib.SMTP(邮件服务器地址, 端口号)
s = smtplib.SMTP_SSL(邮件服务器地址,端口号)
2. 登录邮箱--权限验证
s.login(用户名,授权码)
3. 发送邮件
s.sendmail(发件人邮箱,收件人邮箱,发送内容)
4. 断开连接
s.close()
5. 实例:我们来看一个小练习,即发送邮件程序 v1.0
import smtplib #实例化一个SMTP对象 s = smtolib.SMTP_SSL("smtp.qq.com", 465) #输出与SMTP服务器交互的详细信息 s.set_debuglevel(1) #登录邮箱 s.login(", "xxxxxx") #发送邮件 s.sendmail("1069966476@qq.com", "2656215306@qq.com", "hello, test!") #断开连接 s.close()
这就是一个很简单的邮件发送程序,我们只利用了smtplib模块,可以看看效果
打开邮件之后,发现发件人也没有,收件人也没有,主题也没有,内容也没有。至于为什么内容也没有,我猜和没有使用email模块相关,因为这个模块就是负责邮件内容的。
三. email模块
email模块:支持发送的邮件内容为纯文本、html内容、图片、添加附件
email模块有几大类用来针对不同的邮件内容形式,常用如下:
MIMEText:内容形式为纯文本,或者html页面
MIMEImage:内容形式为图片
MIMEMultipart:多形式组合。即内容包含文本和附件
每一类对应的导入方式:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
1. MIMEText
MIMEText(msg, type, charset):
msg:文本内容
type:默认为plain,即纯文本,发送html格式的时候,修改为html,但同时要求msg的内容也是html格式
charset:文本编码,有中文时选择utf-8
#构造TEXT格式的消息
msg = MIMEText("hello, test!", charset = "utf-8")
msg["From"] = "XXXX"
msg["To"] = "XXXX"
msg["CC"] = "XXXX"
msg["Subject"] = "python发邮件测试"
#发送以上构造的邮件内容,要使用as_string来将构造的邮件内容转换成string形式
s.sendmail("XXXX", "XXXX" , msg.as_string())
2. 实例:发送邮件程序v2.0,添加主题、发件人、收件人
import smtplib from email.mime.text import MIMEText #实例化一个MIMEText对象 msg = MIMEText("hello, test!", _charset="utf-8") #发件人信息 msg["From"] = "1069966476@qq.com" #收件人信息 msg["To"] = "2656215306@qq.com" #邮件主题 msg["Subject"] = "python发邮件测试" #利用smrplib模块发送邮件 s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.set_debuglevel(1) s.login(", "xxxxxx") s.sendmail("1069966476@qq.com", "2656215306@qq.com", msg.as_string()) s.close()
我们看看效果如何
实际上,比刚才的效果要好很多。因为我们明确的看到了有主题、发件人、收件人以及邮件内容等相关信息
3. 实例:发送邮件程序v3.0,发送html文件
import smtplib, os from email.mime.text import MIMEText #在当前目录下存在一个test.html文件,我们需要先把html文件内容读取出来,作为内容传入到MIMEText中 html_content = open(os.getcwd() + "/test.html", encoding="utf-8").read() msg = MIMEText(html_content, "html", "utf-8") msg["From"] = "1069966476@qq.com" msg["To"] = "2656215306@qq.com" msg["Subject"] = "python发送--html邮件测试" s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.set_debuglevel(1) s.login(", "xxxxxx") s.sendmail("1069966476@qq.com", "2656215306@qq.com", msg.as_string()) s.close()
此时,我们就可以把html文件的内容作为邮件内容发送出去,效果如下:
而html文件在浏览器中打开的效果是这样的
可以明显的感受到,邮件的内容就是html文件在浏览器中展示的内容
4. 实例:发送邮件程序v4.0,我们还可以传一个写一个html语言的文本发送过去
import smtplib from email.mime.text import MIMEText content = """ <p>Python 邮件发送测试...</p> <p><a href="http://www.runoob.com">这是一个链接</a></p> """ msg = MIMEText(content, "html", "utf-8") msg["From"] = "1069966476@qq.com" msg["To"] = "2656215306@qq.com" msg["Subject"] = "python发送--html邮件测试2" s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.set_debuglevel(1) s.login(", "xxxxxx") s.sendmail("1069966476@qq.com", "2656215306@qq.com", msg.as_string()) s.close()
效果如下:
5. MIMEImage、MIMEMultipart
msg = MIMEMultipart()
msg_sub = MIMEText("hello.test!", _charset = "utf-8")
msg.attach(msg_sub) #将text消息添加到MIMEMultipart中,作为邮件正文
#图片作为附件
import os
img_data = open(os.getcwd() + "/reports/python33安装-添加path.png", "rb").read()
msg_img = MIMEImage(img_data)
msg_img.add_header("Content-Disposition", "attachment", filename = "python34.png")
msg_img.add_header("Content-ID", "<0>")
msg.attach(msg_img) #将图片消息添加到MIMEMultipart中,作为附件发送
6. 实例:发送邮件程序v5.0,将图片和html文件作为附件发送
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage #带附件的邮件可以看做包含若干部分的邮件:文本和各个附件本身 #可以构造一个MIMEMultipart对象代表邮件本身 #然后往里面加上一个MIMEText作为邮件正文,再继续往里面加上表示附件的MIMEBase对象即可 msg = MIMEMultipart() msg["From"] = "1069966476@qq.com" #一定要注意多人发送是字符串形式,中间用,号分隔 msg["To"] = "2656215306@qq.com, 250xxx8591@qq.com" #抄送 msg["CC"] = "1587495910@qq.com" msg["Subject"] = "python--发送附件测试" #文本内容 msg_sub = MIMEText("hello.test!", _charset="utf-8") #将文本内容添加到msg当中 msg.attach(msg_sub) #图片作为附件 import os #读取图片内容,要选择二进制的方式 img_data = open(os.getcwd() + "/Image 17.png", "rb").read() msg_img = MIMEImage(img_data) msg_img.add_header("Content-Disposition", "attachment", filename = "Image 17.png") msg_img.add_header("Content-ID", "<0>") msg.attach(msg_img) #html作为附件 html_content = open(os.getcwd() + "/test.html", encoding="utf-8").read() msg_html = MIMEText(html_content, "html", "utf-8") msg_html.add_header("Content-Disposition", "attachment", filename = "test.html") msg.attach(msg_html) #邮件发送 s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.set_debuglevel(1) s.login(", "xxxxxx") #收件人如果是多人,应该用列表的形式表示 s.sendmail("1069966476@qq.com", ["2656215306@qq.com", "250xxx8591@qq.com"], msg.as_string()) s.close()
这种效果就是我们最终想要的形式。
python中的SMTP发送邮件的更多相关文章
- Python中使用SMTP发送邮件以及POP收取邮件
假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...
- 在Python中使用SMTP发送电子邮件
Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...
- python学习(21) smtp发送邮件
原文链接: https://www.jianshu.com/p/369ec15bfe22 本文介绍python发送邮件模块smtplib以及相关MIME模块.smtplib用于生成邮件发送的代理,发送 ...
- python实现基于smtp发送邮件
[前言] 在某些项目中,我们需要实现发送邮件的功能,比如: 爬虫结束后,发送邮件通知 定时发送邮件提醒待办事项 某项业务逻辑触发邮件通知 今天我们就分享如何基于smtp借助163邮箱来发送邮件 [实现 ...
- 使用System.Net.Mail中的SMTP发送邮件(带附件)
System.Net.Mail 使用简单邮件传输协议SMTP异步发送邮件 想要实现SMTP发送邮件,你需要了解这些类 SmtpClient :使用配置文件设置来初始化 SmtpClient类的新实例. ...
- 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
Laravel 和 Laravel 的邮件发送使用方式完全一致.Laravel 的邮件发送中文文档在:http: 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件. 配置 修改邮 ...
- 【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
#!/usr/bin/python # coding:utf- import smtplib from email.MIMEText import MIMEText from email.Utils ...
- 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件
本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...
- python实战===使用smtp发送邮件的源代码,解决554错误码的问题,更新版!
import smtplib from email.mime.text import MIMEText from email.header import Header import time #密文输 ...
随机推荐
- Django分发控制器urls--白话聊Django系列
开始前,先上一张图,让理解Django内部的处理流程,从图中我们可以知道Django内部使用MTV架构,那今天讲的第一个部分就是控制器,在Tornado框架中叫做路由系统,负责把url映射到相应的处理 ...
- setlocale同mbstowcs函数的关系(VS2008下setlocale(LC_ALL, "chs")可以执行成功,BCB使用setlocale(LC_ALL, "Chinese (Simplified)_People's Republic of China"),linux上locale别名表大概在 /usr/lib/X11/locale/locale.alias)
序中,如果要将ASCII码字符串转换为宽字符(Unicode),可以利用标准C的mbstowcs函数. 微软在MSDN中有示例,如下: 然而,这段代码在处理含有汉字的字符串时就会出现问题.比如将: w ...
- 关于主键(PRIMARY KEY)和自增(AUTO_INCREMENT)结合使用的知识点
1.主键(PRIMARY KEY)和自增(AUTO_INCREMENT)同时使用两种写法: a.主键(PRIMARY KEY)和自增(AUTO_INCREMENT)分两行写 创建一 ...
- hadoop学习第四天-Writable和WritableComparable序列化接口的使用&&MapReduce中传递javaBean的简单例子
一. 为什么javaBean要继承Writable和WritableComparable接口? 1. 如果一个javaBean想要作为MapReduce的key或者value,就一定要实现序列化,因为 ...
- django基本安装
一.web框架 1.什么是web框架? Web框架是一种开发框架,用来支持动态网站.网络应用程序及网络服务的开发.其类型有基于请求的和基于组件的两种框架. 本质上其实就是一个socket服务端,用户的 ...
- 我常用的VS快捷键
(VS2008) F4 属性窗口F5 调试F6 停止调试F9 断点F10 单步执行F11 单步执行进入函数 Ctrl + K, Ctrl + F ...
- 【转】JAVA学习笔记----PL/SQL最差实践
1. 超长的PL/SQL代码 影响:可维护性,性能 症状: 在复杂的企业应用中,存在动辄成百上千行的存储过程或上万行的包.为什么是最差: 太长的PL/SQL代码不利于阅读,第三方工 ...
- Python编程-多进程一
一.python并发编程之多进程 1.multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyth ...
- python的计算保留小数
1.要使得算术运算的结果有小数,则运算的对象至少有一个是float型的. 2.控制小数的位数:字符串格式化 格式:需要进行格式化的字符串%插入对象 需要进行格式化的字符串中带有一个或多个嵌入的转换目标 ...
- box-flex兼容写法
box-flex布局在这几年发生了多次变化,可分为2009版.2011版以及2013版, 区分: display:box(inline-box), box-{*}的格式为2009版 display:b ...