尝试使用SES SendEmail操作时任务超时

我正在尝试使用带有Python 3.7 lambda函数的AWS SES发送电子邮件。

当我尝试测试该功能并查看它是否发送电子邮件时,我收到一条消息,说明任务已超时。
它到达了发送消息的代码部分,但是消息在任何时候都没有被发送,并且任务刚刚超时。

这是我用来发送消息的代码:

from __future__ import print_function
import boto3
import json
import decimal
from datetime import datetime
from boto3.dynamodb.conditions import Key,Attr
from botocore.exceptions import ClientError

ses = boto3.client(
    'ses',region_name = 'us-east-1',endpoint_url = 'https://email.us-east-1.amazonaws.com'
)

try:
    response = ses.send_email(
        Destination = {
            'ToAddresses': [
                email
            ],},Message = {
            'Body': {
                'Html': {
                    'Charset': CHARSET,'Data': BODY_HTML
                },'Text': {
                    'Charset': CHARSET,'Data': BODY_TEXT
                },'Subject': {
                'Charset': CHARSET,'Data': SUBJECT
            }
        },Source = SENDER
    )
except ClientError as e:
    print(e)
else:
    print('Email sent! Message ID:'),print(response['MessageId'])

以上所有变量均在代码中进行了硬编码,并且绝对有价值(我已将其打印到控制台上以确保其价值)。

ramzismo 回答:尝试使用SES SendEmail操作时任务超时

您的endpoint_url = 'https://dynamodb.us-east-1.amazonaws.com'似乎指向的DynamoDB在SES客户端中似乎无效。尝试删除它:

ses = boto3.client(
    'ses',region_name = 'us-east-1',)
,

我遇到了同样的问题(但使用nodejs)。 我发现这些答案可能对您有所帮助,看起来像是aws的网络问题。 https://forums.aws.amazon.com/thread.jspa?threadID=232508 https://github.com/aws/aws-sdk-js/issues/1451

编辑:在类似情况下,对我来说最简单的解决方案是使用SNS调用另一个不在VPC内的lambda。第二个lambda用于调用SES服务。您可以为SNS创建端点并将其连接到VPC。

,

我花了很长时间尝试使它与boto3 SES客户端一起使用,但即使创建了SES端点(我的Lambda在VPC中),也无法执行。它保持超时而没有任何其他错误。万一这对其他人有帮助的话,我改用smtplib,如此处所述:https://www.authsmtp.com/python/index.html。我不知道这种方法是否有缺点。我只知道它对我有用。

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

,然后(我在AWS Secrets Manager中存储了SES SMTP凭据):

# get SES smtp email credentials from Secrets Manager
client2 = boto3.client('secretsmanager')
response = client2.get_secret_value(
SecretId='secretIDhere'
)
secretDict = json.loads(response['SecretString'])
smtpusername = secretDict['username']
smtppassword = secretDict['password']
smtphost = 'email-smtp.us-east-1.amazonaws.com:25'

最后

# send email
msg = MIMEMultipart()
message = "Message text here"
msg['From'] = "email address here"
msg['To'] = "email address here"
msg['Subject'] = "Subject line here"
msg.attach(MIMEText(message,'plain'))
server = smtplib.SMTP(smtphost)
server.starttls()
server.login(smtpusername,smtppassword)
server.sendmail(msg['From'],msg['To'],msg.as_string())
server.quit()
本文链接:https://www.f2er.com/3106642.html

大家都在问