由于 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 中。
我在 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 中。