sometimes notification email is required to be sent so that receivers can know about the data load status. Following C# code in SSIS script task is composed to meet the requirement.
1. drag a SQL task to get data result and assigned full set to an object variable(e.g.oCompleteFileList)
2. drag a script task to compose HTML message body and send email
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Net.Mail;
public void Main()
{
// TODO: Add your code here
//Variable list
//User::ccSeller,User::sEmailFrom,User::nFileCount,User::oCompleteFileList,User::sEmailToList,User::Environment
string vSeller = Dts.Variables["ccSeller"].Value.ToString();
string vEmailFrom = Dts.Variables["sEmailFrom"].Value.ToString();
string vEmailTo = Dts.Variables["sEmailToList"].Value.ToString();
object vFileList = Dts.Variables["oCompleteFileList"].Value;
int vFileCount = (int)Dts.Variables["nFileCount"].Value;
string vEnv = Dts.Variables["Environment"].Value.ToString();
//setup smtp connection
SmtpClient vSmtp = new SmtpClient();
string vSmtpcm = Dts.Connections["SMTP Connection Manager"].ConnectionString.ToString();
vSmtp.Host = (vSmtpcm.Split(‘;‘)[0]).Split(‘=‘)[1];
vSmtp.UseDefaultCredentials = true;
MailMessage vmsg = new MailMessage();
//send from
vmsg.From = new MailAddress(vEmailFrom);
//send to
Array vToList = vEmailTo.Split(‘;‘);
foreach (string s in vToList)
{
vmsg.To.Add(new MailAddress(s));
}
//message subject and message body
vmsg.IsBodyHtml = true;
OleDbDataAdapter oleDA = new OleDbDataAdapter();
DataTable dt = new DataTable();
string rc = "", msgxml = "", hd = "";
string newline = Environment.NewLine;
string blank4 = " ", blank1 = " ";
if (vFileCount == 0)
{
msgxml = "No files were loaded";
vmsg.Subject =vEnv + ":" + vSeller + " - No files were loaded.";
}
else
{
//read sql result
oleDA.Fill(dt, vFileList);
//compose table header
foreach (DataColumn col in dt.Columns)
{
hd = hd + "<th style=‘border:1px solid black‘>" + col.ColumnName + "</th>";
}
hd = "<tr style=‘background-color:#4F81BD;color:white‘>" + hd + "</tr>" + newline;
//compose table content
foreach (DataRow row in dt.Rows)
{
rc = "";
foreach (DataColumn col in dt.Columns)
{
if (col.Ordinal != dt.Columns.Count - 1)
{
rc = rc + "<td style=‘border:1px solid‘>" + blank1 + row[col.Ordinal].ToString() + blank4 + "</td>";
}
else
{
if (row[col.Ordinal].ToString().ToUpper() == "SUCCESS")
{
rc = rc + "<td style=‘border:1px solid;background-color:green‘>" + blank1 + row[col.Ordinal].ToString() + blank4 + "</td>";
}
else
{
rc = rc + "<td style=‘border:1px solid;background-color:red‘>" + blank1 + row[col.Ordinal].ToString() + blank4 + "</td>";
}
}
}
msgxml = msgxml + "<tr>" + rc + "</tr>" + newline;
}
//compose final xml
msgxml = "<table cellspacing=50 style=‘border:1px solid;border-collapse:collapse‘>" + newline + hd + msgxml + "</table>";
vmsg.Subject = vEnv + ":" + vSeller + " - Detail loaded files list";
}
vmsg.Body = msgxml;
//send email
vSmtp.Send(vmsg);
Dts.TaskResult = (int)ScriptResults.Success;
}
}