Send mail with attachment using C# and .Net

In previous article we have seen How to send mail Using C#, here we are using the same concept to send mail but additionally we are attaching the file to the mail. We will be pulling some data from Database, exporting into CSV file, and then the file will be sent as mail. Below is the example:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.IO;
using System.Net.Mail;
using System.Net;
using System.Data;
using System.Data.SqlClient;

namespace RECEIPT_INT_ERROR_LOG
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
             string constring = ConfigurationManager.AppSettings["connectionstring"].ToString();
             string AppLocation = "";
             AppLocation = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
             AppLocation = AppLocation.Replace("file:\\", "");
             string date = DateTime.Now.ToShortDateString();
             date = date.Replace("/", "_");
             string file = AppLocation + "\\ExcelFiles\\" + date + ".csv";
             SqlConnection conn = new SqlConnection(constring);
             conn.Open();
             SqlCommand cmd = new SqlCommand("select Name,Id,Status from logTable ", conn);
             cmd.CommandType = CommandType.Text;
             SqlDataAdapter da = new SqlDataAdapter(cmd);
             DataTable dt = new DataTable();
             da.Fill(dt);
             conn.Close();
             Program obj = new Program();
             obj.CreateCSVFile(dt, file);
             obj.mail(file);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception", e);
                Console.ReadLine();
            }

        }
        public void CreateCSVFile(DataTable dt, string strFilePath)
        {
            StreamWriter sw = new StreamWriter(strFilePath, false);
            int iColCount = dt.Columns.Count;
            int iRowcount = dt.Rows.Count;

            if (iRowcount != 0)
            {

                for (int i = 0; i < iColCount; i++)
                {
                    sw.Write(dt.Columns[i]);
                    if (i < iColCount - 1)
                    {
                        sw.Write(",");
                    }
                }
                sw.Write(sw.NewLine);
                foreach (DataRow dr in dt.Rows)
                {
                    for (int i = 0; i < iColCount; i++)
                    {
                        if (!Convert.IsDBNull(dr[i]))
                        {
                            sw.Write(dr[i].ToString());
                        }
                        if (i < iColCount - 1)
                        {
                            sw.Write(",");
                        }
                    }
                    sw.Write(sw.NewLine);
                }
            }
            else
            {
                sw.Write("Error Not Found");
            }
            sw.Close();
        }

        public void mail(string file)
        {
            try
            {
             MailMessage mail;
             SmtpClient smtp;
             string[] sendTo;
             mail = new MailMessage();
             sendTo = ConfigurationManager.AppSettings["toMailId"].Split(';');
             for (int i = 0; i < sendTo.Length; i++)
             {
                 mail.To.Add(sendTo[i]);
             }
             smtp = new SmtpClient("141.251.180.70");
             smtp.Timeout = 2147483647;
             mail.IsBodyHtml = true;
             mail.From = new MailAddress(ConfigurationManager.AppSettings["fromAddress"].ToString());
             mail.Subject = ConfigurationManager.AppSettings["mailSubject"].ToString();
             smtp.Credentials= new System.Net.NetworkCredential("fourthbottle@gmail.com", "MailPassword");
             System.Net.Mail.Attachment attachment;
             attachment = new System.Net.Mail.Attachment(file); //Attaching File to Mail 
             if (File.Exists(file))
             {
                 mail.Attachments.Add(attachment);
                 smtp.Send(mail);
             }
            }
            catch (Exception exp)
            {
                Console.WriteLine("Exception", exp);
            }
        }
    }
}