python - 循环 smtp python 时更改电子邮件凭据
问题描述
我正在使用以下代码向客户发送电子邮件,正如你们所知,不同公司设置了每日发送限制。我想要实现的是在达到限制之前更改电子邮件凭据,但继续使用收件人列表。例如:我有 5 个电子邮件凭据,每个电子邮件 ID 将包含 50 封电子邮件,并且会自动更改。
我使用的代码:
import smtplib
li = ["xxxxx@gmail.com", "yyyyy@gmail.com"]
for dest in li:
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login("sender_email_id", "sender_email_id_password")
message = "Message_you_need_to_send"
s.sendmail("sender_email_id", dest, message)
s.quit()
解决方案
以下使用生成器nextcred
循环遍历列表中的凭据,直到您发送了所有消息。在您遍历整个列表后,它会返回到第一对。
我们使用一对发送 50 条消息,然后注销并使用下一对凭据重新登录。
import smtplib
def nextcred():
credentials = [('user', 'password'), ('plugh', 'xyzzy'), ('alfred', 'what me worry?')]
while True:
for tup in credentials:
yield tup
li = ["xxxxx@gmail.com", "yyyyy@gmail.com"]
cred = nextcred()
s = None
for idx, dest in enumerate(li):
if (idx % 50) == 0:
if s:
s.quit()
account, passw = next(cred)
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login(account, passw)
message = "Message_you_need_to_send"
s.sendmail("sender_email_id", dest, message)
s.quit()
顺便说一句,我希望您并没有真正通过将字符串粘贴在一起来构建您的 SMTP 消息。email
如果您对 SMTP 和 MIME 不是很熟悉,Python库会处理大量难以正确处理且无法猜测如何解决的极端情况和复杂情况。
推荐阅读
- java - Hibernate 在启动时删除表的所有内容,即使 hbm2ddl.auto 设置为更新
- python - 根据其他数据集添加具有重复值的列 - pandas(将股票市场指数的数据按天添加到每个股票。)
- string - 从同一目录中的文本文件中使用正则表达式 Grep ip 地址
- scenekit - 如何使用 Arkit Scenekit 创建类似于 qlone 3d 扫描仪应用的 AR 穹顶
- php - 从php中的多维数组中删除所有键偏移量
- swift - 在 swift 中实现用于自动化测试的 Screenplay 模式
- javascript - 使用 replit 托管的错误
- php - Laravel 异常“Symfony\\Component\\HttpKernel\\Exception\\HttpException”,尽管在路由上添加了例外
- javascript - 具有无服务器框架(BlitzJs)的 Websocket api?
- php - 在关联数组上使用冒泡排序时未定义的偏移量