Wednesday 20 November 2013

Send Email using WCF Service in C#.net



Hi Friends,

In this article I will tell you how to send email using WCF Service. We can send email directly from the client; however, in some cases you can't send external emails directly. In that case we need WCF service for sending email from client.
In this article, I will first explain how to create WCF service then I will try to implement email functionality using WCF Service. In this article I am using Gmail to send email., that why user must have gmail account for sending email.

1.    Create WCF Service Class Library

Create a new Project WCF Class Library Project and Name it EmailServices. 





Step 1: Create service contract as IEmailService and add OperationContract SendEmail for sending email. This method uses gmailuseraddress ,password and email to and cc subject as parameter


[ServiceContract]
    public interface IEmailService
    {
        [OperationContract]
        string SendEmail(string gmailUserAddress, string gmailUserPassword, string[] emailTo,string[] ccTo, string subject, string body, bool isBodyHtml);
             
    }

Step 2: Add EmailService class and Implement IEmailService. 


public class EmailService : IEmailService
    {
        private static string SMTPSERVER = "smtp.gmail.com";
        private static int PORTNO = 587;

        public string SendEmail(string gmailUserName, string gmailUserPassword, string[] emailToAddress, string[] ccemailTo, string subject, string body, bool isBodyHtml)
        {           
            if (gmailUserName == null || gmailUserName.Trim().Length == 0)
            {
                return "User Name Empty";
            }
            if (gmailUserPassword == null || gmailUserPassword.Trim().Length == 0)
            {
                return "Email Password Empty";
            }
            if (emailToAddress == null || emailToAddress.Length == 0)
            {
                return "Email To Address Empty";
            }

            List<string> tempFiles = new List<string>();

            SmtpClient smtpClient = new SmtpClient(SMTPSERVER, PORTNO);
            smtpClient.EnableSsl = true;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.UseDefaultCredentials = false;
            smtpClient.Credentials = new NetworkCredential(gmailUserName, gmailUserPassword);
            using (MailMessage message = new MailMessage())
           
            {
                message.From = new MailAddress(gmailUserName);
                message.Subject = subject == null ? "" : subject;
                message.Body = body == null ? "" : body;
                message.IsBodyHtml = isBodyHtml;

                foreach (string email in emailToAddress)
                {                  
                    message.To.Add(email);
                }
                if (ccemailTo != null && ccemailTo.Length > 0)
                {
                    foreach (string emailCc in ccemailTo)
                    {                      
                        message.CC.Add(emailCc);
                    }
                }
                try
                {
                    smtpClient.Send(message);                
                    return "Email Send SuccessFully";
                }
                catch
                {                 
                    return "Email Send failed";
                }
            }



        }
    }


Step 3: Build your Class library.


2.    Add WCF Service Application Project

 
Step 1: Add reference of Classlibrary Project to that WCFServiceHost project.
Step 2: Delete IService1.Cs and codebehind file
Step3 : Right click on that SaleService.svc and select view Markup:


Step 4: Change the Service Name from that markup:
<%@ ServiceHost Language="C#" Debug="true" Service="EmailServices.EmailService" CodeBehind="EmailService.svc.cs" %>