Pregunta

Alojo mi aplicación web que está escrita en .NET MVC2 en Amazon EC2. Utilice Curry Gmail SMTP para enviar correo electrónico. Beacuse de Google para la cuota de correo electrónico de inicio no puede enviar más de 500 correo electrónico al día. Así que decide mover a Amazon SES. ¿Cómo puede usar Amazon SES con ASP.NET MVC2? ¿Qué tal la configuración, etc.? ¿El correo electrónico se enviará a través de Gmail? Porque nuestro proveedor de correo electrónico es Gmail. etc.

¿Fue útil?

Solución

Enviar correo electrónico a través de Amazon es una decisión correcta. Porque cuando te mudes a Amazon recibirás un correo electrónico de 2000 gratis por día, que es mayor que la cuota de correos electrónicos de Googla Apps 500 al día.

Paso a paso:

  1. Ir http://aws.amazon.com/sesy haga clic en Registrarse en Amazon SES.
  2. Para obtener sus identificadores de acceso de AWS
  3. Verifique su dirección de correo electrónico, correo electrónico que enviará por correo electrónico a través de. Necesita los paquetes de Perl instalados en su computadora para probar las funciones de correo electrónico.
  4. Incluya: Amazonses.com para su disco DNS.

Documentación paso a paso.http://docs.aws.amazon.com/ses/latest/developeguide/getting-started.html

Hay un envoltorio de C# de Amazon SES (Simple Simple Service) en CodePlex. Puede usar este envoltorio para enviar correos electrónicos.

Amazon Ses C# envoltura

Otros consejos

La forma más fácil es descargar el SDK a través de Nuget (el paquete se llama AWSSDK) o descargar el SDK del sitio de Amazon. La descarga de SDK desde su sitio tiene un proyecto de ejemplo que le muestra cómo llamar a su API para enviar correo electrónico. La única configuración es enchufar sus claves API. La parte más complicada es verificar su dirección de envío (y cualquier recibo de prueba), pero también es una llamada API allí para enviar el mensaje de prueba. Luego deberá iniciar sesión y verificar esas direcciones de correo electrónico. El correo electrónico se enviará a través de Amazon (ese es el punto completo) pero la dirección de correo electrónico puede ser su dirección de Gmail.

  1. Descargue el archivo awssdk.dll desde Internet use los siguientes espacios de nombre
using Amazon;
using Amazon.SimpleEmail;
using Amazon.SimpleEmail.Model;

using System.Net.Mail;

2. Agregar a la configuración web ...

 <appSettings>
     <add key="AWSAccessKey" value="Your AWS Access Key" />
     <add key="AWSSecretKey" value="Your AWS secret Key" />
 </appSettings>

3. Agregue una clase AWSEMAILSEVICE a su proyecto que permitirá enviar correo a través de AWS SES ...

