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

Time:04-14

I have the following code in a 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'] = "[email protected]"
    msg_email['To'] = "[email protected]"
    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("[email protected]", "[email protected]", msg_email.as_string())
    except Exception:
        print("Couldn't send message.")
        raise
    else:
        print("Email sent!")

This code prints "AAAA", but before printing "BBBB" I get an error executing the lambda: Task timed out after 3.01 seconds. However, if I run it in my EC2 instance works fine. Why lambda cannot execute it?

EDIT: The role of the lambda has these permissions: AWSLambdaBasicExecutionRole(with some uiid after it), pinpoint-email-ers-, AmazonSESFullAccess, AmazonWorkMailFullAccess, AmazonWorkMailMessageFlowFullAccess

CodePudding user response:

Lambda in a VPC does not have internet connection if you place it in a public subnet. It must be placed in a private subnet, which has route table with routes pointing to a NAT gateway. The NAT will be placed in the public subnet.

The details are described in AWS Docs:

Alternatively, just don't place your lambda in a VPC if you don't have to.

  • Related