usando um certificado auto-assinado com o Amazon SES

1

Estou configurando o Amazon Simple Email Service , chego ao ponto em que tento enviar um email e recebo a mensagem de erro:

The SMTP server requires a secure connection or the client was not authenticated. The server response was: Authentication required

Então, eu gostaria de usar um certificado autoassinado usando o IIS 8, mas até agora eu o implementei e ainda estou recebendo o mesmo erro.

  • Estou usando o .net web.config para definir as credenciais, o nome do host e a porta.
<mailSettings>
      <smtp from="[email protected]" deliveryMethod="Network" >
        <network
          host="my-amazon-host.com"
          port="25"
          defaultCredentials="false"
          enableSsl="true"
          userName="my-user-name"
          password="my-password" />
      </smtp>
</mailSettings>
  • existe alguma maneira de usar o certificado autoassinado (criado pelo IIS) e o serviço amazon-ses?
  • como configurar esse certificado?

obrigado antecipadamente!

    
por jack.the.ripper 27.12.2014 / 16:21

1 resposta

0

Eu leio este :

The .NET email TLS libraries only support STARTTLS which SES does not support today. We support what is called "TLS Wrapper" or SMTPS authentication. I can understand how this would be frustrating, but you can use OpenSSL as a workaround and tunnel through that software running on your computer to use .NET to program against our SMTP endpoint.

então decidi fazer uma implementação personalizada do smtp usando o SDK da amazon :

        var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
        var toAddresses = email.To.Select(mailAddress => mailAddress.Address).ToList();
        var destination = new Destination {ToAddresses = toAddresses};
        var subject = new Content(email.Subject);
        var textBody = new Content(email.Body);
        var body = new Body(textBody);
        var message = new Message(subject,body);
        var request = new SendEmailRequest(smtpSection.From, destination, message);
        Amazon.RegionEndpoint region = Amazon.RegionEndpoint.USEast1;
        var client = new AmazonSimpleEmailServiceClient(region);

        try
        {
            client.SendEmail(request);

        }
        catch (Exception ex)
        {
            //TODO: logger.
            throw;
        }
        finally 
        {
            email.Dispose();
            client.Dispose();
        }

e também você precisa configurar uma política para o usuário no Iam com as seguintes permissões:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "---------",
      "Effect": "Allow",
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

e lembre-se de adicionar as configurações do Amazon no aplicativo ou na configuração da Web:

  <add key="AWSAccessKey" value="-----------------"/>
  <add key="AWSSecretKey" value="-----------------"/>

Espero que ajude alguém mais. obrigado!

    
por 27.12.2014 / 20:20