TableOfContents

Include(ZPyUGnav)

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 ''):
  61        if smtp_server == '': smtp_server = self.serverInfo['server']
  62        if smtp_user == '': smtp_user = self.serverInfo['user']
  63        if smtp_pass == '': smtp_pass = self.serverInfo['password']
  64 
  65        if not (smtp_server and smtp_user and smtp_pass):
  66            sys.stderr.write('登录验证信息不完整,终止运行')
  67            sys.exit(0)
  68 
  69        self.server = smtplib.SMTP(smtp_server)
  70        self.server.set_debuglevel(1)
  71        try:
  72            self.server.login(smtp_user, smtp_pass)
  73        except:
  74            sys.stderr.write("SMTP服务器登录失败,请检查用户名和密码!")
  75            sys.exit(0)
  76        return self.server
  77    #关闭邮件服务连接
  78    def close(self):
  79        self.server.quit()
  80    #记录日志
  81    def save_log(self, address, issuccess):
  82        if issuccess:
  83            file = open('success.txt','a')
  84        else:
  85            file = open('fail.txt','a')
  86        file.write('%s' % address)
  87    #获取发送Email的地址
  88    def getAddrs(self, filename ='address.txt'):
  89        file = open(filename)
  90        if file:
  91            return file.readlines()
  92    #获得sendmail的msg的字符串
  93    def getMsg(self, subject, body, isHtml = False):
  94        #设定root信息
  95        msgRoot = MIMEMultipart('related')
  96        msgRoot['Subject'] = subject
  97        msgRoot['From'] =  self.getEmailFrom()
  98        msgRoot['To'] = self.getEmailTo()
  99        msgRoot.preamble = 'This is a multi-part message in MIME
 100 format.'
 101 
 102        msgAlternative = MIMEMultipart('alternative')
 103        msgRoot.attach(msgAlternative)
 104        if isHtml:
 105            msgText = MIMEText(body,'html','utf-8')
 106        else:
 107            msgText = MIMEText(body, 'plain', 'utf-8')
 108        msgAlternative.attach(msgText)
 109        return msgRoot.as_string()
 110    #发送邮件
 111    def sendMail(self,subject='', body='', isHtml=False):
 112        if subject or body:
 113            isHtml = self.isHtml()
 114        if subject == '':
 115            subject = self.getSubject()
 116        if body == '':
 117            body = self.getBody()
 118        try:
 119            if not self.server:
 120               connect()
 121            msg = self.getMsg(subject, body, isHtml);
 122            self.server.sendmail(self.getEmailFrom(), self.getEmailTo
 123 (), msg)
 124            self.save_log(self.getEmailTo(), True)
 125            print "发送成功 : " +self.getEmailTo()
 126        except:
 127            self.save_log(self.getEmailTo(),False)
 128            print "发送失败: " +self.getEmailTo()
 129    #测试样例
 130    def main(self):
 131        self.connect()
 132        self.setEmailFrom('[email protected]')
 133        self.setSubject("测试邮件python")
 134        self.setText("""
 135                        这是一封群发邮件,测试使用,请勿回复!
 136                        """)
 137        addrs = self.getAddrs()
 138        for addr in addrs:
 139            sys.stdout.write('正在发送到  %s ...\n' % addr)
 140            self.setEmailTo(addr)
 141            self.sendMail()
 142            time.sleep(10)
 143        self.close()
 144 
 145 if __name__ == '__main__':
 146    mail = EmailMachine('smtp.yeah.net','example','*********')
 147    mail.main()


反馈

创建 by -- ZoomQuiet [DateTime(2009-06-03T14:07:12Z)]

PageComment2

[:/PageCommentData:PageCommentData]