小编目前还是一个在惨遭社会践踏的低级码农,随随便便的一个高难度技术问题,好像就成了压死我的最初那根稻草,好在这个时代还是有太多的人有着贡献和开源的精力,真的是实属不易的一种情怀。

感激有很多开源的好我的项目可能让像我这种的小菜鸟搬搬砖,混口饭吃,开源不易,感激那些奋斗在一线的开源大佬,致以最深的敬意。

明天给大家分享的是邮件群发的代码程序,非常适合业务员或者是一些常常和邮件打交道的办公人员。之所以有后面的那席话就是因为这程序就是在码云下面搜寻的,而后本人简略的改了下应用的。附开源地址:
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,放的是你想要发送的邮件地址。

以上就是明天给大家分享的内容,邮件群发程序获取获取请在后盾回复:邮件群发。