python 邮件发送,,环境:python2


环境:python2.7

 1 #coding:utf-8 2 from __future__ import unicode_literals 3 __author__ = ‘crista‘ 4  5 import smtplib 6 from email.mime.text import MIMEText 7 from email.mime.application import MIMEApplication 8 from email.mime.multipart import MIMEMultipart 9 from email.header import Header10 import ConfigParser11 12 #message :正文内容,数据类型为string13 #files:所添加附件绝对路径加名字.文件类型,数据类型为list14 15 def send_file(msg,files):16      ##添加附件部分17         for f in files :18             attr = MIMEApplication(open(f,‘rb‘).read())19             ##输入中文,会产生获取的文件名字乱码问题20             filename=f.split(‘\\‘)21             num=len(filename)-122             attr.add_header(‘Content-Disposition‘, ‘attachment‘, filename=filename[num])23             msg.attach(attr)24 25 ##群发邮件加附件函数26 def send_email(title,message,files,reciever):27     ##我用的是读取配置文件变量模块(ConfigParser),可直接赋值更方便28     cf =ConfigParser.ConfigParser() 29     cf.read("config.ini")30     sender=cf.get(‘smtp‘,"sender")    ##此填入发件人31     mail_host=cf.get(‘smtp‘,‘mail_host‘)  ##邮箱主机 如:SMTP.163.com32     mail_port=cf.get(‘smtp‘,‘mail_port‘)  ##端口:一般为2533     send_pass=cf.get(‘smtp‘,‘send_pass‘) ##邮箱授权码34 35 36     for i in reciever:37         print i38         msg = MIMEMultipart()39         msg[‘From‘]=sender40         msg[‘To‘] =i41         msg[‘Subject‘]=Header(title,‘utf-8‘)42         msg.attach(MIMEText(message, ‘plain‘, ‘utf-8‘))43         try:44             if files != []:45                 send_file(msg,files)       ##调用上面send_file()46         except:47             pass48     try:49         server = smtplib.SMTP()50         server.connect(mail_host,mail_port)51         server.login(sender, send_pass)52         server.sendmail(sender,i, msg.as_string())53         print "邮件发送成功!!"54         server.quit()55     except smtplib.SMTPException:56      print "Error:无法发送邮件"57 58 59 60 if __name__ == "__main__":61     ##可添加多个收件邮箱和附件(但附件必须要带文件类型如 .jpg)    62     send_email("test","server failed",[],["邮箱账号1","邮箱账号2"])

技术分享图片

可能出现的报错:

smtplib 模块
1、smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘)
2、smtplib.SMTPAuthenticationError: (535, b‘Error: authentication failed‘)
这两个错误是你的密码用的不是授权码导致
3、554 DT:SPM 163 smtp5
这属于网易邮箱的一个退回检测机制导致,貌似跟发送比较频繁有关,被系统判定为病毒或垃圾邮件

稍微完善版:

import smtplibfrom email.mime.text import MIMETextfrom email.mime.application import MIMEApplicationfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerimport ConfigParser#message :正文内容,数据类型为string#files:所添加附件绝对路径加名字.文件类型,数据类型为listclass email:    def __init__(self):        cf =ConfigParser.ConfigParser()        cf.read("config.ini")        self.sender=cf.get(‘smtp‘,"sender")        self.mail_host=cf.get(‘smtp‘,‘mail_host‘)        self.mail_port=cf.get(‘smtp‘,‘mail_port‘)        self.send_pass=cf.get(‘smtp‘,‘send_pass‘)    def send_file(self,files):     ##添加附件部分        for f in files :            attr = MIMEApplication(open(f,‘rb‘).read())            ##输入中文,会产生获取的文件名字乱码问题            filename=f.split(‘\\‘)            num=len(filename)-1            attr.add_header(‘Content-Disposition‘, ‘attachment‘, filename=filename[num])            msg.attach(attr)##群发邮件加附件函数    def send_email(self,title,message,files,reciever):        for i in reciever:            self.msg = MIMEMultipart()            self.msg[‘From‘]=self.sender            self.msg[‘To‘] =i            self.msg[‘Subject‘]=Header(title,‘utf-8‘)            self.msg.attach(MIMEText(message, ‘plain‘, ‘utf-8‘))        try:            if files != []:                self.send_file(files)        except:            pass        try:            server = smtplib.SMTP()            server.connect(self.mail_host,self.mail_port)            server.login(self.sender, self.send_pass)            server.sendmail(self.sender,i, self.msg.as_string())            print "邮件发送成功!!"            server.quit()        except smtplib.SMTPException:        print "Error:无法发送邮件"if __name__ == "__main__":    Email=email()    Email.send_email("test","server failed",[],["收件邮箱1"])

python 邮件发送

评论关闭