使用threadpoolexecutor使用asyncio发送电子邮件

使用threadpoolexecutor发送电子邮件时出现错误消息。如果我在单线程中正常发送,则可以正常工作,并且可以发送电子邮件。

  

(503,b'5.5.1命令顺序错误')

如果我随机睡觉,我可以发送电子邮件。这是唯一的解决方法吗?

我已经按照以下步骤设置了代码。

  1. 我通过连接到服务器来创建服务器对象。
  2. 使用相同的服务器对象,我向服务器进行身份验证。
  3. 然后,我尝试使用threadpoolexecutor将邮件发送给每个收件人。每个收件人将有不同的消息。我不想通过一次又一次的登录来传递服务器对象来发送电子邮件。

请找到功能和代码块的代码片段。

d = [2,3,4]
sleep_rotate = itertools.cycle(d)

def blocking_send_email(server,sender_email,receiver_email,text):
    try:
        status = True
        print("** sending email to " + receiver_email)
        # it works when i sleep randomly
        time.sleep(next(sleep_rotate))
        res = server.sendmail(sender_email,text)
        print(str(res))
        details = ""
    except Exception as e:
        status = False
        details = str(e)
        print(details)

    result = [{
        receiver_email: {
            'status': status,'details': details
        }
    }]
    return result
with smtplib.SMTP(smtp_server,port) as server:

    print("connected to smtp server: " + smtp_server)
    server.ehlo()
    server.starttls()
    server.ehlo()

    server.login(sender_email,password)

    message_data_list = get_email_data(file_path,sender_name)

    with concurrent.futures.ThreadPoolExecutor() as executor_pool:
        future_result = {executor_pool.submit(blocking_send_email,server,data['sender_email'],data['receiver_email'],data['text']
                                              ) for data in message_data_list}

        for future in concurrent.futures.as_completed(future_result):
            try:
                result = future.result()
                mail_result.append(result)
            except Exception as exc:
                print('generated an exception: %s' % exc) 
aabb5888157 回答:使用threadpoolexecutor使用asyncio发送电子邮件

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3079864.html

大家都在问