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的一封邮件 ” % sendemail.outbox)
# 发件人姓名与发件箱地址
msg[“to”] = sendemail._format_address(“管理员 ” % 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的一封邮件 ” % sendemail.outbox)
# 发件人姓名与发件箱地址
msg[“to”] = sendemail._format_address(“管理员 ” % 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’, ”)
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邮件发送功能的具体实现代码,希望对大家的学习有所帮助。

Posted in 未分类

发表评论