/// <summary> /// /// </summary> /// <param name="server"></param> /// <param name="emailAddress"></param> /// <param name="subject"></param> /// <param name="message"></param> public void SendEmail(SmtpServer server, string emailAddress, string subject, string message) { var mimeMessage = new MimeMessage(); var bodyBuilder = new BodyBuilder(); AmaraCode.Security sec = new AmaraCode.Security(); // from mimeMessage.From.Add(new MailboxAddress("Admin", server.UserName)); // to mimeMessage.To.Add(new MailboxAddress(emailAddress, emailAddress)); // reply to //message.ReplyTo.Add(new MailboxAddress("reply_name", "*****@*****.**")); mimeMessage.Subject = subject; bodyBuilder.HtmlBody = message; bodyBuilder.TextBody = message; mimeMessage.Body = bodyBuilder.ToMessageBody(); var client = new SmtpClient(); client.ServerCertificateValidationCallback = (s, c, h, e) => true; client.Connect(server.Host, server.Port, SecureSocketOptions.Auto); client.Authenticate(server.UserName, sec.Decrypt(server.Secret, Statics.EncryptionKey)); client.Send(mimeMessage); client.Disconnect(true); }
/// <summary> /// This is the command to actuatlly send emails /// </summary> public void SendEmail() { //prompt user for setup information EmailConfig ec = PromptUserForInput(); SmtpServer server = Statics.Servers[ec.Server]; if (server == null) { Display("Cannot located Server....", true, ConsoleColor.Red); PressAnyKey(); } //ask if they really want to send //create random 4 digit pin code var rnd = new Random(); var pin = rnd.Next(1000, 9999).ToString(); var userPin = GetUserInput($"\nType the number {pin} to start sending. \nAny other number will abort sending:", ConsoleColor.White, ConsoleColor.Green); if (pin != userPin) { Display("Send email aborted.", true, ConsoleColor.Red); PressAnyKey(); return; } try { //cycle for only the intervals set for (int x = 1; x <= ec.Interval; x++) { //determin if we are sending to the entire list or just one address if (ec.EmailAddress != "" && ec.EmailAddress != null) { SendEmail(server, ec.EmailAddress, ec.Subject, ec.Message); } else //send to everyone { //cycle through the list and kindly give each person an email. foreach (string email in Statics.Emails) { SendEmail(server, email, ec.Subject, ec.Message); } } //make the system wait so many seconds if (x != ec.Interval) { Thread.Sleep(ec.Delay); } } } catch (Exception ex) { Display(ex.Message, true, ConsoleColor.Red); PressAnyKey(); return; } Display("Sending email complete....", true); PressAnyKey(); }
/// <summary> /// The method that will actually call the method in the sender class /// </summary> /// <param name="server"></param> /// <param name="emailAddress"></param> /// <param name="subject"></param> /// <param name="message"></param> private void SendEmail(SmtpServer server, string emailAddress, string subject, string message) { _sender.SendEmail(server, emailAddress, subject, message); Statics.Display($"Email sent: {emailAddress}", true); }