如何在Excel中基于单元格值自动发送电子邮件?
我们平常在做数据处理和管理时,常常需要从Excel中读取一些关键信息,然后发送电子邮件进行通知或者提醒。如果手动一个一个地发送电子邮件,将会非常耗费时间和精力。 所以,我们需要学习如何在Excel中基于单元格值,自动发送电子邮件。
1. 准备工作
在学习具体操作之前,我们首先需要进行一些必要的准备工作:
- 确认Excel中的单元格。我们需要查找 Excel 表格中的关键单元格,例如,当销售数量超过了某个值时,发送提醒邮件。
-
电子邮件账号准备就绪。使用代码发送邮件时,我们需要输入正确的发送人和接收人的邮件地址,输入 SMTP 账号和密码来进行验证登录。
-
准备vspython和安装所依赖的库。
使用Python代码操作Excel和发送邮件时,我们需要安装一些库。在此我们建议大家使用vspython作为Python运行环境。简单快速,内置大部分常用Python库。
接下来我们来学习如何使用所准备好的vspython和库来完成自动发送邮件的操作。
2. 发送邮件
Python中有一个非常优秀的库,名叫SMTP(Simple Mail Transfer Protocol),我们可以利用它来发送邮件。
下面是我们利用SMTP库发送邮件的代码(Python):
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 发件人和收件人
sender = 'test@qq.com'
receiver = 'test@163.com'
# 所使用的SMTP服务器
smtpServer = 'smtp.qq.com'
# 发送人账号密码(这里使用的是QQ邮箱账号)
username = 'test@qq.com'
password = 'testpassword'
# 邮件主题和正文
subject = 'Python SMTP 邮件测试'
content = '这是一封Python发出的测试邮件'
# 邮件内容,文字格式
message = MIMEText(content, 'plain', 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
# 发送邮件
smtp = smtplib.SMTP(smtpServer, 25)
smtp.login(username, password)
smtp.sendmail(sender, receiver, message.as_string())
smtp.quit()
上述代码通过SMTP发出一封简单的文本邮件,其中包括了发件人(Sender)、收件人(Receiver)、SMTP服务器、账号密码、邮件主题和正文等信息。我们可以根据自己的信息进行替换。
3. 操作Excel读取单元格
接下来,我们需要学习如何操作Excel文件,以读取单元格的信息。
在Python的Excel库中,openpyxl是非常常用的一种,我们来看看如何使用它读取单元格信息
from openpyxl import load_workbook
# 打开指定的Excel文件
wb = load_workbook(r'C:\test.xlsx')
# 选择Sheet1工作表
ws = wb['Sheet1']
# 读取单元格中的数据
cellContent = ws.cell(1, 1).value
上面的代码打开了 “test.xlsx “文件,然后选择了第一个Sheet工作表,最后读取了第一个单元格中的数据。当然,你也可以选择自己所需的Sheet工作表,并指定所需读取的单元格。
4. 将Excel中的数据和SMTP结合起来
最后,我们将SMTP和openpyxl库结合在一起,以实现基于单元格值自动发送邮件的功能。
为了达到这个目的,我们需要在Excel单元格中设置一些规则。例如,当销售数量超过了某个值时,程序将自动发送提醒邮件给相关人员。
假设我们的Excel文件如下所示:
产品名 | 销售数量 | 发送邮件 |
---|---|---|
产品A | 10 | 是 |
产品B | 20 | 否 |
产品C | 30 | 是 |
产品D | 40 | 是 |
想要自动发送邮件的行,在 “发送邮件” 列中的单元格填写 “是”;不需要发送邮件的行,则填写 “否”。
现在,我们来看看如何实现自动发送邮件的功能。
import smtplib
from openpyxl import load_workbook
from email.mime.text import MIMEText
from email.header import Header
# 打开指定的Excel文件
wb = load_workbook(r'C:\test.xlsx')
# 选择Sheet1工作表
ws = wb['Sheet1']
# 所使用的SMTP服务器
smtpServer = 'smtp.qq.com' # 这里使用QQ邮箱SMTP服务器
# 发送人账号密码(这里使用的是QQ邮箱账号)
username = 'test@qq.com'
password = 'testpassword'
# 遍历每个行
for row in ws.iter_rows(min_row=2, max_col=3, values_only=True):
product_name = row[0]
sales_qty = row[1]
send_email = row[2]
# 判断是否需要发送邮件
if send_email.lower() == '是':
# 判断是否销售数量超过20
if sales_qty > 20:
# 邮件主题和正文
subject = '销售提醒'
content = '{} 的销售数量已经超过了20个'.format(product_name)
# 邮件内容,文字格式
message = MIMEText(content, 'plain', 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
# 选择收件人
receiver = 'test@163.com'
# 发送邮件
smtp = smtplib.SMTP(smtpServer, 25)
smtp.login(username, password)
smtp.sendmail(username, receiver, message.as_string())
smtp.quit()
上面的代码中,我们利用 openpyxl 库读取 Excel 中的数据,然后再利用 SMTP 库发送邮件。在循环中,我们判断哪些行需要发送邮件,并检查其销售数量是否超过阈值,如果符合条件,则发送邮件给指定收件人。
结论
在本文中,我们学习了如何基于单元格值,在 Excel 中自动发送邮件。我们使用 openpyxl 库读取 Excel 中的数据,使用 SMTP 库发出邮件。同时,我们还演示了如何添加一些规则,确保邮件仅发送给符合特定条件的人。