- 从Excel 电子表格中读取数据。
- 找出上个月没有交费的所有会员。
- 找到他们的电子邮件地址,向他们发送针对个人的提醒。
这意味着代码需要做到以下几点:
- 用openpyxl 模块打开并读取Excel 文档的单元格(处理Excel 文件参煤
- 创建一个字典,包含会费超期的会员。
- 调用smtplib.SMTP()、ehlo()、starttls()和login(),登录SMTP 服务器,
- 针对会费超期的所有会员,调用sendmail()方法,发送针对个人的电子邮件
- 打开一个新的文件编辑器窗口,并保存为sendDuesReminders.py
import openpyxl
import smtplib
import sys
from smtplib import SMTP_SSL
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
wb = openpyxl.load_workbook('duesRecords.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
lastCol = sheet.max_column
latestMonth = sheet.cell(row=1,column=lastCol).value
unpaidMembers = {}
for r in range(2,sheet.max_row+1):
payment = sheet.cell(row=r,column=lastCol).value
if payment != 'paid':
name = sheet.cell(row=r,column=1).value
email = sheet.cell(row=r,column=2).value
unpaidMembers[name] = email
mailInfo = {}
mailInfo['Username'] = input('Username:')
mailInfo['Password'] = input('Password:')
mailInfo['Hostname'] = input('Hostname:')
msg = MIMEText('hello,这是来自Python的信\n 新年快乐!!!','plain','utf-8')
msg['From'] = _format_addr('奇奇 <%s>' % mailInfo['Username'] )
msg['Subject'] = Header('来自新年的问候...','utf-8').encode()
for name,to in unpaidMembers.items():
msg['To'] = _format_addr('用户%s <%s>' % (name,to))
smtp = SMTP_SSL(mailInfo["Hostname"])
smtp.set_debuglevel(1)
smtp.ehlo(mailInfo["Hostname"])
smtp.login(mailInfo["Username"],mailInfo["Password"])
smtp.sendmail(mailInfo['Username'],to,msg.as_string())
smtp.quit()
print('向用户 '+ name + ' ' + to +' 发送定制的电子邮件...成功')