Sending Emails using SendGrid in C#.net

SendGrid has been built from the ground up as an API company. It is built to serve developers and make it easy to send email no matter your environment. You can send email over SMTP or HTTP, and even use one of it’s official client libraries. In just a few minutes, you can send your first email and millions more. It has different pricing plans for you , so you can select as you want. There is a free plan to which you can send up to 12,000 emails per month for free.

For more details about pricing visit here

1. Create an account in SendGrid

2. Create a Console Application and add the following nuget package.

SendGrid 5.1.0

3. Create a email template in SendGrid.

4. In the following example I’m loading some user information saved in a CSV file and then send password information for those users. Following is the template I have created for that in SendGrid. In the template I have used “{{}}” to specify the tags. You can use what ever the tab you want but make sure you use the same tag when you send the email request to sendgrid

Email Template
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. </head>
  6. <body>
  7. <p>&lt;%body%&gt;</p>
  8.  
  9. <p>Dear {{FirstName}}</p>
  10.  
  11. <p>You have been granted access to  raise online Facilities Service Requests.</p>
  12.  
  13. <p>Your user id is : {{UserName}}</p>
  14.  
  15. <p>Your password is:&nbsp; {{Password}}</p>
  16.  
  17. <p>Thanks</p>
  18.  
  19. </body>
  20. </html>
  21. <title></title>

5. Create a User Model class

  1. public class User
  2.     {
  3.         public string UserName { get; set; }
  4.         public string Password { get; set; }
  5.         public string FirstName { get; set; }
  6.         public string LastName { get; set; }
  7.         public string Email { get; set; }
  8.     }

6. Load CSV file to DataTable

  1. public static System.Data.DataTable LoadContent(string filePath)
  2.       {
  3.           StreamReader sr = new StreamReader(filePath);
  4.           string[] headers = sr.ReadLine().Split(',');
  5.           DataTable dt = new DataTable();
  6.           foreach (string header in headers)
  7.           {
  8.               dt.Columns.Add(header);
  9.           }
  10.           while (!sr.EndOfStream)
  11.           {
  12.               string[] rows = sr.ReadLine().Split(',');
  13.               DataRow dr = dt.NewRow();
  14.               for (int i = 0; i < headers.Length; i++)
  15.               {
  16.                   dr[i] = rows[i];
  17.               }
  18.               dt.Rows.Add(dr);
  19.           }
  20.           return dt;
  21.       }

7. Load User List using the DataTable

  1.  public static List<User> GetUserList(DataTable content)
  2.       {
  3.           List<User> users = new List<User>();
  4.  
  5.             foreach (DataRowrow in content.Rows)
  6.           {
  7.               User user = new User();
  8.               user.FirstName = row["FirstName"].ToString();
  9.               user.LastName = row["LastName"].ToString();
  10.               user.UserName = row["UserName"].ToString();
  11.               user.Password = row["Password"].ToString();
  12.               user.Email = row["Email"].ToString();
  13.               users.Add(user);
  14.           }
  15.  
  16.           return users;
  17.       }

8. Send Email to users using SendGrid

  1. public static void SendEmail(string filePath)
  2.       {
  3.           DataTable content = LoadContent(filePath);
  4.  
  5.           List<User> users = GetUserList(content);
  6.  
  7.           foreach (User user in users)
  8.           {
  9.               string xmstpapiJson = GetMessageHeader(user);
  10.  
  11.               SendGridMessage sendGridMessage = new SendGridMessage();
  12.               sendGridMessage.From = new MailAddress(fromAddress, fromName);
  13.               sendGridMessage.AddTo(user.Email);
  14.               sendGridMessage.Subject = "New Registration";
  15.               sendGridMessage.Headers.Add("X-SMTPAPI", xmstpapiJson);
  16.               sendGridMessage.Html = string.Format(" ");
  17.  
  18.  
  19.               var userName = sendGridUserName;
  20.               var password = SendGridPassword;
  21.               var credentials = new NetworkCredential(userName, password);
  22.               var transportWeb = new Web(credentials);
  23.  
  24.               transportWeb.Deliver(sendGridMessage);
  25.               Console.WriteLine("Email Sent to:"+user.Email);
  26.            
  27.               
  28.           }
  29.  
  30.           Console.WriteLine(string.Format("{0} Emails Sent", users.Count()));
  31.           Console.ReadLine();
  32.           
  33.       }
  34.  
  35.       private static string GetMessageHeader(User user)
  36.       {
  37.           var header = new Header();
  38.  
  39.           header.AddSubstitution("{{FirstName}}", new List<string> { user.FirstName });
  40.           header.AddSubstitution("{{LastName}}", new List<string> { user.LastName });
  41.           header.AddSubstitution("{{UserName}}", new List<string> { user.UserName });
  42.           header.AddSubstitution("{{Password}}", new List<string> { user.Password });
  43.           header.AddFilterSetting("templates", new List<string> { "enabled" }, "1");
  44.           header.AddFilterSetting("templates", new List<string> { "template_id" }, "67d23037-08bc-445a-bda1-903f6af65b67");
  45.           return header.JsonString();
  46.       }

 

Hope This Helps.

 

Happy Coding !!!

Comments

  1. Great article, it was very helpful! I just started in this and I'm getting to know it better! Cheers, keep up the good work!
    w3 plans

    ReplyDelete
  2. Hi
    I'm trying to send an email template which consists images. But attached inline images are not showing on the received mails. When I send using the Sendgrid Testing area on their site, images are visible on received emails. Glad if you can share any insights regarding this matter..

    Thanks in advance.

    ReplyDelete
  3. Thank you for sharing your thoughts and knowledge on this topic. This is really helpful and informative, as this gave me more insight to create more ideas and solutions for my plan. I would love to see more updates from you.

    Melbourne Web Designer

    ReplyDelete

Post a Comment

Popular posts from this blog

Responsive Web Design

Affine Cipher in C#

Contract First Development in WCF 4.5