public class AWSEmailSevice
    {

        //create smtp client instance...
        SmtpClient smtpClient = new SmtpClient();

        //for sent mail notification...
        bool _isMailSent = false;

        //Attached file path...
        public string AttachedFile = string.Empty;

        //HTML Template used in mail ...
        public string Template = string.Empty;

        //hold the final template data list of users...
        public string _finalTemplate = string.Empty;

        //Template replacements varibales dictionary....
        public Dictionary<string, string> Replacements = new Dictionary<string, string>();


        public bool SendMail(MailMessage mailMessage)
        {
            try
            {

                if (mailMessage != null)
                {
                    //code for fixed things
                    //from address...
                    mailMessage.From = new MailAddress("from@gmail.com");

                    //set priority high
                    mailMessage.Priority = System.Net.Mail.MailPriority.High;

                    //Allow html true..
                    mailMessage.IsBodyHtml = true;

                    //Set attachment data..
                    if (!string.IsNullOrEmpty(AttachedFile))
                    {
                        //clear old attachment..
                        mailMessage.Attachments.Clear();

                        Attachment atchFile = new Attachment(AttachedFile);
                        mailMessage.Attachments.Add(atchFile);
                    }

                    //Read email template data ...
                    if (!string.IsNullOrEmpty(Template))
                        _finalTemplate = File.ReadAllText(Template);

                    //check replacements ...
                    if (Replacements.Count > 0)
                    {
                        //exception attached template..
                        if (string.IsNullOrEmpty(_finalTemplate))
                        {
                            throw new Exception("Set Template field (i.e. file path) while using replacement field");
                        }

                        foreach (var item in Replacements)
                        {
                            //Replace Required Variables...
                            _finalTemplate = _finalTemplate.Replace("<%" + item.Key.ToString() + "%>", item.Value.ToString());
                        }
                    }

                    //Set template...
                    mailMessage.Body = _finalTemplate;


                    //Send Email Using AWS SES...
                    var message = mailMessage;
                    var stream = FromMailMessageToMemoryStream(message);
                    using (AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(
                               ConfigurationManager.AppSettings["AWSAccessKey"].ToString(),
                               ConfigurationManager.AppSettings["AWSSecretKey"].ToString(), 
                               RegionEndpoint.USWest2))
                    {
                        var sendRequest = new SendRawEmailRequest { RawMessage = new RawMessage { Data = stream } };
                        var response = client.SendRawEmail(sendRequest);

                        //return true ...
                    _isMailSent = true;

                    }
                }
                else
                {
                    _isMailSent = false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return _isMailSent;
        }

        private MemoryStream FromMailMessageToMemoryStream(MailMessage message)
        {
            Assembly assembly = typeof(SmtpClient).Assembly;

            Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");

            MemoryStream stream = new MemoryStream();

            ConstructorInfo mailWriterContructor =
               mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
            object mailWriter = mailWriterContructor.Invoke(new object[] { stream });

            MethodInfo sendMethod =
               typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);

            if (sendMethod.GetParameters().Length == 3)
            {
                sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true, true }, null); // .NET 4.x
            }
            else
            {
                sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true }, null); // .NET < 4.0 
            }

            MethodInfo closeMethod =
               mailWriter.GetType().GetMethod("Close", BindingFlags.Instance | BindingFlags.NonPublic);
            closeMethod.Invoke(mailWriter, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { }, null);

            return stream;
        }
    }
  1. Use la clase anterior para enviar correo a cualquier persona con reemplazo de Varibales de archivo adjunto y plantilla (es opcional) // Llame a este método para enviar su correo electrónico

public String sendEraMailViaaWs () {String ageicStatus = "";

      //Create instance for send email...
      AWSEmailSevice emailContaint = new AWSEmailSevice();
      MailMessage emailStuff = new MailMessage();

       //email subject..
      emailStuff.Subject = "Your Email subject";

        //region  Optional email stuff

      //Templates to be used in email / Add your Html template path ..
      emailContaint.Template = @"\Templates\MyUserNotification.html";

      //add file attachment / add your file ...
      emailContaint.AttachedFile = "\ExcelReport\report.pdf";



        //Note :In case of template 
        //if youe want to replace variables in run time 
        //just add replacements like <%FirstName%>  ,  <%OrderNo%> , in HTML Template 


        //if you are using some varibales in template then add 
      // Hold first name..
      var FirstName = "User First Name";

      //  Hold email..
      var OrderNo = 1236;


      //firstname replacement..
      emailContaint.Replacements.Add("FirstName", FirstName.ToString());
      emailContaint.Replacements.Add("OrderNo", OrderNo.ToString());

        // endregion option email stuff


      //user OrderNo replacement...
      emailContaint.To.Add(new MailAddress("TOEmail@gmail.com"));

      //mail sent status
      bool isSent = emailContaint.SendMail(emailStuff);

      if(isSent)
      {
         emailStatus = "Success";
      }
      else
      {
      emailStatus = "Fail";
      }
         return emailStatus ;    }

@Gandil creé este código muy simple para enviar correos electrónicos

using Amazon;
using Amazon.SimpleEmail;
using Amazon.SimpleEmail.Model;
using System.IO;

namespace SendEmail
{
 class Program
 {
    static void Main(string[] args)
    {
        //Remember to enter your (AWSAccessKeyID, AWSSecretAccessKey) if not using and IAM User with credentials assigned to your instance and your RegionEndpoint
        using (var client = new AmazonSimpleEmailServiceClient("YourAWSAccessKeyID", "YourAWSSecretAccessKey", RegionEndpoint.USEast1))
        {
            var emailRequest =  new SendEmailRequest()
            {
                Source = "FROMADDRESS@TEST.COM",
                Destination = new Destination(),
                Message = new Message()
            };

            emailRequest.Destination.ToAddresses.Add("TOADDRESS@TEST.COM");
            emailRequest.Message.Subject = new Content("Hello World");
            emailRequest.Message.Body = new Body(new Content("Hello World"));
            client.SendEmail(emailRequest);
        }
     }
  }
}

Puedes encontrar el código aquí https://github.com/gianluis90/amazon-send-email

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top