Почему я не могу получать электронную почту, используя AWS SES в. Сеть
Я использовал образец с веб-страницы AWS, чтобы проверить, могу ли я получить электронное письмо с помощью AWS SES SDK.
Он показывает, что письмо было успешно отправлено, но я не получил письмо, когда я проверяю свою учетную запись электронной почты.
Электронная почта отправителя была подтверждена.
Код такой же, как данный простой. Только адреса электронной почты разные.
Когда я вставляю код в VS 2017, выдается ошибка для Client.SendEmail().
Я изменил его в качестве рекомендации для Client.SendEmailAsync(). Понятия не имею, где будет проблема облака.
using Amazon;
using System;
using System.Collections.Generic;
using Amazon.SimpleEmail;
using Amazon.SimpleEmail.Model;
namespace AmazonSESSample
{
class Program
{
static readonly string senderAddress = "*****";
static readonly string receiverAddress = "******";
static readonly string configSet = "ConfigSet";
static readonly string subject = "Amazon SES test (AWS SDK for .NET)";
static readonly string textBody = "Amazon SES Test (.NET)\r\n"
+ "This email was sent through Amazon SES "
+ "using the AWS SDK for .NET.";
static readonly string htmlBody = @"<html>
<head></head>
<body>
<h1>Amazon SES Test (AWS SDK for .NET)</h1>
<p>This email was sent with
<a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the
<a href='https://aws.amazon.com/sdk-for-net/'>
AWS SDK for .NET</a>.</p>
</body>
</html>";
static void Main(string[] args)
{
using (
var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USEast1))
{
var sendRequest = new SendEmailRequest
{
Source = senderAddress,
Destination = new Destination
{
ToAddresses =
new List<string> { receiverAddress }
},
Message = new Message
{
Subject = new Content(subject),
Body = new Body
{
Html = new Content
{
Charset = "UTF-8",
Data = htmlBody
},
Text = new Content
{
Charset = "UTF-8",
Data = textBody
}
}
},
ConfigurationSetName = configSet
};
try
{
Console.WriteLine("Sending email using Amazon SES...");
var response = client.SendEmailAsync(sendRequest);
Console.WriteLine("The email was sent successfully.");
}
catch (Exception ex)
{
Console.WriteLine("The email was not sent.");
Console.WriteLine("Error message: " + ex.Message);
}
}
Console.Write("Press any key to continue...");
Console.ReadKey();
}
}
}
1 ответ
ошибка
Main
Метод заканчивается до того, как письмо отправлено, потому что мы не ждем Task response
заканчивать.
SendEmailAsync
возвращает Task
это означает, что эти две строки кода идентичны:
var response = client.SendEmailAsync(sendRequest);
Task response = client.SendEmailAsync(sendRequest);
Решения
Если у вас установлена последняя версия Visual Studio и включен C#7.1, вы можете воспользоваться async Task Main
и использовать await
Ключевое слово, которое скажет код для запуска SendEmailAsync
в другой теме и Main
не закончится до SendEmail
завершено.
Если вы используете более старую версию Visual Studio, вы можете добавить .GetAwaiter().GetResult()
, который также обеспечит Main
не закончится до SendEmail
завершено, но SendEmailAsync
заблокирует текущий поток.
C#7.1 и выше (предпочтительно)
static async Task Main(string[] args)
{
using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USEast1))
{
var sendRequest = new SendEmailRequest
{
Source = senderAddress,
Destination = new Destination
{
ToAddresses =
new List<string> { receiverAddress }
},
Message = new Message
{
Subject = new Content(subject),
Body = new Body
{
Html = new Content
{
Charset = "UTF-8",
Data = htmlBody
},
Text = new Content
{
Charset = "UTF-8",
Data = textBody
}
}
},
ConfigurationSetName = configSet
};
try
{
Console.WriteLine("Sending email using Amazon SES...");
var response = await client.SendEmailAsync(sendRequest);
Console.WriteLine("The email was sent successfully.");
}
catch (Exception ex)
{
Console.WriteLine("The email was not sent.");
Console.WriteLine("Error message: " + ex.Message);
}
}
Console.Write("Press any key to continue...");
Console.ReadKey();
}
C# 7.0 и ниже
static void Main(string[] args)
{
using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USEast1))
{
var sendRequest = new SendEmailRequest
{
Source = senderAddress,
Destination = new Destination
{
ToAddresses =
new List<string> { receiverAddress }
},
Message = new Message
{
Subject = new Content(subject),
Body = new Body
{
Html = new Content
{
Charset = "UTF-8",
Data = htmlBody
},
Text = new Content
{
Charset = "UTF-8",
Data = textBody
}
}
},
ConfigurationSetName = configSet
};
try
{
Console.WriteLine("Sending email using Amazon SES...");
var response = client.SendEmailAsync(sendRequest).GetAwaiter().GetResult();
Console.WriteLine("The email was sent successfully.");
}
catch (Exception ex)
{
Console.WriteLine("The email was not sent.");
Console.WriteLine("Error message: " + ex.Message);
}
}
Console.Write("Press any key to continue...");
Console.ReadKey();
}