Solved

Sending Emails Asynchronously

Posted on 2009-04-09
2
314 Views
Last Modified: 2013-12-17
Hello,

I am trying to implement some sample code provided at http://www.eggheadcafe.com/articles/20030720.asp .  However, I cannot get the actually threading to execute.

If I simply call it synchronously, the code works fine.  

Please advise.

Trumpman
namespace addmik.massmail.send
{
    
    
    public class sendEmail
    {
        private string htmlFilePath;
        public string HtmlFilePath
        {
            get
            {
                return htmlFilePath;
            }
            set
            {
                htmlFilePath = value;
            }
        }
        private string subject;
        
        public string Subject
        {
            get
            {
                return subject;
            }
            set
            {
                subject = value;
            }
        }
 
        private string smtpServer;
        public string SmtpServer
        {
            get
            {
                return smtpServer;
            }
            set
            {
                smtpServer = value;
            }
        }
 
        private string fromEmail;
        public string FromEmail
        {
            get
            {
                return fromEmail;
            }
 
            set
            {
                fromEmail = value;
            }
        }
 
        private string emailBody;
        public string EmailBody
        {
            get
            {
                return emailBody;
            }
 
            set
            {
                emailBody = value;
            }
        }
 
 
        public string strBody = String.Empty;
 
        public string SendEmail(string name, string emailAddress)
        {
           /* 
            if (strBody == String.Empty)
            {
                try
                {
                    using (StreamReader reader = new StreamReader(this.HtmlFilePath))
                    {
                        strBody = reader.ReadToEnd();
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("error reading HTML File" + ex.Message);
                }
            }*/
            try
            {
                MailMessage Message = new MailMessage();
                Message.BodyFormat = MailFormat.Html;
                Message.To = emailAddress;
                Message.From = this.FromEmail;
                Message.Subject = this.Subject;
                Message.Body = this.EmailBody;
                SmtpMail.SmtpServer = this.SmtpServer;
                SmtpMail.Send(Message);
            }
            catch (System.Web.HttpException ehttp)
            {
                throw new Exception("Send error" + ehttp.Message);
            }
            return "sent" + name;
        }
        public delegate string SendEmailDelegate(string name, string emailAddress);
 
        public void GetResultsOnCallback(IAsyncResult ar)
        {
 
            SendEmailDelegate del = (SendEmailDelegate)
             ((AsyncResult)ar).AsyncDelegate;
            try
            {
                string result;
                result = del.EndInvoke(ar);
                Debug.WriteLine("\nOn CallBack: result is " + result);
            }
            catch (Exception ex)
            {
                
                Debug.WriteLine("\nOn CallBack, problem occurred: " + ex.Message);
            }
        }
 
        public string SendEmailAsync(string name, string emailAddress)
        {
 
           //this function executes
             this.SendEmail(name, emailAddress);
            
           // the following lines do not execute
            SendEmailDelegate dc = new SendEmailDelegate(this.SendEmail);
            
            AsyncCallback cb = new AsyncCallback(this.GetResultsOnCallback);
            IAsyncResult ar = dc.BeginInvoke(name, emailAddress, cb, null);
            
            return "ok";
        }
    } // end class sendEmail
}

Open in new window

0
Comment
Question by:trumpman
2 Comments
 
LVL 26

Accepted Solution

by:
Anurag Thakur earned 500 total points
ID: 24113989
0
 

Author Comment

by:trumpman
ID: 24207752
Thank you.  Sorry for the delay in response.  Am I correct to assume from this link that if decided to use this class to send an email blast to several hundred addresses at once..it would queue appropriately..keep the system from bogging down while all the emails are sent?  I believe that is what the code is doing.  Can you confirm?

- trumpman
0

Featured Post

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question