Showing posts with label Email. Show all posts
Showing posts with label Email. Show all posts

How to send periodic/timely Emails

I was busy during last few months and can not spare time for my blog. However during my project i came up with a situation that I have to send emails on daily basis through system. I would like to share the different approaches which I found during my goggling.

I came across three options to accomplish this:-

1- Create a simple .exe file which sends the mails and add it in windows scheduled tasks.
How To Schedule Task in Windows XP

2- Create a Window Service, which sleeps for 24 hours after sending emails.
Simple Windows Service Sample

3- Create a JOB in Sql Server. For details see:
Automated Email Notifications using SQL Server Job Scheduler

How to Test System Generated Emails without Internet in Vista

Recenetly I have to develop a system which generates highly formatted emails. And I decided that I will do that in my home instead of office. After spending some time I figure out a way to do this. I configured IIS server in Windows Vista to save emails in my local drive. and I can see those emails from my outlook express. Here are the details that how to configure IIS:-
1- Run IIS from Start->run->inetmgr
2- Select your PC name from connections pane. and Right Click on SMTP E-Mail in middle pane.

3- In Features screen select Store e-mail in a pickup directory.

4- I have entered D:\Mails in the path.
5- Now goto D:\Mails (or what ever folder you mentioend).
6- When your application sends mail , mails will be saved in that folder with .eml extension. You can view those files with outlook.

7- If still not getting emails in your folder then try to add this line in your code before sending email:-

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

Send Mails Via .Net


Here is the code to send mails via .Net:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Threading;

/// <summary>
/// Summary description for Emailing
/// </summary>
public class Emailing
{
private const int SmtpPort = 25;
private const string SmtpServer = "__SMTP SERVER NAME___";
private const string UserName = "__ USER NAME ___";
private const string Password = "__ PASSWORD __";
private const bool EnableSsl = false; //For Gmail Server set it to true

/// <summary>    
/// Sends the mail    
/// </summary>    
/// <param name="toEmailAddresses">';' seperated To email addresses.</param>    
/// <param name="fromEmailAddress">From email address.</param>    
/// <param name="subject">The subject.</param>    
/// <param name="body">The body.</param>    
/// <param name="mailAttachments">';' seperated mail attachments.</param>    
/// <param name="isBodyHTML">is body HTML.</param>   
public static void SendMail(string toEmailAddresses, string fromEmailAddress, string subject,
string body, string mailAttachments, bool isBodyHTML)
{
char[] splitter = { ';' };
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(fromEmailAddress);
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.IsBodyHtml = isBodyHTML;

//Adding Multiple To Addresses
string[] mailAddresses = toEmailAddresses.Split(splitter);
foreach (string mailAddress in mailAddresses)
{
if (mailAddress.Length != 0)
{
mailMessage.To.Add(new MailAddress(mailAddress));
}
}

//Adding Multiple Attachments
string[] attachments = mailAttachments.Split(splitter);
foreach (string attachment in attachments)
{
if (attachment.Length != 0)
{
Attachment attachFile = new Attachment(attachment);
mailMessage.Attachments.Add(attachFile);
}
}

SmtpClient smtpClient = new SmtpClient();
try
{
smtpClient.Host = SmtpServer;
smtpClient.EnableSsl = EnableSsl;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = UserName;
NetworkCred.Password = Password;
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = NetworkCred;
smtpClient.Port = SmtpPort;
smtpClient.Send(mailMessage);
}
catch
{
mailMessage = null;
smtpClient = null;
}
}
/// <summary>    
/// Sends the mail on thread.    
/// </summary>    
/// <param name="toEmailAddresses">';' seperated To email addresses.</param>    
/// <param name="fromEmailAddress">From email address.</param>    
/// <param name="subject">The subject.</param>    
/// <param name="body">The body.</param>    
/// <param name="mailAttachments">';' seperated mail attachments.</param>    
/// <param name="isBodyHTML">is body HTML.</param>    
public static void SendMailOnThread(string toEmailAddresses, string fromEmailAddress, string subject,
string body, string mailAttachments, bool isBodyHTML)
{
Thread mailThread; mailThread = new System.Threading.Thread(delegate()
{
SendMail(toEmailAddresses, fromEmailAddress, subject, body, mailAttachments, isBodyHTML);
});
mailThread.IsBackground = true; mailThread.Start();

}

}


You can use this class like :-

//Send Simple Mail
Emailing.SendMail("sample@sample.com", "sample@sample.com", "Subject is test", "body is Test", "", true);

//Send mail on thread with two attachments
Emailing.SendMailOnThread("sample@sample.com", "sample@sample.com", "Subject is test", "body is Test", 
"c:\\setup.log;c:\\setup1.log;", true);

In case you want to send emails through Gmail server, then use these settings:-
private const int SmtpPort = 465;//if 465 do not work then try 587
private const string SmtpServer = "smtp.gmail.com";
private const string UserName = "__ USER NAME ___";
private const string Password = "__ PASSWORD __";
private const bool EnableSsl = true;