What about if we want to send an e-mail asynchronously? User clicks send e-mail button or starts any action on the ui and e-mail is sending asynchronously. It means, user can continue work on the ui and shows an information to user on the ui when message is transmitted. It sounds good.
I have created an e-mail functionality class to send e-mail in C#. And it has send asynchronously capability. I hope it will be useful for you.
Properties of e-mail class :
object Token : A user-defined object that is passed to the method invoked when the asynchronous operation completes.(use when IsAsync = true) EmailSettings.NetworkSettings NetworkSettings : Network settings of SMTP string From : From address for e-mail message string[] To : Recipient(s) of e-mail message string[] CC : CC recipient(s) of e-mail message string[] Bcc : Bcc recipient(s) of e-mail message string Subject : Subject of e-mail message string Body : E-mail message body bool IsBodyHtml : Set true if body of e-mail message is in Html. bool IsAsync : Set true to send e-mail asynchronously.
When you want to send e-mail:
// set network settings of SMTP server EmailSettings.NetworkSettings networkSettings = new EmailSettings.NetworkSettings(host, port, userName, password, enableSsl); // create and e-mail Email email = new Email(); // set properties email.NetworkSettings = networkSettings; email.From = ... email.To = ... email.Subject = ... email.Body = ... // send e-mail email.Send();
If you want to send e-mail asynchronously, just set asynchronous properties of
email
object.
// set async properties and events email.IsAsync = true; email.Token = _asyncToken; email.SendCompleted += new Email.SendCompletedEventHandler(email_SendCompleted);
and create a
SendCompleted
event
void email_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { if ((int)e.UserState == _asyncToken) { // do something, for example show notification to user } }
You can find source code and sample usage on
0 comments:
Post a Comment