email邮件群发
清晨迷雾 <[email protected]> reply-to [email protected] to python-cn`CPyUG`华蟒用户组 <[email protected]> date Wed, Jun 3, 2009 at 11:00 subject [CPyUG:88113] email邮件群发源码贴出,共同改进
代码
python Email 邮件群发源码,参考了网上的一些实现.希望获得大家的帮助共同改进,如果效率提高比较大的话可以成立开源项目
1 # -*- coding:utf-8 -*-
2 '''
3 Created on 2009-5-31
4
5 @author: yuminglong
6 设计已经考虑了多线程,所以很多地方为以后的转变留下了伏笔
7
8 '''
9 import smtplib, sys, time
10 from datetime import datetime
11 from email.MIMEBase import MIMEBase
12 from email.MIMEText import MIMEText
13 from email.MIMEImage import MIMEImage
14 from email.MIMEMultipart import MIMEMultipart
15
16 class EmailMachine():
17
18 def __init__(self, smtp_server, smtp_user, smtp_pass):
19 #设置服务器信息
20 self.serverInfo= {}
21 self.serverInfo['server'] = smtp_server
22 self.serverInfo['user'] = smtp_user
23 self.serverInfo['password'] = smtp_pass
24 #初始化email信息
25 self.EmailInfo = {}
26 #eamil来源地址
27 def setEmailFrom(self, fromaddr):
28 self.EmailInfo['from'] = fromaddr
29
30 def getEmailFrom(self):
31 return self.EmailInfo['from']
32 #email目的地址
33 def setEmailTo(self, toaddr):
34 self.EmailInfo['to'] = toaddr
35
36 def getEmailTo(self):
37 return self.EmailInfo['to']
38 #主题
39 def setSubject(self, subject):
40 self.EmailInfo['subject'] = subject
41
42 def getSubject(self):
43 return self.EmailInfo['subject']
44 #设置内容为文本
45 def setText(self, text):
46 self.EmailInfo['body'] = text
47 self.EmailInfo['isHtml'] = False
48 #设置内容为html
49 def setHtml(self,html):
50 self.EmailInfo['body'] = html
51 self.EmailInfo['isHtml'] = True
52 #获得发送的内容
53 def getBody(self):
54 return self.EmailInfo['body']
55 #获取发送内容的格式
56 def isHtml(self):
57 return self.EmailInfo['isHtml']
58 #建立服务器连接,返回连接
59 def connect(self, smtp_server= '', smtp_user = '', smtp_pass =''):
60 if smtp_server == '': smtp_server = self.serverInfo['server']
61 if smtp_user == '': smtp_user = self.serverInfo['user']
62 if smtp_pass == '': smtp_pass = self.serverInfo['password']
63
64 if not (smtp_server and smtp_user and smtp_pass):
65 sys.stderr.write('登录验证信息不完整,终止运行')
66 sys.exit(0)
67
68 self.server = smtplib.SMTP(smtp_server)
69 self.server.set_debuglevel(1)
70 try:
71 self.server.login(smtp_user, smtp_pass)
72 except:
73 sys.stderr.write("SMTP服务器登录失败,请检查用户名和密码!")
74 sys.exit(0)
75 return self.server
76 #关闭邮件服务连接
77 def close(self):
78 self.server.quit()
79 #记录日志
80 def save_log(self, address, issuccess):
81 if issuccess:
82 file = open('success.txt','a')
83 else:
84 file = open('fail.txt','a')
85 file.write('%s' % address)
86 #获取发送Email的地址
87 def getAddrs(self, filename ='address.txt'):
88 file = open(filename)
89 if file:
90 return file.readlines()
91 #获得sendmail的msg的字符串
92 def getMsg(self, subject, body, isHtml = False):
93 #设定root信息
94 msgRoot = MIMEMultipart('related')
95 msgRoot['Subject'] = subject
96 msgRoot['From'] = self.getEmailFrom()
97 msgRoot['To'] = self.getEmailTo()
98 msgRoot.preamble = 'This is a multi-part message in MIME format.'
99
100 msgAlternative = MIMEMultipart('alternative')
101 msgRoot.attach(msgAlternative)
102 if isHtml:
103 msgText = MIMEText(body,'html','utf-8')
104 else:
105 msgText = MIMEText(body, 'plain', 'utf-8')
106 msgAlternative.attach(msgText)
107 return msgRoot.as_string()
108 #发送邮件
109 def sendMail(self,subject='', body='', isHtml=False):
110 if subject or body:
111 isHtml = self.isHtml()
112 if subject == '':
113 subject = self.getSubject()
114 if body == '':
115 body = self.getBody()
116 try:
117 if not self.server:
118 connect()
119 msg = self.getMsg(subject, body, isHtml);
120 self.server.sendmail(self.getEmailFrom(), self.getEmailTo(), msg)
121 self.save_log(self.getEmailTo(), True)
122 print "发送成功 : " +self.getEmailTo()
123 except:
124 self.save_log(self.getEmailTo(),False)
125 print "发送失败: " +self.getEmailTo()
126 #测试样例
127 def main(self):
128 self.connect()
129 self.setEmailFrom('[email protected]')
130 self.setSubject("测试邮件python")
131 self.setText("""
132 这是一封群发邮件,测试使用,请勿回复!
133 """)
134 addrs = self.getAddrs()
135 for addr in addrs:
136 sys.stdout.write('正在发送到 %s ...\n' % addr)
137 self.setEmailTo(addr)
138 self.sendMail()
139 time.sleep(10)
140 self.close()
141
142 if __name__ == '__main__':
143 mail = EmailMachine('smtp.yeah.net','example','*********')
144 mail.main()
反馈
创建 by -- ZoomQuiet [2009-06-03 14:07:12]