I stumbled upon this question while trying to configure hMailServer to work with email sending with C #. I tried the following:
- C # SmtpClient - not working with implicit SSL - see this question and answer
- AegisImplicitMail from here - failed to get it to work with UTF-8 strings (I have diacritics in my strings)
- MailKit from here is very powerful and mature, with no problems using it.
I aimed at the following:
- decent security
- the ability to send email to major email providers (e.g. Google, Yahoo) and access to Inbox
- the ability to receive emails from major email providers
C # code
public void MailKitSend(string senderEmail, string senderName, string subject, string bodyText, string receivers, string receiversCc) { // no receivers, no e-mail is sent if (string.IsNullOrEmpty(receivers)) return; var msg = new MimeMessage(); msg.From.Add(new MailboxAddress(Encoding.UTF8, senderName, senderEmail)); msg.Subject = subject; var bb = new BodyBuilder {HtmlBody = bodyText}; msg.Body = bb.ToMessageBody(); IList<string> receiversEmails = receivers.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (string receiver in receiversEmails) msg.To.Add(new MailboxAddress(Encoding.UTF8, "", receiver)); if (!string.IsNullOrEmpty(receiversCc)) { IList<string> receiversEmailsCc = receiversCc.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (string receiverCc in receiversEmailsCc) msg.Cc.Add(new MailboxAddress(Encoding.UTF8, "", receiverCc)); } try { var sc = new MailKit.Net.Smtp.SmtpClient(); if (!string.IsNullOrWhiteSpace(SmtpUser) && !string.IsNullOrWhiteSpace(SmtpPassword)) { sc.Connect(SmtpServer, 465); sc.Authenticate(SmtpUser, SmtpPassword); } sc.Send(msg); sc.Disconnect(true); } catch (Exception exc) { string err = $"Error sending e-mail from {senderEmail} ({senderName}) to {receivers}: {exc}"; throw new ApplicationException(err); } }
HMailServer configuration
1) Open ports - 25, 143, 465, 995 are open so you can send and receive email
2) TCP / IP Port Configuration
SMTP / 0.0.0.0 / port 25 / no security (allow receiving start process) SMTP / 0.0.0.0 / port 465 / SSL/TLS security (must define a SSL certificate) POP3 / 0.0.0.0 / port 995 / SSL/TLS security (use the same SSL certificate)
3) testing pre C #
Run diagnostics from hMailServer administrator
Use an email client that allows you to manually configure various parameters, such as ports for each protocol, and security. I used Thunderbird. Turn on sending emails to external providers and receiving emails from them (I tried with Gmail).
I did not make changes to the IP ranges and left implicit (My computer and the Internet).