首页 > 解决方案 > 使用 Python 的 AWS Lambda SES SMTPLib 电子邮件超时

问题描述

我的 lambda 环境设置在us-east-2但我知道 SES 仅存在于us-east-1. 这是代码:

    sent_from = "email1@gmail.com"
    send_to = "email2@gmail.com"
    aws_user_name = "<USER NAME KEY>"
    #stub - replace this
    aws_password = "<USER PASSWORD KEY>"
    logger.info("send_emails: start")

    for email in email_list:

        try:

            logger.info("send_emails: step 1: smtp")
            server = smtplib.SMTP()
            logger.info("send_emails: step 2: smtp")
            server.connect('email-smtp.us-east-1.amazonaws.com', 587)
            #server.ehlo()
            logger.info("send_emails: step 3: smtp")            
            server.starttls()
            logger.info("send_emails: step 4: smtp")
            #logger.info("User: " + aws_user_user + " Password:" + aws_password)
            server.login(aws_user_name, aws_password)
            logger.info("Email Send To: " + email[1])
            logger.info("Test Point: send_emails: A")
            #server.sendmail(sent_from, email[1], email_body.as_string())
            #REPLACE THIS LINE.  THIS IS JUST FOR TESTING.
            server.sendmail(sent_from, send_to, email_body.as_string())
            server.close()
            insert_into_email_sent_tbl(email[0], "Success")
            logger.info('Email sent!')
            return True

        except Exception as e: 
            logger.info(e)  
            logger.info('Something went wrong...')
            insert_into_email_sent_tbl(email[0], "Fail")
            return False

它在这里超时,有 10 秒超时。它总是停在这行代码: logger.info("send_emails: step 3: smtp")这意味着它停在这里server.connect('email-smtp.us-east-1.amazonaws.com', 587)

我已在 SES AWS 控制台中授予对这两个电子邮件地址的访问权限。

我是否必须将功能移动到us-east-1. 请记住,我的 RDS 实例位于us-east-2.

编辑

这些是我的出站安全组规则:

出站端口规则

我的入站规则如下:

入站端口规则

来源是我的工作和家用机器。

标签: amazon-web-servicesaws-lambdaamazon-sessmtplib

解决方案


解决方案是将主机名也添加smtplib.SMTP()

print("send_emails: step 1: smtp")
print("send_emails: step 1: smtp")
server = smtplib.SMTP('email-smtp.us-east-1.amazonaws.com')
print("send_emails: step 2: smtp")
server.connect('email-smtp.us-east-1.amazonaws.com', 587)
#server.ehlo()
print("send_emails: step 3: smtp")            
server.starttls()

看起来像一个 python错误


推荐阅读