SMTP почтовый клиент на c#





В этом примере я покажу, как можно создать простенький почтовый SMTP клиент на c#.

Принцип работы этого клиента заключается в следующем:

бот загружает из таблицы exel специальную базу с email адресами юзеров. Эта exel таблица состоит из трёх столбцов: A,B,C.

В столбце A — содержится «Адрес почты клиента», B — «Заголовок письма», C — «Текст письма».

После того как база загружена в компонент dataGridView можно нажать кнопку «Пуск», запуститься таймер comboBox. Письма находящиеся в таблице exel будут отправляется строго по истечению заданного интервала времени, т.е. каждые 30 сек.

 using System;
 using System.Windows.Forms;
 using System.Net.Mail;
 using System.Net;
 using System.Threading;
 namespace WindowsFormsApplication3
 {
     public partial class Form1 : Form
     {
         int i;
         TimeSpan totalTime;
         [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
         public static extern int GetWindowThreadProcessId([System.Runtime.InteropServices.InAttribute()] System.IntPtr hWnd, out int lpdwProcessId);
         public Form1()
         {
             InitializeComponent();
             button2.Enabled = false;
         }
         void timer22()
         {
             totalTime = new TimeSpan(0, 0, 0, Convert.ToInt32(comboBox1.Text));
             label1.Text = totalTime.ToString();
             timer2.Start();
             timer2.Interval = 1000;
         }
         void SendMail(string ToMail, string Test, string TextLetter, string smtp_mail_com, string port, string FromMail, string password, string name)
         {
             MailAddress from = new MailAddress(FromMail, name);
             // кому отправляем
             MailAddress to = new MailAddress(ToMail);
             // создаем объект сообщения
             MailMessage m = new MailMessage(from, to);
             // тема письма
             m.Subject = Test;
             // текст письма
             m.Body = TextLetter; 
             // письмо представляет код html
             m.IsBodyHtml = true;
             // адрес smtp-сервера и порт, с которого будем отправлять письмо
             SmtpClient smtp = new SmtpClient(smtp_mail_com, Convert.ToInt32(port));
             // логин и пароль
             smtp.Credentials = new NetworkCredential(FromMail, password);
             smtp.EnableSsl = true;
             Thread t1 = new Thread(delegate ()
             {
                 smtp.Send(m);
                 Console.Read();
             });
             t1.Start();
         }
         private void button1_Click(object sender, EventArgs e)
         {
             int err = 0;
             foreach (Control c in Controls)
             {
                 if (c is System.Windows.Forms.TextBox)
                 {
                     if (string.IsNullOrEmpty((c as System.Windows.Forms.TextBox).Text)) err++;
                 }
             }
             if (err > 0)
                 MessageBox.Show($"Неправильно заполнены поля");
             else
             {
                 timer22();
                 button2.Enabled = true;
                 timer1.Start();
                 timer1.Interval = Convert.ToInt32(comboBox1.Text) * 1000;
                 button1.Enabled = false;
             }
         }
         private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
         {
             string str;
             int rCnt;
             int cCnt;
             OpenFileDialog opf = new OpenFileDialog();
             opf.Filter = "Excel (<em>.xlsx)|</em>.xlsx";
             opf.ShowDialog();
             System.Data.DataTable tb = new System.Data.DataTable();
             string filename = opf.FileName;
             Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
             Microsoft.Office.Interop.Excel._Workbook ExcelWorkBook;
             Microsoft.Office.Interop.Excel.Worksheet ExcelWorkSheet;
             Microsoft.Office.Interop.Excel.Range ExcelRange;
             if (filename != "")
             {
                 ExcelWorkBook = ExcelApp.Workbooks.Open(filename, 0, false, 5, "", "", true,
                 Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                 if (ExcelWorkBook == null)
                 {
                 }
                 ExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
                 ExcelRange = ExcelWorkSheet.UsedRange;
                 for (rCnt = 1; rCnt &lt;= ExcelRange.Rows.Count; rCnt++)
                 {
                     dataGridView1.Rows.Add(1);
                     for (cCnt = 1; cCnt &lt;= 3; cCnt++)
                     {
                         str = (string)(ExcelRange.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value2;
                         dataGridView1.Rows[rCnt - 1].Cells[cCnt - 1].Value = str;
                     }
                 }
                 if (filename == "")
                 {
                     ExcelWorkBook.Close(true, null, null);
                     ExcelApp.Quit();
                 }
                 ExcelWorkBook.Close(0);
                 ExcelApp.Quit();
                 releaseObject(ExcelWorkSheet);
                 releaseObject(ExcelWorkBook);
                 releaseObject(ExcelApp);
             }
         }
         private void releaseObject(object obj)
         {
             try
             {
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                 obj = null;
             }
             catch (Exception ex)
             {
                 obj = null;
                 MessageBox.Show("Unable to release the object " + ex.ToString());
             }
             finally
             {
                 GC.Collect();
             }
         }
         private void timer1_Tick(object sender, EventArgs e)
         {
             i += 1;
             {
                 SendMail(dataGridView1.Rows[i].Cells[0].Value.ToString(), dataGridView1.Rows[i].Cells[1].Value.ToString(), dataGridView1.Rows[i].Cells[2].Value.ToString(),
 textBox1.Text, textBox4.Text, textBox2.Text, textBox3.Text, textBox5.Text);
                 dataGridView1.Rows[i - 1].Selected = false;
                 dataGridView1.Rows[i].Selected = true;
             }
             if (dataGridView1.Rows[i].Cells[0].Value != null)
             {
                 label3.Text = "Письмо на" + " " + dataGridView1.Rows[i].Cells[0].Value.ToString() + " " + "отправлено.";
                 label2.Text = "Отправленных писем:" + " " + i.ToString();
             }
             if (dataGridView1.Rows[i + 1].Cells[0].Value == null)
             {
                 timer1.Stop();
                 timer2.Stop();
                 button1.Enabled = true;
                 button2.Enabled = false;
                 i = 0;
                 MessageBox.Show("Все письма отправлены!");
                 return;
             }
             timer22();
         }
         private void button2_Click(object sender, EventArgs e)
         {
             timer1.Stop();
             timer2.Stop();
             button1.Enabled = true;
             button2.Enabled = false;
         }
         private void timer2_Tick(object sender, EventArgs e)
         {
             totalTime = totalTime.Subtract(new TimeSpan(0, 0, 0, 1));
             label1.Text = totalTime.ToString();
             if (totalTime.Seconds == 0)
             {
                 timer2.Stop();
             }
         }
     }
 }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*