В этом примере я покажу, как можно создать простенький почтовый 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 <= ExcelRange.Rows.Count; rCnt++) { dataGridView1.Rows.Add(1); for (cCnt = 1; cCnt <= 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(); } } } }