小编目前还是一个在惨遭社会践踏的低级码农,随随便便的一个高难度技术问题,好像就成了压死我的最初那根稻草,好在这个时代还是有太多的人有着贡献和开源的精力,真的是实属不易的一种情怀。
感激有很多开源的好我的项目可能让像我这种的小菜鸟搬搬砖,混口饭吃,开源不易,感激那些奋斗在一线的开源大佬,致以最深的敬意。
明天给大家分享的是邮件群发的代码程序,非常适合业务员或者是一些常常和邮件打交道的办公人员。之所以有后面的那席话就是因为这程序就是在码云下面搜寻的,而后本人简略的改了下应用的。附开源地址:
https://gitee.com/IT_CTO/mass...
我只是在原有的根底上简略的解决了下,顺便做了些正文,不便大家的查看,代码如下:
# -*- coding: utf-8 -*-from email import encodersimport osimport tracebackfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encodersimport time# 中文解决def _format_addr(s): #.parseaddr(address)是模块中专门用来解析邮件地址的函数,返回一个tuple name, addr = parseaddr(s) #元组拆包 name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr)) #formataddr(pair)和parseaddr函数相同,formataddr函数是构建邮件地址的,传入一个tuple,返回strdef send_email(to_addr_in, filepath_in, userId, user): # 邮件发送和接管人配置 i = 0 from_addr = '' password = '' # 这是你邮箱的第三方受权客户端明码,并非你的登录明码 for user,pwd in user.items(): if i == userId: from_addr = user.replace('\r', '').replace('\n', '').replace('\t', '') password = pwd.replace('\r', '').replace('\n', '').replace('\t', '') break i+=1 smtp_server = 'smtp.163.com' to_addr = to_addr_in to_addrs = to_addr.split(',') msg = MIMEMultipart() msg['From'] = _format_addr('群发测试题目 <%s>' % from_addr) # 显示的发件人 msg['To'] = ",".join(to_addrs) # 多个显示的收件人 msg['Subject'] = Header('群发邮件测试--形容', 'utf-8').encode() # 显示的邮件题目 # 须要传入的门路 # filepath = r'D:\test' filepath = filepath_in r = os.path.exists(filepath) if r is False: msg.attach(MIMEText('Hello world,邮件测试!!!\r\n', 'plain', 'utf-8')) else: # 邮件注释是MIMEText: msg.attach(MIMEText('这里是邮件的注释内容!!!\n请查收附件... \n', 'plain', 'utf-8')) # 遍历指定目录,显示目录下的所有文件名 pathDir = os.listdir(filepath) for allDir in pathDir: child = os.path.join(filepath, allDir) #print(child.encode('utf-8').decode('gbk')) # .decode('gbk')是解决中文显示乱码问题 # 增加附件就是加上一个MIMEBase,从本地读取一个文件 with open(child, 'rb') as f: # 设置附件的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()) # 用Base64编码: 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() return 1 except Exception: return -1def read_user(user): f = open("mail_user.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()办法 i=1 username = '' pwd = '' while line: line = line.replace('\r', '').replace('\n', '').replace('\t', '') if i%2 != 0: username = line #print("username=",username) else: pwd = line #print("pwd=", pwd) user[username] = pwd line = f.readline() i+=1 f.close() #print("\n") #print(user)if __name__ == '__main__': # 账号密码寄存 user = {} read_user(user) i = 0 userId = 0 f = open("to_user.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()办法 while line: i+=1 line = line.replace('\r','').replace('\n','').replace('\t','') if send_email(line, 'test',userId, user) == -1: print(i) break userId += 1 #应用哪个用户ID发送邮件。 if userId >= len(user): userId = 0 time.sleep(3) #不提早的话,发送100以上账号就会被停用。 line = f.readline() f.close()
在Pycharm中右击运行email1.py,能够看到如下图的操作,即代表程序运行胜利。
mail_user.txt 放的是你邮箱的STMP受权账号,to_user,放的是你想要发送的邮件地址。
以上就是明天给大家分享的内容,邮件群发程序获取获取请在后盾回复:邮件群发。