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号码发送邮件。手机垃圾短信、垃圾邮件,大致就是这个道理吧。