📧 【高效联络,信息不落空】 📧
在这个信息爆炸的时代,作为企业的一员,我们如何从繁杂的邮件中迅速筛选出客户的心声、展会的新动向,同时又不遗漏每一份重要的咨询呢?秘诀就在我们的新策略里!
✨ 【自动收取,省时省力】
首先,我们要告别定时查收邮件的烦恼。新系统将自动收取邮件,确保你不错过任何一封重要邮件。
🚀 【智能分类,去芜存菁】
然后,邮件将经过智能筛选,自动分为“重要邮件”和“垃圾邮件”。初期,我们采用简单关键词过滤,未来将引入更高级的机器学习算法。
📢 【信息直达,快速响应】
重要邮件?直接转发到企业微信群!这样,团队成员可以迅速响应,提供所需帮助。
🔔 【及时通知,使命必达】
每当重要邮件到达,系统将及时通知相关同事,确保信息得到快速处理。对于邮件收取和信息转发,我们已经轻车熟路。还不熟悉的请看往期文章:
如何一键群发企业微信,钉钉消息。
但为了让新鲜邮件持续涌入,我们需要微调系统。每次收取邮件时,我们会记录时间戳,只获取最新的邮件。至于通知机制,那就更简单了:邮件一到,直接推送到相应的群组,有需要时,还可以通过@功能提醒具体同事。
不过,邮件分类可是个技术活。首个版本中,我们将使用简单关键词过滤,未来再引入更智能的机器学习技术。以下是整个程序工作的流程图。
代码编写
想象一下,如果你的系统能够记住查看最后一封邮件的时间,那每次收取邮件时,它只需要查找那个时间点之后的新邮件。这就好比有个超级智能的秘书,总是在记录和更新你的工作进度。酷吧?
保存这些时间数据有多种方法,你可以选择文本文件、数据库,甚至是电子表格。但在这个例子中,我们选择了一种更为轻便快捷的方式——使用pkl文件。
🖥 【Python小助手:pkl文件的妙用】
pkl文件是Python的一种序列化数据保存格式。这意味着你代码里的列表、字典等数据结构,都可以直接被保存和读取。就像是把你的数据打包,需要的时候再解开,超级方便!
import pickle
from datetime import datetime, timedelta
try:
# 从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_datetime
except:
# 如果解析出错,则打印错误信息并返回None
print("邮件时间格式解析错误:" + 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[1]:
if key in subject:
send_msg_to_weixin(email_content, url=SALE_ROBOT_URL)
return
# 是否为人事部
for key in TARGET[2]:
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分钟执行一次你的脚本。每个星号代表一个时间单位:分钟、小时、日期、月份、星期几。设置好后,保存并退出,你的任务就会按计划执行了。
获取完整代码,可以关注我的公众号,发送“自动转发邮件”