python学习笔记(SMTP邮件发送)
想着给框架添加邮件发送功能、所以整理下python下邮件发送功能
首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTML及添加附件的邮件
之后是邮箱、像163、qq、新浪等邮箱默认关闭SMTP服务,需要我们手动打开
打开后通过发件人邮箱、授权密码 通过发件人的SMTP服务发送
代码如下:
- #!/usr/bin/env python
- # -*- coding: utf_8 -*-
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- from email.mime.multipart import MIMEBase
- from email import encoders
- from email.header import Header
- from email.utils import parseaddr, formataddr
- import smtplib
- class SendEmail:
- outbox = "pythondldysl01@163.com"
- # 发件箱地址
- password = "wxqcl258258"
- # 授权密码 不是邮箱登录密码
- inbox = "xxx@qq.com"
- # 收件箱地址
- smtp_server = "smtp.163.com"
- # 发件箱服务器地址
- def __init__(self):
- pass
- @classmethod
- def _format_address(cls, text):
- name, address = parseaddr(text)
- return formataddr((Header(name, "utf-8").encode(), address))
- @classmethod
- def send_email_text(cls):
- msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
- # 第一个参数:邮件正文
- # 第二个参数:邮件类型 纯文本
- # 第三个参数:编码
- msg["From"] = SendEmail._format_address("来自163的一封邮件 <%s>" % SendEmail.outbox)
- # 发件人姓名与发件箱地址
- msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
- # 收件人姓名与收件箱地址
- msg["Subject"] = Header("来自SMTP的问候", "utf-8").encode()
- # 邮件标题
- try:
- server = smtplib.SMTP(SendEmail.smtp_server, 25)
- # 构造smtp服务器连接
- # server.set_debuglevel(1)
- # debug输出模式 默认关闭
- server.login(SendEmail.outbox, SendEmail.password)
- # 登录smtp服务器
- server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
- # 发送邮件
- server.quit()
- print "邮件发送成功"
- except Exception, e:
- print str(e)
- print "邮件发送失败"
- if __name__ == '__main__':
- SendEmail.send_email_text()
发件箱效果:
收件箱效果
这只是纯文本的内容、可以支持HTML格式的内容、修改内容如下:
msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
内容修改成HTML格式、 “plain”改成 “html”
最后是添加附件的邮件
代码如下:
- @classmethod
- def send_email_multipart(cls):
- msg = MIMEMultipart()
- msg["From"] = SendEmail._format_address("来自163的一封邮件 <%s>" % SendEmail.outbox)
- # 发件人姓名与发件箱地址
- msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
- # 收件人姓名与收件箱地址
- msg["Subject"] = Header("来自SMTP的问候", "utf-8").encode()
- # 邮件标题
- msg.attach(MIMEText("测试添加附件的smtp邮件发送功能", "plain", "utf-8"))
- with open("E:\\work\\python project\\CreateProject\\20160421140953.xml", "rb") as f:
- # 设置附件的MIME和文件名
- mime = MIMEBase("xml", "xml", filename="测试报告.xml")
- # 加上必要的头信息
- mime.add_header('Content-Disposition', 'attachment', filename="测试报告.xml")
- mime.add_header('Content-ID', '<0>')
- mime.add_header('X-Attachment-Id', '')
- # 把附件的内容读进来:
- mime.set_payload(f.read())
- # 用Base64编码:
- encoders.encode_base64(mime)
- # 添加到MIMEMultipart:
- msg.attach(mime)
- try:
- server = smtplib.SMTP(SendEmail.smtp_server, 25)
- # 构造smtp服务器连接
- # server.set_debuglevel(1)
- # debug输出模式 默认关闭
- server.login(SendEmail.outbox, SendEmail.password)
- # 登录smtp服务器
- server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
- # 发送邮件
- server.quit()
- print "邮件发送成功"
- except Exception, e:
- print str(e)
- print "邮件发送失败"
收件箱效果:
博主也是参考大神的网站教的、是一个全方位的python学习网站
这里给出链接地址:
python学习笔记(SMTP邮件发送)的更多相关文章
- Python学习笔记——发邮件
参考:Python3实现163邮箱SMTP发送邮件 1.首先需要注册一个网易的邮箱,开启smtp服务,并使用其授权码 2.发送邮件的Python脚本 #!/usr/bin/python # -*- c ...
- python学习笔记--smtp模块的使用及常见错误处理
SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\ ...
- python学习笔记(SMTP邮件发送:带附件)
博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- Python学习笔记九
Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...
- Python学习笔记,day5
Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...
随机推荐
- centos7.3下使用yum 安装pip
centos下安装pip时失败: No package pip available.Error: Nothing to do 解决方法: 需要先安装扩展源EPEL. EPEL(http://fedor ...
- Learning PHP Design Patterns
Learning PHP Design Patterns CHAPTER 1 Algorithms handle speed of operations, and design patterns ha ...
- 百度 验证码识别API 使用
先到百度云申请文字识别API ,会给你一个API KEY和一个SECRET KEY,免费,一天最多500次请求. try: temp_url = 'https://aip.baidubce.com/o ...
- python线程池/进程池创建
进程池 import time from concurrent.futures import ProcessPoolExecutor def task(arg): time.sleep(2) prin ...
- 在Web上运行Linux—js/linux模拟器
一个叫Fabrice Bellard 的程序员写了一段Javascript在Web浏览器中启动Linux(原网页,我把这个网页iframe在了下面),目前,你只能使用Firefox 4和Chrome ...
- C/C++中的输出对齐设置
输出对齐有两个方面,一是输出宽度,一是左对齐还是又对齐. 在C++里面,默认是右对齐,可以通过cout.setf(std::ios::left)调整为左对齐,而且这种调整是全局的 ,一次设置,后面都有 ...
- HTML 块级元素与行内元素
1.块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签'P".“form"这个块元素比较特殊,它只能用来容纳其他块元素. 2.如果没有css的作用,块元素 ...
- WinIo简介
WinIo简介 一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo.上网查了很多资料,发现关于WinIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于 ...
- DP专题·四(树形dp)
1.poj 115 TELE 题意:一个树型网络上有n个结点,1~n-m为信号传送器,n-m+1~n为观众,当信号传送给观众后,观众会付费观看,每铺设一条道路需要一定费用.现在求以1为根,使得收到观众 ...
- s5_day8作业
# 1 整理今天装饰器代码(每人手写一份,注意,是手写,交到小组长手里,明天我检查),准备明天默写 # 2 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 ...