Solved

Sending Emails Asynchronously

Posted on 2009-04-09
2
318 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…

623 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