Cum sa trimiti email-uri din cod (C#)

  • Doru Bulubasa
  • 31 March 2016

In ultima vreme, lucrand la diferitele update-uri necesare site-ului nostru sau a aplicatiilor pe care le avem in portofoliu (sau in lucru) ne-am lovit de nevoia de a expedia email-uri.

Am descoperit ca sunt ceva mai multe posibilitati de a face acest lucru:
1. SMTP (direct mail)
2. SQL DB Mail (aici avem nevoie de o instanta SQL Server)
3. Utilizarea unui SDK al unui serviciu de trimitere de mail-uri (noi fiind parteneri Microsoft, utilizam SendGrid API).

O sa descriem acum, in detaliu, cum se face trimiterea prin fiecare metoda.

SMTP

Aceasta metoda este cea mai uzuala si cea mai simpla de folosit. Nu iti trebuie decat acces la o adresa de mail si nimic mai mult. Codul este unul foarte simplu:

        protected void SendEmail()
        {
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Host = "mail.ludoprogramming.com";
            smtpClient.Credentials = new System.Net.NetworkCredential("UserName", "Password");
            smtpClient.Port = 25;//Usualy it is port 25 for custom domain
            MailAddress addr = new MailAddress("destination@mail.com");
            MailMessage mail = new MailMessage();
            mail.IsBodyHtml = true;
            mail.From = new MailAddress("no-reply@ludoprogramming.com", "Test email");
            mail.To.Add(addr);
            mail.Subject = "Email test subject";
            mail.Body = "This is the mail body! You can add here an HTML interface.";
          mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure | DeliveryNotificationOptions.OnSuccess | DeliveryNotificationOptions.Delay;
            mail.Headers.Add("Disposition-Notification-To", "marketing@ludoprogramming.com");
            AlternateView alternate = AlternateView.CreateAlternateViewFromString("This is the mail body! You can add here an HTML interface.",
                new System.Net.Mime.ContentType("text/html")); //the AlternateView is mainly for YAHOO
            mail.AlternateViews.Add(alternate);
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.Send(mail);
        }

SQL DB Mail

Aceasta metoda este ceva mai complexa. In primul rand, trebuie activat SQL DB Mail pe SQL Server-ul nostru. Apoi trebuie setat profilul (gasiti aici mai multe detalii despre cum sa creati profilul).

Din punct de vedere al codul nu trebuie decat sa trimitem datele corecte la o anumita procedura stocata: sp_send_dbmail (este chiar mai simplu decat SMTP).

        protected void SendEmail()
        {
            SqlConnection SqlConn = new SqlConnection("data base connection string");
            SqlCommand sqlCmd = new SqlCommand("sp_send_dbmail", SqlConn);
            sqlCmd.CommandType = CommandType.StoredProcedure;
            List<SqlParameter> List = new List<SqlParameter>();
            List.Add(new SqlParameter { ParameterName = "@profile_name", Value = "SqlDbMailProfile", SqlDbType = SqlDbType.VarChar });
            List.Add(new SqlParameter { ParameterName = "@recipients", Value = "destination@mail.com", SqlDbType = SqlDbType.VarChar });
            List.Add(new SqlParameter { ParameterName = "@from_address", Value = "no-reply@ludoprogramming.com", SqlDbType = SqlDbType.VarChar });
            List.Add(new SqlParameter { ParameterName = "@subject", Value = "Email test subject", SqlDbType = SqlDbType.VarChar });
            List.Add(new SqlParameter { ParameterName = "@body_format", Value = "HTML", SqlDbType = SqlDbType.VarChar });
            List.Add(new SqlParameter { ParameterName = "@body", Value = "This is the mail body! You can add here an HTML interface.", SqlDbType = SqlDbType.VarChar });
            SqlConn.Open();
            sqlCmd.ExecuteNonQuery();
            SqlConn.Close();
        }

Cele doua metode de mai sus sunt recomandate pentru trimiterea de email-uri unul cate unul. Nu se recomanda trimiterea masiva de mesaje (oricum, trebuie verificate limitele impuse de servere-le de mail inainte de a face setarile).

SendGrid API

UtilizandAPI-ul SendGrid se poate trimite si masiv. Conditia de baza este insa urmatoarea: acele adrese de mail catre care se face expedierea sa fie corecte, iar utilizatorul sa fi acceptat sa primeasca acele mail-uri. In caz contrar, exista posibilitatea ca si reputatia profilului sa scada si sa atraga de la sine suspendarea sau chiar anularea contului.

Acestea fiind spuse, iata codul:

        protected void SendEmail()
        {
            SendGridMessage message = new SendGridMessage();
            string username = "SendGrid UserName";
            string pswd = "Password";
            message.AddTo("destination@mail.com");
            message.From = new MailAddress("no-reply@ludoprogramming.com", "");
            message.Subject = "Email test subject";
            message.Html = "This is the mail body! You can add here an HTML interface.";
            message.EnableClickTracking(true);
            message.EnableOpenTracking();
            NetworkCredential credentials = new NetworkCredential(username, pswd);
            Web transportWeb = new Web(credentials);
            transportWeb.DeliverAsync(message);
        }

🤖 Întreabă AI despre acest articol

AI Răspuns generat de AI pe baza acestui articol.
AI scrie răspunsul…

Scrie un comentariu

Adresa de mail nu va fi publicata. Campurile obligatorii sunt marcate cu *