Question

J'héberge mon application Web qui est écrite en .net mvc2 sur amazon ec2.utilisez actuellement gmail smtp pour envoyer des e-mails.en raison de google pour le quota d'e-mails de démarrage, vous ne pouvez pas envoyer plus de 500 e-mails par jour.Alors décidez de déplacer ses amazones.Comment utiliser Amazon ses avec asp.net mvc2?Qu'en est-il de la configuration, etc.?Les e-mails seront-ils envoyés via Gmail?car notre fournisseur de messagerie est gmail.etc.

Était-ce utile?

La solution

Envoyer un e-mail via Amazon est une bonne décision. Parce que lorsque vous passez à Amazon, vous recevrez immédiatement 2000 e-mails gratuits par jour, ce qui est supérieur au quota de 500 e-mails par jour des applications googla.

Pas à pas:

  1. Accédez à http://aws.amazon.com/ses et cliquez sur S'inscrire à Amazon SES.
  2. Pour obtenir vos identifiants d'accès AWS
  3. vérifier votre adresse e-mail - e-mail auquel vous enverrez un e-mail via. Tu besoin de packages perl installés sur votre ordinateur pour tester les e-mails fonctionnalités.
  4. incluez: amazonses.com à votre enregistrement DNS.

Documentation étape par étape. http://docs.aws.amazon.com/ses/latest /DeveloperGuide/getting-started.html

Il existe un wrapper C # Amazon SES (Simple Email Service) sur codeplex, vous pouvez utiliser ce wrapper pour envoyer des e-mails.

Amazon SES C # Wrapper

Autres conseils

Le moyen le plus simple est de télécharger le SDK via Nuget (le package s'appelle AWSSDK) ou de télécharger le SDK depuis le site d'Amazon.Le téléchargement sdk depuis leur site contient un exemple de projet qui vous montre comment appeler leur API pour envoyer des e-mails.La seule configuration est de brancher vos clés API.La partie la plus délicate est de vérifier votre adresse d'envoi (et tous les destinataires du test), mais il s'agit également d'un appel API pour envoyer le message de test.Vous devrez ensuite vous connecter et vérifier ces adresses e-mail.L'e-mail sera envoyé via Amazon (c'est tout l'intérêt) mais l'adresse e-mail de l'expéditeur peut être votre adresse gmail.

  1. Télécharger le fichier AWSSDK.dll depuis Internet utiliser les espaces de nom suivants
using Amazon;
using Amazon.SimpleEmail;
using Amazon.SimpleEmail.Model;

using System.Net.Mail;

2.Ajouter à la configuration Web ...

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

3.Ajoutez une classe AWSEmailSevice à votre projet qui permettra d'envoyer du courrier via 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. Utilisez la classe ci-dessus pour envoyer du courrier à n'importe qui avec le remplacement des variables de pièce jointe et de modèle (c'est facultatif) // Appelez cette méthode pour envoyer votre email

chaîne publique SendEmailViaAWS () { string emailStatus="";

      //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 J'ai créé ce code très simple pour envoyer des e-mails

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);
        }
     }
  }
}

Vous pouvez trouver le code ici https://github.com/gianluis90/amazon-envoyer un e-mail

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top