python实现SMTP邮件发送功能


Posted in Python onJune 16, 2020

一直想着给框架添加邮件发送功能、所以整理下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', '0')
 # 把附件的内容读进来:
 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 相关文章推荐
Python基于smtplib实现异步发送邮件服务
May 28 Python
Python功能键的读取方法
May 28 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Python连接字符串过程详解
Jan 06 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
如何使用pandas读取txt文件中指定的列(有无标题)
Mar 05 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
用Python制作音乐海报
Jan 26 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
详解Python函数作用域的LEGB顺序
May 14 #Python
python爬取51job中hr的邮箱
May 14 #Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 #Python
python基于phantomjs实现导入图片
May 13 #Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 #Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 #Python
Python下载指定页面上图片的方法
May 12 #Python
You might like
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
实例讲解php实现多线程
2019/01/27 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
vue组件的写法汇总
2018/04/12 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
跟老齐学Python之类的细节
2014/10/13 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
独特的python循环语句
2016/11/20 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
pytorch masked_fill报错的解决
2020/02/18 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
法律专业实习鉴定
2013/12/22 职场文书
教师求职信范文分享
2013/12/27 职场文书
啤酒节策划方案
2014/05/28 职场文书
中秋晚会策划方案
2014/06/12 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL