首页 > 解决方案 > 循环 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() 

标签: pythonemailsmtpsmtplib

解决方案


以下使用生成器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库会处理大量难以正确处理且无法猜测如何解决的极端情况和复杂情况。


推荐阅读