📧 【高效联络,信息不落空】 📧
在这个信息爆炸的时代,作为企业的一员,我们如何从繁杂的邮件中迅速筛选出客户的心声、展会的新动向,同时又不遗漏每一份重要的咨询呢?秘诀就在我们的新策略里!
✨ 【自动收取,省时省力】
首先,我们要告别定时查收邮件的烦恼。新系统将自动收取邮件,确保你不错过任何一封重要邮件。
🚀 【智能分类,去芜存菁】
然后,邮件将经过智能筛选,自动分为“重要邮件”和“垃圾邮件”。初期,我们采用简单关键词过滤,未来将引入更高级的机器学习算法。
📢 【信息直达,快速响应】
重要邮件?直接转发到企业微信群!这样,团队成员可以迅速响应,提供所需帮助。
🔔 【及时通知,使命必达】
每当重要邮件到达,系统将及时通知相关同事,确保信息得到快速处理。对于邮件收取和信息转发,我们已经轻车熟路。还不熟悉的请看往期文章:
如何一键群发企业微信,钉钉消息。
但为了让新鲜邮件持续涌入,我们需要微调系统。每次收取邮件时,我们会记录时间戳,只获取最新的邮件。至于通知机制,那就更简单了:邮件一到,直接推送到相应的群组,有需要时,还可以通过@功能提醒具体同事。
不过,邮件分类可是个技术活。首个版本中,我们将使用简单关键词过滤,未来再引入更智能的机器学习技术。以下是整个程序工作的流程图。
代码编写
想象一下,如果你的系统能够记住查看最后一封邮件的时间,那每次收取邮件时,它只需要查找那个时间点之后的新邮件。这就好比有个超级智能的秘书,总是在记录和更新你的工作进度。酷吧?
保存这些时间数据有多种方法,你可以选择文本文件、数据库,甚至是电子表格。但在这个例子中,我们选择了一种更为轻便快捷的方式——使用pkl文件。
🖥 【Python小助手:pkl文件的妙用】
pkl文件是Python的一种序列化数据保存格式。这意味着你代码里的列表、字典等数据结构,都可以直接被保存和读取。就像是把你的数据打包,需要的时候再解开,超级方便!
import pickle
from datetime import datetime, timedeltatry:# 从pkl文件中读取数据with open('last_email.pkl', 'rb') as file:last_email = pickle.load(file)
except:# 如果文件不存在,则初始化为当前时间前1天rece_time = datetime.today() - timedelta(days=1),last_email = {'email_from': 'example1@163.com','receive_time': rece_time.strftime('%Y-%m-%d %H:%M:%S'),'email_subject': 'None'}# 保存pkl文件
with open('data.pkl', 'wb') as file:pickle.dump(last_email, file)
对邮件的接收时间字符串处理为datetime类型,时间转换函数parse_mail_time()的代码。
def parse_mail_time(mail_datetime):# 定义邮件时间解析函数# 定义GMT时间格式GMT_FORMAT = "%a, %d %b %Y %H:%M:%S"# 查找'+0'的位置index = mail_datetime.find(' +0')# 如果存在时区信息,则去掉时区信息,若公司有不同时区的邮件,需要优化代码if index > 0:mail_datetime = mail_datetime[:index]try:# 将字符串解析为datetime对象mail_datetime = datetime.strptime(mail_datetime, GMT_FORMAT)return mail_datetimeexcept:# 如果解析出错,则打印错误信息并返回Noneprint("邮件时间格式解析错误:" + mail_datetime)return None
现在来编写邮件内容处理函数parse_email_server,倒序遍历邮件,若邮件的接收时间小于上一次邮件的时间,则结束循环。如不是则为新邮件,进入send_content_to_wx(msg)函数,提取邮件信息并按主题发送到不同的企业微信群,代码如下。
def parse_email_server(email_server, last_email):def get_email_content(email_server, index):# 倒序遍历邮件,这样取到的第一封就是最新邮件resp, lines, octets = email_server.retr(index)# lines存储了邮件的原始文本的每一行,# 邮件的原始文本:# lines是邮件内容,列表形式使用join拼成一个byte变量msg_content = b'\r\n'.join(lines).decode('utf-8')# 解析邮件:return Parser().parsestr(msg_content)resp, mails, octets = email_server.list()num, total_size = email_server.stat()print("邮件数量为:" + str(num))# mails存储了邮件编号列表,index = len(mails)# 上一次邮件接收时间last_receive_time = datetime.strptime(last_email.get('receive_time'),"%Y-%m-%d %H:%M:%S")# 倒序遍历邮件for i in range(index, 0, -1):msg = get_email_content(email_server, i)# 邮件时间,解析时间格式mail_datetime = parse_mail_time(msg.get("date"))if mail_datetime:if mail_datetime <= last_receive_time:# 旧邮件不处理,后面的邮件都是旧邮件,可以跳出循环break# 解析邮件具体内容,并发送到企业微信send_content_to_wx(msg)if i == index:# 更新最新一封邮件msg = get_email_content(email_server, index)from_addr = parseaddr(msg.get('From'))[1]subject = decode_header(msg.get('Subject'))subject = subject[0][0].decode(subject[0][1]) if subject[0][1] else subject[0][0]mail_datetime = parse_mail_time(msg.get("date"))last_email = {'email_from': from_addr,'receive_time': mail_datetime.strftime("%Y-%m-%d %H:%M:%S"),'email_subject': subject}# 保存到文件里面with open('last_email.pkl', 'wb') as file:pickle.dump(last_email, file)# 别忘记退出email_server.quit()def send_content_to_wx(msg):from_addr = parseaddr(msg.get('From'))[1]to_addr = parseaddr(msg.get('To'))[1]subject = decode_header(msg.get('Subject'))subject = subject[0][0].decode(subject[0][1]) if subject[0][1] else subject[0][0]# 获取邮件的正文for part in msg.walk():if part.get_content_type() == 'text/plain' or part.get_content_type() == 'text/html':body = part.get_payload(decode=True).decode(part.get_content_charset() or 'utf-8')email_content = f"""发送方:{from_addr}接收方:{to_addr}主题:{subject}正文:{body}"""# 邮件主题关键词分类TARGET = [("展会", "展览", "广交会"),("咨询", "销售", "商品"),("简历", "招聘", "求职")]# 判断邮件类型,发送到对应群# 是否为市场部for key in TARGET[0]:if key in subject:send_msg_to_weixin(email_content,url=MARKET_ROBOT_URL)# 发送后可以返回return# 是否为销售部for key in TARGET[0]:if key in subject:send_msg_to_weixin(email_content, url=SALE_ROBOT_URL)return# 是否为人事部for key in TARGET[0]:if key in subject:send_msg_to_weixin(email_content, url=HR_ROBOT_URL)return# 如果都不是,默认发到行政部send_msg_to_weixin(email_content)
程序运行后,效果下图所示,左边是企业微信群的消息,右边是邮箱收到的消息。
定时任务
🕓 【Windows定时任务:让电脑自动工作】
想不想让你的电脑在特定时间自动做一些事情?比如,运行你的Python脚本?在Windows上,你可以通过“任务计划程序”来实现这个魔法。
1️⃣ 【开启任务计划程序】
在开始菜单里搜一搜“任务计划程序”,然后打开它。
点击“创建基本任务…”,给你的任务起个名字,再描述一下它是干什么的。
2️⃣ 【设置触发器】
决定什么时候开始这个任务:是电脑启动时,还是按照你的时间表?
设置好触发器,让电脑知道何时行动。
3️⃣ 【指定操作】
选择“启动程序”。
告诉电脑Python解释器在哪里,还有你的脚本在哪里。
把这些路径作为参数填进去。
4️⃣ 【额外设置】
如果需要,你可以设置一些条件,比如只有电脑空闲时才运行任务。
还可以设置任务结束的方式,比如任务可以运行一次就结束,或者重复进行。
5️⃣ 【完成创建】
检查一下任务摘要,确认一切设置正确。
点击“完成”,你的定时任务就设置好了!
6️⃣ 【管理任务】
如果你想立即运行任务,或者以后需要修改任务,可以在任务列表中找到它,进行相应的操作。
📅 【Linux定时任务:让终端自动执行】
在Linux上,设置定时任务就更简单了。只需要打开终端,输入下面的命令:
crontab -e
然后,在你的crontab文件里添加一个新的定时任务。每行代表一个任务,格式如下:
*/10 * * * * /usr/bin/python3 /path/to/your/script.py
这行的意思是,每10分钟执行一次你的脚本。每个星号代表一个时间单位:分钟、小时、日期、月份、星期几。设置好后,保存并退出,你的任务就会按计划执行了。