当前位置:嗨网首页>书籍在线阅读

29-第3步_发送定制的电子邮件提醒

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

第3步:发送定制的电子邮件提醒

得到所有未付费成员的名单后,就可以向他们发送电子邮件提醒了。将下面的代码添加到程序中,但要代入你的真实电子邮件地址和提供商的信息:

#! python3
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet.
--snip--
# Log in to email account.
smtpObj = smtplib.SMTP('smtp. ', 587) 
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('[email protected]', sys.argv[1])

调用 smtplib.SMTP() 并传入提供商的域名和端口,来创建一个 SMTP 对象。调用 ehlo()starttls() ,然后调用 login() ,并传入你的电子邮件地址和 sys.argv[1] (其中保存着你的口令字符串)。在每次运行程序时,将口令作为命令行参数输入,避免在源代码中保存口令。

程序登录到你的电子邮件账户后,就应该遍历 unpaidMembers 字典,向未支付会费的会员的电子邮件地址发送针对个人的电子邮件。将以下代码添加到sendDuesReminders.py:

#! python3
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet.
--snip--
# Send out reminder emails.
for name, email in unpaidMembers.items():
❶ body = "Subject: %s dues unpaid.\nDear %s,\nRecords show that you have not
paid dues for %s. Please make this payment as soon as possible. Thank you!'" %
(latestMonth, name, latestMonth)
❷ print('Sending email to %s...' % email)
❸ sendmailStatus = smtpObj.sendmail('[email protected]', email, body)
❹ if sendmailStatus != {}:
 print('There was a problem sending email to %s: %s' % (email, sendmailStatus))
smtpObj.quit()

这段代码循环遍历 unpaidMembers 中的姓名和电子邮件。对于每个没有付费的成员,我们用最新的月份和成员的名称定制了一条消息,并保存在 body 中❶。输出表示正在向这个会员的电子邮件地址发送电子邮件❷。然后调用 sendmail() ,向它传入地址和定制的消息❸。返回值保存在 sendmailStatus 中。

回忆一下,如果SMTP服务器在发送某个电子邮件时报告错误, sendmail() 方法将返回一个非空的字典值。 for 循环的最后部分在❹行检查返回的字典是否非空,如果非空,则输出收件人的电子邮件地址以及返回的字典。

程序完成发送所有电子邮件后,调用 quit() 方法,与SMTP服务器断开连接。

如果运行该程序,输出结果会像这样:

Sending email to [email protected]...
Sending email to [email protected]...
Sending email to [email protected]...

收件人会收到一封关于他们未支付会费的邮件,看起来就像你手动发送的邮件一样。