python实现SMTP邮件发送功能
作者:lijiao 发布时间:2023-11-11 08:04:03
标签: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', '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 "邮件发送失败"
0
投稿
猜你喜欢
- 本文实例讲述了php下pdo的mysql事务处理用法。分享给大家供大家参考。具体分析如下:php+mysql事务处理的几个步骤:1.关闭自动
- php随机数生成一个给定范围的随机数,用 PHP 就太简单不过了,而且可以指定从负数到正整数的范围,如:<?phpecho mt_ra
- 作用:调用方法改为调用对象, 比如 : p.set_name() 改为 p.set_name区别:前者改变get方法,后者改变set方法效果
- 1、fit和fit_generator的区别首先Keras中的fit()函数传入的x_train和y_train是被完整的加载进内存的,当然
- 在keras中,数据是以张量的形式表示的,不考虑动态特性,仅考虑shape的时候,可以把张量用类似矩阵的方式来理解。例如[[1],[2],[
- SQL Server2005数据项的分拆与合并:参考示例如下:-- ====================================
- 先上代码,主要语句为np.where(b[c]==1),详细解释如下:import numpy as np b = np.array([[-
- 用for循环实现1~n求和的方法def main(): sum = 0 n = int(input('n=&
- 参考: Smashing magzine翻译+整理: Demix当完成一项前端的工作之后,许多人都会忘记该项目的结构与细节。然而代码并不是马
- INSTR的第三个参数为1时,实现的是indexOf功能。 INSTR的第三个参数为-1时,实现的是lastIndexOf功能。 例如: I
- 一、功能这里的需求是,判断摄像头有没有被物体遮挡。这里只考虑用手遮挡---->判断黑色颜色的范围。二、使用OpenCV的Mat格式图片
- 引言众所周知,在python中我们用try…except…来捕获异常,使用raise来抛出异常,
- 前言每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是Fals
- 之前写了个python脚本用selenium+phantomjs爬新帖子,在循环拉取页面的过程中,phantomjs总是block住,使用W
- 1、主动删除对象调用del 对象;程序运行结束后,python也会自动进行删除其他的对象。class Animal: &nbs
- 一、验证码示例 二、php验证码类,secoder.class.php<?php/** * 安全验证码 * * 安全的验证码要:验证
- 本文是将yolo3目标检测框架训练出来的ckpt文件固化成pb文件,主要利用了GitHub上的该项目。为什么要最终生成pb文件呢?简单来说就
- 问题:在Jupyter Notebook中使用args传递参数时出现错误:原始代码:args = parser.parse_args()us
- 使用 Django自带的 auth 用户验证功能,编写函数,使用 is_authenticated 检查用户是否登录,结果报错:TypeEr
- 本文介绍了深入理解ES6的迭代器与生成器,分享给大家,具体如下:循环语句的问题var colors = ["red",