python发邮件教程_python 邮件发送

环境: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 Header

10 import ConfigParser

11

12 #message :正文内容,数据类型为string

13 #files:所添加附件绝对路径加名字.文件类型,数据类型为list

14

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)-1

22 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.com

32 mail_port=cf.get('smtp','mail_port') ##端口:一般为25

33 send_pass=cf.get('smtp','send_pass') ##邮箱授权码

34

35

36 for i in reciever:

37 print i

38 msg = MIMEMultipart()

39 msg['From']=sender

40 msg['To'] =i

41 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 pass

48 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 smtplib

from email.mime.text import MIMEText

from email.mime.application import MIMEApplication

from email.mime.multipart import MIMEMultipart

from email.header import Header

import ConfigParser

#message :正文内容,数据类型为string

#files:所添加附件绝对路径加名字.文件类型,数据类型为list

class 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"])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值