python实现SMTP邮件发送功能

作者:lijiao 时间:2023-11-11 08:04:03 

一直想着给框架添加邮件发送功能、所以整理下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,SMTP,邮件发送
0
投稿

猜你喜欢

  • IE8 的 noscript 标签 Bug

    2009-08-18 12:37:00
  • 详解PyTorch手写数字识别(MNIST数据集)

    2023-01-28 19:40:47
  • Django的models模型的具体使用

    2022-08-13 07:57:04
  • golang中interface接口的深度解析

    2024-05-08 10:52:00
  • python实用代码片段收集贴

    2022-02-16 10:01:40
  • Python3接口性能测试实例代码

    2021-02-16 14:24:18
  • django的403/404/500错误自定义页面的配置方式

    2023-01-19 06:44:40
  • 解析zend studio中直接导入svn中的项目的方法步骤

    2023-09-05 02:21:01
  • python对站点数据做EOF且做插值绘制填色图

    2023-03-05 03:30:56
  • vue实现简单的登录弹出框

    2024-05-21 10:30:12
  • 使用Python对微信好友进行数据分析

    2021-04-12 18:10:58
  • 可以拖动的div 实现代码第1/2页

    2024-03-19 17:46:20
  • 解决TensorFlow训练内存不断增长,进程被杀死问题

    2021-02-09 17:14:34
  • python 日志 logging模块详细解析

    2022-06-12 15:11:51
  • SQL Server 2000中的触发器使用

    2024-01-15 15:33:34
  • SpringBoot 中使用JSP的方法示例

    2023-06-16 22:35:09
  • Python OpenCV对本地视频文件进行分帧保存的实例

    2021-09-15 23:03:18
  • 详解JavaScript匿名函数和闭包

    2024-04-19 10:07:12
  • 布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)

    2021-01-02 08:46:49
  • MySql nion与Limit查询介绍

    2024-01-23 15:53:52
  • asp之家 网络编程 m.aspxhome.com