python实现SMTP邮件发送功能
一直想着给框架添加邮件发送功能、所以整理下python下邮件发送功能
首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTML及添加附件的邮件。之后是邮箱、像163、qq、新浪等邮箱默认关闭SMTP服务,需要我们手动打开,打开后通过发件人邮箱、授权密码通过发件人的SMTP服务发送
代码如下:
#!/usr/bin/envpython #-*-coding:utf_8-*- fromemail.mime.textimportMIMEText fromemail.mime.multipartimportMIMEMultipart fromemail.mime.multipartimportMIMEBase fromemailimportencoders fromemail.headerimportHeader fromemail.utilsimportparseaddr,formataddr importsmtplib classSendEmail: 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) returnformataddr((Header(name,"utf-8").encode(),address)) @classmethod defsend_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"邮件发送成功" exceptException,e: printstr(e) print"邮件发送失败" if__name__=='__main__': SendEmail.send_email_text()
这只是纯文本的内容、可以支持HTML格式的内容、修改内容如下:
msg=MIMEText("测试smtp邮件发送功能","plain","utf-8")
内容修改成HTML格式、“plain”改成“html”
最后是添加附件的邮件
代码如下:
@classmethod defsend_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")) withopen("E:\\work\\pythonproject\\CreateProject\\20160421140953.xml","rb")asf: #设置附件的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"邮件发送成功" exceptException,e: printstr(e) print"邮件发送失败"
以上就是python邮件发送功能的具体实现代码,希望对大家的学习有所帮助。