Skip to content

Instantly share code, notes, and snippets.

@rushfrisby
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rushfrisby/1d0430d1335f9ce6e446 to your computer and use it in GitHub Desktop.
Save rushfrisby/1d0430d1335f9ce6e446 to your computer and use it in GitHub Desktop.
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Net.Configuration;
using System.Net.Mail;
using System.Text;
using System.Web;
namespace sql_emailer
{
class Program
{
static void Main(string[] args)
{
if (args == null || args.Count() < 3)
return;
var fileName = args.First();
if (String.IsNullOrWhiteSpace(fileName))
return;
if (!File.Exists(fileName))
return;
var query = File.ReadAllText(fileName);
var title = args.Skip(1).First();
if (String.IsNullOrWhiteSpace(title))
{
var fileInfo = new FileInfo(fileName);
title = String.Format("Results for {0}", fileInfo.Name);
}
var argEmails = args.Skip(2).First();
if (String.IsNullOrWhiteSpace(argEmails))
return;
var emailAddresses = argEmails.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var connectionName = "DefaultConnectionString";
if (args.Count() == 4)
{
connectionName = args.Skip(3).First();
}
var connectionString = ConfigurationManager.AppSettings[connectionName];
var sb = new StringBuilder();
sb.AppendFormat("<h1 style='font-family:Arial;'>{0}</h1>", HttpUtility.HtmlEncode(title));
sb.Append("<table style='border-collapse:collapse;border:1px solid #002F4B;'><thead><tr>");
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand
{
CommandText = query,
CommandType = CommandType.Text,
Connection = conn,
CommandTimeout = 600
};
conn.Open();
using (var reader = cmd.ExecuteReader())
{
for (var i = 0; i < reader.FieldCount; i++)
{
sb.AppendFormat("<th style='white-space:nowrap;background-color:#004E7D;color:#FFFFFF;border:1px solid #002F4B;padding:5px;font-family:Arial;'>{0}</th>", HttpUtility.HtmlEncode(reader.GetName(i)));
}
sb.Append("</tr></thead><tbody>");
var zebra = 0;
while (reader.Read())
{
var bgcolor = "#FFFFFF";
if (zebra%2 == 0)
bgcolor = "#C9DCE5";
zebra++;
sb.Append("<tr>");
for (var i = 0; i < reader.FieldCount; i++)
{
sb.AppendFormat("<td style='vertical-align:top;background-color:" + bgcolor + ";border:1px solid #002F4B;padding:5px;font-family:Arial;'>{0}</td>", HttpUtility.HtmlEncode(reader.GetValue(i)));
}
sb.Append("</tr>");
}
}
conn.Close();
}
sb.Append("</tbody></table>");
var fromAddress = "noreply@domain.com";
try
{
var smtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;
fromAddress = smtpSection.From;
}
catch
{
fromAddress = "noreply@domain.com";
}
var msg = new MailMessage
{
IsBodyHtml = true,
Subject = title,
Body = sb.ToString(),
From = new MailAddress(fromAddress)
};
foreach (var emailAddress in emailAddresses)
{
msg.To.Add(new MailAddress(emailAddress));
}
var smtp = new SmtpClient();
smtp.Send(msg);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment