使用 Python 自动从 Excel 发送电子邮件
前几天,我妻子问我能不能帮她想个办法,让她给那些还未付款的客户发通知。我妻子经营着一家小公司,很多事情都要用Excel来做。她问我能不能自动给那些还没付款的客户发送电子邮件,这样她就不用给每个客户都发邮件了。
所以我为她写了一个脚本来自动化这个过程。😃
Excel 文件包含大量信息,但我们将重点介绍最重要的信息——姓名、电子邮件、所在城市、已付款(是/否)以及金额。脚本的工作原理非常简单,我们设置了“已付款”单元格,如果客户尚未付款,我们会向其发送一封个性化电子邮件,提醒其欠款金额。脚本会向所有未付款的客户发送电子邮件。
让我们开始编写代码吧。
'xlrd
我们首先安装“。 'Xlrd
”是一个用于从 Microsoft Excel (tm) 电子表格文件中提取数据的库。之后,我们将导入'smtplib
“。该smtplib
模块定义了一个 SMTP 客户端会话对象,可用于将邮件发送到任何具有 SMTP 或 ESMTP 监听守护进程的 Internet 计算机。
让我们导入我们需要的所有东西。
import xlrd
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
之后,我们需要 Excel 文件的路径以及该文件所需的所有信息(姓名、电子邮件、城市、付款、金额)。
path = "clients.xlsx"
openFile = xlrd.open_workbook(path)
sheet = openFile.sheet_by_name('clients')
我把欠款客户的邮箱、金额和姓名分别放在三个不同的列表中。然后我通过这些列表来查看客户是否已经付款。
mail_list = []
amount = []
name = []
for k in range(sheet.nrows-1):
client = sheet.cell_value(k+1,0)
email = sheet.cell_value(k+1,1)
paid = sheet.cell_value(k+1,3)
count_amount = sheet.cell_value(k+1,4)
if paid == 'No':
mail_list.append(email)
amount.append(count_amount)
name.append(client)
之后,我们需要专注于发送电子邮件。
email = 'some@gmail.com'
password = 'pass'
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email, password)
我们需要获取索引,这样才能找到该人的名字。
for mail_to in mail_list:
send_to_email = mail_to
find_des = mail_list.index(send_to_email)
clientName = name[find_des]
subject = f'{clientName} you have a new email'
message = f'Dear {clientName}, \n' \
f'we inform you that you owe ${amount[find_des]}. \n'\
'\n' \
'Best Regards'
msg = MIMEMultipart()
msg['From '] = send_to_email
msg['Subject'] = subject
msg.attach(MIMEText(message, 'plain'))
text = msg.as_string()
print(f'Sending email to {clientName}... ')
server.sendmail(email, send_to_email, text)
最后我们需要确保一切正常。
server.quit()
print('Process is finished!')
time.sleep(10)
让我们把所有内容整合在一起。
import xlrd
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
path = "clients.xlsx"
openFile = xlrd.open_workbook(path)
sheet = openFile.sheet_by_name('clients')
mail_list = []
amount = []
name = []
for k in range(sheet.nrows-1):
client = sheet.cell_value(k+1,0)
email = sheet.cell_value(k+1,1)
paid = sheet.cell_value(k+1,3)
count_amount = sheet.cell_value(k+1,4)
if paid == 'No':
mail_list.append(email)
amount.append(count_amount)
name.append(client)
email = 'some@gmail.com'
password = 'pass'
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email, password)
for mail_to in mail_list:
send_to_email = mail_to
find_des = mail_list.index(send_to_email)
clientName = name[find_des]
subject = f'{clientName} you have a new email'
message = f'Dear {clientName}, \n' \
f'we inform you that you owe ${amount[find_des]}. \n'\
'\n' \
'Best Regards'
msg = MIMEMultipart()
msg['From '] = send_to_email
msg['Subject'] = subject
msg.attach(MIMEText(message, 'plain'))
text = msg.as_string()
print(f'Sending email to {clientName}... ')
server.sendmail(email, send_to_email, text)
server.quit()
print('Process is finished!')
time.sleep(10)
谢谢大家。
鏂囩珷鏉ユ簮锛�https://dev.to/stokry/automate-sending-emails-from-excel-with-python-3p42