C#からの電子メール送信で動作するようにhMailServerを構成しようとしたときに、この質問に遭遇しました。私は以下を試しました:
- C#SmtpClient-暗黙のSSLでは機能しません-この質問と回答を参照してください
- ここからのAegisImplicitMail -UTF-8文字列で機能させることができませんでした(文字列に発音区別符号があります)
- ここからのMailKit-非常に強力で成熟しており、問題なく使用できます
私は次のことを目指しました:
- まともなセキュリティ
- 主流の電子メールプロバイダー(Google、Yahooなど)に電子メールを送信し、受信トレイに到達できる
- 主流の電子メールプロバイダーから電子メールを受信できること
C#コード
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構成
1)開いているポート-25、143、465、995を開いて、電子メールを送受信できるようにします
2)TCP/IPポートの構成
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)C#テスト前
hMailServerAdministratorから診断を実行します
各プロトコルのポート、セキュリティなど、さまざまな設定を手動で構成できる電子メールクライアントを使用してください。私はサンダーバードを使用しました。外部プロバイダーへの電子メールの送信と外部プロバイダーからの電子メールの受信を含めます(私はGmailで試しました)。
私はIP範囲に変更を加えず、暗黙の範囲(私のコンピューターとインターネット)を残しました。