由于 smtp,在 Lambda (python) 中发送电子邮件时出错

Error while sending an email in Lambda (python) due to smtp

我在 lambda 中有以下代码:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

def lambda_handler(event, context):
    msg_email = MIMEMultipart('alternative')
    msg_email.attach(MIMEText("mymessage", 'plain'))
    msg_email['Subject'] = subject
    msg_email['From'] = "from@mail.com"
    msg_email['To'] = "to@mail.com"
    try:
        print("AAAA")
        with smtplib.SMTP('email-smtp.eu-west-1.amazonaws.com', 587) as smtp_server:
            print("BBBB")
            smtp_server.ehlo()
            smtp_server.starttls()
            smtp_server.ehlo()
            smtp_server.login('myid', 'mypass')
            smtp_server.sendmail("from@mail.com", "to@mail.com", msg_email.as_string())
    except Exception:
        print("Couldn't send message.")
        raise
    else:
        print("Email sent!")

此代码打印“AAAA”,但在打印“BBBB”之前我在执行 lambda 时遇到错误:任务在 3.01 秒后超时。但是,如果我 运行 它在我的 EC2 实例中工作正常。为什么lambda不能执行?

编辑:lambda 的角色具有以下权限:AWSLambdaBasicExecutionRole(后面有一些 uiid)、pinpoint-email-ers-、AmazonSESFullAccess、AmazonWorkMailFullAccess、AmazonWorkMailMessageFlowFullAccess

VPC 中的 Lambda 没有互联网连接 如果您将它放在 public 子网中。它必须放置在 私有子网 中,该子网的路由 table 和指向 NAT gateway 的路由。 NAT 将放置在 public 子网中。

AWS 文档中描述了详细信息:

或者,如果不需要,请不要将 lambda 放在 VPC 中。