Почему я не могу получать электронную почту, используя 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это означает, что эти две строки кода идентичны:

  1. var response = client.SendEmailAsync(sendRequest);

  2. 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();
}
Другие вопросы по тегам