首页 > 其他分享 >利用py实现邮件群发功能——办公必备利器

利用py实现邮件群发功能——办公必备利器

时间:2022-12-28 17:37:40浏览次数:66  
标签:addr 必备 py replace mime user line email 群发


作为一个不负责任的公号运营者,最近一直忙着搬砖,也没有太多时间来更新公众号,小编目前还是一个在惨遭社会蹂躏的低级码农,随随便便的一个高难度技术问题,仿佛就成了压死我的最后那根稻草,好在这个时代还是有太多的人有着奉献和开源的精神,真的是实属不易的一种情怀。


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


今天给大家分享的是邮件群发的代码程序,非常适合业务员或者是一些经常和邮件打交道的办公人员。之所以有前面的那席话就是因为这程序就是在码云上面搜索的,然后自己简单的改了下使用的。附开源地址:

​https://gitee.com/IT_CTO/mass_mailing_assistant​


我只是在原有的基础上简单的处理了下,顺便做了些注释,方便大家的查看,代码如下:


# -*- coding: utf-8 -*-
from email import encoders
import os
import traceback
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import 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,返回str




def 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 -1








def 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,可以看到如下图的操作,即代表程序运行成功。


利用py实现邮件群发功能——办公必备利器_邮件发送


mail_user.txt 放的是你邮箱的STMP授权账号,to_user,放的是你想要发送的邮件地址。





标签:addr,必备,py,replace,mime,user,line,email,群发
From: https://blog.51cto.com/u_15924937/5975825

相关文章

  • 利用py爬取生日的那天哈勃望远镜拍到了什么?
    于1990年4月发射升空的哈勃太空望远镜迎来了升空30周年纪念。为此,美国宇航局(NASA)近日在其官网上发起一项活动——“哈勃望远镜在你生日那天看到了什么?”NASA邀请大家搜索自......
  • 【Python 库】bs4的使用
    和lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据。BeautifulSoup,是一个第三方的库,所以使用之前需要安装,安装方法,输入cmd,调出......
  • python运行环境以及编辑器介绍
    Hello呀,EveryOne,在上次更新了第一篇的公众号推文后,小编也如约的和大家玩起了消失,但是工作还是要进行的,这不又乖乖的回来码字了,废话不再多说,今个带大家来敲下python编写的第......
  • Python爬取意林杂志所有期刊文章
    可能很多人对这个意林杂志比较陌生,但是对于小编来说,那可是满满的回忆。记得我们上中学那时候读过的意林,那可是一本接着一本,其中有很多令人感动的故事,一直被温暖,被治愈。接下......
  • python爬取公众号链接里面的图片
    话不多说,步入今天文章的分享内容,今天给大家带来的是~~爬取微信公众号文章里面的图片。爬虫代码:#coding:utf-8#__auth__="maiz"#__date__="2021/3/27"importosimport......
  • Python中使用xpath一键获取各国国旗
    国旗是一个国家的主权意识不断增强后必然的产物,国旗是国家的一种标志性旗帜,是国家的象征。代表着一个国家的主权和民族的尊严。每个国家的国旗都由特有的颜色和图案构成,这些......
  • py爬取当当网前500畅销书,送给书荒的你
    最近和朋友聊天,讨论到读书的问题,说是读书到底有什么用?我半开玩笑的给他讲了一个故事。男孩将女孩送到宿舍楼下,看着一路上两人始终保持着的那一步的距离,男孩终于鼓起勇气,说道......
  • 使用py爬取复产后的鹅厂都在招聘哪些职位
    hello呀,各位小伙伴,今天是五月的第二天,不知道大家是在家里wifi,空调,西瓜呢,还是在拥挤的景区看着人山人海!反正小编是穿着大裤衩,坐在马路边的沙滩上,啜一口摆在身边的饮料,享受......
  • Python一键查询 ICP 备案详情
    做搜索引擎优化的都时长面临一个问题,就是网站备案到底对seo是否有影响呢,今天将为大家仔细分析网站备案,到底对SEO有没有影响?首先说下网站备案的目的、是为了防止在网上从事......
  • 使用Python的asyncio模块异步下载整站壁纸
    这篇文章主要给大家介绍关于Python中asyncio模块的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学......