使用Python发送电子邮件

python中的smtplib模块可以使用SMTP协议发送电子邮件,

只要设置好邮件发送方,收件人,主题(可以为空)和消息(可以为空),就可以把消息发送到指定邮箱。

经过测试,比较方便。

测试代码:

# MailClient class 

from smtplib import SMTP
from time import *

class MailClient:
    def __init__(self):
        self.SMTPServer = 'smtp.qq.com' #send server
        self.SvrSuffix  = 'qq.com'
        self.user = 'username' #user name
        pnum = '12345678' #password

        self.sendSvr = SMTP(self.SMTPServer)
        self.log = self.sendSvr.login(self.user,pnum)#login the server        
        #print 'connect to Mail Server successfully.'
        
    def SendMail(self,des, subj=None,info=None,PrintResult=False):
        '''
        mail info to des through default server
        des: user@server.com
        subj:mail subject
        info:list or tuple of information to send
        PrintResult: whether print the send result
        '''
        SrcInfo = 'From: '+self.user+'@'+self.SvrSuffix
        To = 'To: '+str(des)
        Sub = 'Subject: '+str(subj)
        Header = [SrcInfo,To,Sub] #mail header
        Msg = '\r\n\r\n'.join(['\r\n'.join(Header),'\r\n'.join(info)])
        self.errs = self.sendSvr.sendmail(self.user+'@'+self.SvrSuffix,des,Msg)
        #self.sendSvr.quit()
        if PrintResult==False:
            return
        if(len(self.errs)!=0):
            print "error info : "
            for e in self.errs:
                print e," ",self.errs[e]
                return -1
        else:
            print "send to ",des,":"
            for e in info:
                print "  ",e
            print "successfully."
            return 0

    def __del__(self):
        #print 'deconstructor'
        self.sendSvr.quit()
        #print 'MailClient disconnected.'

if __name__=='__main__':
    b = time()
    mc = MailClient()
    s = 'null subject 2'
    Text = ('Hello from your friend ','Best wishes.')
    e = time()
    print 'time 1 ',e-b
    b=e
    mc.SendMail('xxx@qq.com',s,Text,True)
    e = time()
    print 'time 2 ',e-b
    b=e    
    mc.SendMail('yyy@qq.com',s,Text*2,True)
    e = time()
    del mc
    print 'time cost ',e-b,'s.'


使用时先创建一个MailClient对象,然后调用该对象的SendMail方法(参数有:接收方,主题,消息列表,打印发送结果开关)。

发送给不同的地址时只需要多次调用该方法。

【其实一次发送过程,接收邮件列表中接收地址也可以是多个,但是在测试时有一些问题,列表比较少(只有几个)时没问题,几十个的时候服务器就拒绝发送了。】

下面是一个测试代码:

from time import *

begin = time()
##################################
revr=[]##reveiveer list
revr.append('666666666@qq.com') #just for test 
start = 666666667
num = 10
while num>0:
    revr.append(str(start)+'@qq.com')
    start = start+1
    num = num-1
#for e in revr:
#    print e
from MailClient import *
mc = MailClient()

errmail=[]
for user in revr:
    s = 'null subject'
    Text = ('Hello from your friend ','Best wishes.')
    try:
        mc.SendMail(user,s,Text)
    except:
        #print "exception at ",user
        errmail.append(user)
del mc

print "Failed list(",len(errmail),"):"
for e in errmail:
    print e

end = time()

print "time cost: ",(end-begin)," s."
#sleep(10)

修改发送邮件个数,就可以给某个区段的所有QQ号码发送邮件。手机垃圾短信、垃圾邮件,大致就是这个道理吧。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值