当前位置: 首页 > 后端技术 > Python

用py实现群发功能——办公必备工具

时间:2023-03-26 15:13:04 Python

小编还是个饱受社会蹂躏的低级码农。随手一个困难的技术问题似乎是最后一个压垮我的Straw,幸好在这个时代,还有太多人有奉献精神和开源精神,这真的不是一种轻松的感觉。感谢有很多好的开源项目,让我这样的菜鸟可以搬砖谋生。开源并不容易。感谢那些奋战在一线的开源大佬们,表达我最深切的敬意。今天给大家分享的是群发邮件的代码程序,非常适合经常和邮件打交道的业务员或者上班族。前面的话是因为这个程序是在码云上搜索到的,然后我就简单的改了一下就用了。附上开源地址:https://gitee.com/IT_CTO/mass...我只是在原来的基础上做了处理,顺便做了一些笔记,方便大家参考。代码如下:#-*-coding:utf-8-*-fromemailimportencodersimportosimporttracebackfromemail.headerimportHeaderfromemail.mime.textimportMIMETextfromemail.utilsimportparseaddr,formataddrimportsmtplibfromemail.mime.multipartimportMIMEMultipartfromemail.mime.baseimportemailsimportMIMEfromtime#中文处理def_format_addr(s):#.parseaddr(address)是模块中专门用来解析email地址的函数,返回一个元组名,addr=parseaddr(s)#tupleunpackingname,addr=parseaddr(s)returnformataddr((Header(name,'utf-8').encode(),addr))#formataddr(pair)与parseaddr函数相反,formataddr函数是为了构造邮件地址,传入元组,返回strdefsend_email(to_addr_in,filepath_in,userId,user):#邮件发件人和收件人配置i=0from_addr=''password=''#这是第三方授权客户端您邮箱的密码,不是您的用户登录密码,pwdinuser.items():如果我==userId:from_addr=user.replace('\r','').replace('\n','').replace('\t','')password=pwd.replace('\r','').replace('\n','').replace('\t','')breaki+=1smtp_server='smtp.163.com'to_addr=to_addr_into_addrs=to_addr.split(',')msg??=MIMEMultipart()msg??['From']=_format_addr('Masstesttitle<%s>'%from_addr)#显示的发件人msg['To']=",".join(to_addrs)#显示多个收件人msg['Subject']=Header('Massmailingtest--description','utf-8').encode()#显示邮件头#需要的路径传入#filepath=r'D:\test'filepath=filepath_inr=os.path.exists(filepath)如果r为False:msg.attach(MIMEText('Helloworld,mailtest!!!\r\n','plain','utf-8'))else:#邮件正文为MIMEText:msg.attach(MIMEText('这里是邮件正文内容!!!\n请查看附件...\n','plain','utf-8'))#遍历指定目录,显示目录下所有文件名pathDir=os.listdir(filepath)forallDirinpathDir:child=os.path.join(filepath,allDir)#print(child.encode('utf-8').decode('gbk'))#.decode('gbk')是解决中文显示乱码的问题#加附件就是加一个MIMEBase,从本地读取一个文件withopen(child,'rb')asf:#设置附件的MIME和文件名,这里是txt类型:mime=MIMEBase('file','xls',filename=allDir)#添加必要的头信息:mime.add_header('Content-Disposition','attachment',filename=allDir)mime.add_header('Content-ID','<0>')mime.add_header('X-Attachment-Id','0')#读取附件内容:mime.set_payload(f.read())#EncodewithBase64:encoders.encode_base64(mime)#添加到MIMEMultipart:msg.attach(mime)try:server=smtplib.SMTP(smtp_server,25)#server.starttls()server.set_debuglevel(1)#用于显示邮件发送的执行步骤server.login(from_addr,password)#print(to_addrs)server.sendmail(from_addr,to_addrs,msg.as_string())server.quit()返回1除了异常:返回-1defread_user(user):f=open("mail_user.txt")#返回一个文件对象line=f.readline()#调用文件的readline()方法i=1username=''pwd=''whileline:line=line.replace('\r','').replace('\n','').replace('\t','')如果i%2!=0:username=line#print("username=",username)else:pwd=line#print("pwd=",pwd)user[用户名]=pwdline=f.readline()i+=1f.close()#print("\n")#print(user)if__name__=='__main__':#账户密码存储user={}read_user(user)i=0userId=0f=open("to_user.txt")#返回一个文件对象line=f.readline()#调用readline()ofthefileMethodwhileline:i+=1line=line.replace('\r','').replace('\n','').replace('\t','')ifsend_email(line,'test',userId,user)==-1:print(i)breakuserId+=1#使用哪个用户ID发送邮件ifuserId>=len(user):userId=0time.sleep(3)#如果没有延迟,发送超过100条消息就会被停用。line=f.readline()f.close()在Pycharm中右键运行email1.py,可以看到运行如下图,说明程序运行成功。mail_user.txt放你邮箱的STMP授权账号,to_user放你要发的邮件地址。以上就是今天和大家分享的内容。获取邮件群发程序,请在后台回复:邮件群发。