amazon-web-services - AWS lambda,C# 异步邮件发送问题 - MailJet API
问题描述
我最初使用 AWS SES 从我的 Lambda 发送邮件,但它的传递速度非常慢。
然后我决定切换到 MailJet 并使用他们的 API 发送邮件。我正在使用 NuGet 包、API 的 V3.1 以及 MailJet 的示例代码来异步发送邮件。
public async Task<bool> SendEmailAsync(EmailModel model)
{
Boolean sent = false;
MailjetClient client = new MailjetClient(Environment.GetEnvironmentVariable("EmailAPIKey"), Environment.GetEnvironmentVariable("EmailAPISecret"))
{
Version = ApiVersion.V3_1,
};
MailjetRequest request = new MailjetRequest
{
Resource = Send.Resource,
}.Property(Send.Messages, new JArray {
new JObject {
{"From", new JObject {
{"Email", Environment.GetEnvironmentVariable("SenderEmail")},
{"Name", Environment.GetEnvironmentVariable("SenderEmailName")}
}
},
{"HTMLPart", model.EmailHtmlBody},
{"Subject", model.EmailSubject},
{"TextPart", model.EmailTextBody},
{"To", new JArray {
new JObject {
{"Email", model.EmailTo},
{"Name", model.EmailTo}
}
}}
}
});
try
{
MailjetResponse response = await client.PostAsync(request);
if (response.IsSuccessStatusCode)
{
sent = true;
LambdaLogger.Log(string.Format("Total: {0}, Count: {1}\n", response.GetTotal(), response.GetCount()));
LambdaLogger.Log(response.GetData().ToString());
}
else
{
sent = false;
LambdaLogger.Log(string.Format("StatusCode: {0}\n", response.StatusCode));
LambdaLogger.Log(string.Format("ErrorInfo: {0}\n", response.GetErrorInfo()));
LambdaLogger.Log(response.GetData().ToString());
LambdaLogger.Log(string.Format("ErrorMessage: {0}\n", response.GetErrorMessage()));
}
}
catch (Exception mailFail)
{
sent = false;
LambdaLogger.Log(string.Format("Failed: {0}\n", mailFail.Message.ToString() + " : " + mailFail.InnerException.Message.ToString()));
}
return sent;
}
当我在本地测试代码时,一切正常。
当我将 lambda 部署到 AWS 并调用发送邮件的方法时,发送邮件是完全随机的。我猜这是由于某种原因失败的异步部分,我希望有人可以帮助我解决这个问题,因为现在我被困在这个问题上。
或者,如果有人可以告诉我如何让 Amazon SES 立即发送。
解决方案
从问题:
这是完全随机的
从评论中:
似乎 lambda 只是继续运行,不等待 MailJet 的回复
这听起来像是一个 async/await 问题,但可能不是你想的那样。请注意,您正在等待 MailJet 操作的结果:
MailjetResponse response = await client.PostAsync(request);
但这只是在这种方法中。这种方法当然是async
:
public async Task<bool> SendEmailAsync(EmailModel model)
当你调用这个方法时,你await
呢?您调用它的方法,也应该是async
. 你等着吗?基本上,你是“一直异步”吗?
听起来好像在代码库的某个地方有一个异步操作被调用然后被遗忘。
推荐阅读
- ssh - 防止 sshfs 重新连接
- python - 单击一次时双击 pynput
- amazon-web-services - CI CD 管道 - 非源代码控制触发器
- javascript - 我将如何只更改对象的一个属性
- java - 是否可以通过socket.io java客户端在json中发送字节数组
- python - 在每个 seaborn 子条形图上显示值
- amazon-web-services - AWS Sagemaker 自定义训练作业容器发出损失指标
- reactjs - 使用组件实验室编译错误 > Material UI 中 SVG 图标的自动完成功能
- python - 根据熊猫中两个分组的总和保持最大值
- xcode - React Native 和 Xcode:找不到“nanopb/pb.h”文件