一. 介绍

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发送邮件的更多相关文章

  1. Python中使用SMTP发送邮件以及POP收取邮件

    假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...

  2. 在Python中使用SMTP发送电子邮件

    Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...

  3. python学习(21) smtp发送邮件

    原文链接: https://www.jianshu.com/p/369ec15bfe22 本文介绍python发送邮件模块smtplib以及相关MIME模块.smtplib用于生成邮件发送的代理,发送 ...

  4. python实现基于smtp发送邮件

    [前言] 在某些项目中,我们需要实现发送邮件的功能,比如: 爬虫结束后,发送邮件通知 定时发送邮件提醒待办事项 某项业务逻辑触发邮件通知 今天我们就分享如何基于smtp借助163邮箱来发送邮件 [实现 ...

  5. 使用System.Net.Mail中的SMTP发送邮件(带附件)

    System.Net.Mail 使用简单邮件传输协议SMTP异步发送邮件 想要实现SMTP发送邮件,你需要了解这些类 SmtpClient :使用配置文件设置来初始化 SmtpClient类的新实例. ...

  6. 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)

    Laravel  和 Laravel  的邮件发送使用方式完全一致.Laravel  的邮件发送中文文档在:http: 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件. 配置 修改邮 ...

  7. 【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls

    #!/usr/bin/python # coding:utf- import smtplib from email.MIMEText import MIMEText from email.Utils ...

  8. 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件

    本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...

  9. python实战===使用smtp发送邮件的源代码,解决554错误码的问题,更新版!

    import smtplib from email.mime.text import MIMEText from email.header import Header import time #密文输 ...

随机推荐

  1. Delphi重定义的消息结构

    // 除去DDE和MDI消息,一共159个消息,其中部分消息仅仅的转定义 // 普通消息,有两个参数和结果 PMessage = ^TMessage; TMessage = packed record ...

  2. Vue.js中this.$nextTick()的使用

    this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行.在修改数据之后立即使用它,然后等待 DOM 更新.它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自 ...

  3. shadow批量破解

    john有个参数可以设置破解时间,比如破解5秒则设置:--max-run-time=5,可以利用这个参数批量破解 for i in *;do (echo $i>>out;john --ma ...

  4. centos系统时间相差8个小时解决方案

    查看当前系统时间 [root@centos64 ~]# date 查看硬件时间 [root@centos64 ~]# hwclock --show 同步时间可以用:ntpdate us.pool.nt ...

  5. MySQL第二天

    回顾 数据库基础知识: 关系型数据库(磁盘)和非关系型数据库(内存)     关系型数据库: 建立在关系模型上的数据库 数据结构: 二维表(比较浪费空间) 操作数据的指令集合: SQL(DDL,DML ...

  6. Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...

  7. linux list.h 移植

    Linux内核中List链表的实现,对于想进阶的程序员来说,无疑是一个很好的学习机会.内核实现了一个功能十分强大的链表,而且是开源的,用在其他需要的地方岂不是很省事. 一.看List实现前,先补充ty ...

  8. HAProxy安装及简单配置

    一.HAProxy简介 代理的作用:web缓存(加速).反向代理.内容路由(根据流量及内容类型等将请求转发至特定服务器).转码器(将后端服务器的内容压缩后传输给client端).缓存的作用:减少冗余内 ...

  9. 【读书笔记】Java核心技术-基础知识-反射

    在网页中运行Java程序称为applet. 反射 这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构. 能够分析类能力的程序称为反射(reflective).反射机制的功能及其强大 ...

  10. JavaScript:学习笔记(5)——箭头函数=>以及实践

    JavaScript:学习笔记(5)——箭头函数=>以及实践 ES6标准新增了一种新的函数:Arrow Function(箭头函数).本文参考的链接如下: MDN箭头函数:https://dev ...