在 C# 中使用 ProtonMail 发送电子邮件
Sending Emails With ProtonMail in c#
我在 Azure 应用服务上有一个应用程序 运行。到目前为止,我一直在使用 Gmail SMTP 服务器发送电子邮件,并且运行良好。电子邮件服务与 documentation 中的类似,配置如下所示:
"ApplicationEmail": {
"EmailAddress": "template@gmail.com",
"Password": "temppassword",
"SmtpClient": "smtp.google.com",
"Port": "587",
"SSL": "true"
}
现在我正在尝试切换到 ProtonMail 服务器,我在那里有一个带有自定义域的帐户,最终,我尝试重新配置设置,如下所示:
"ApplicationEmail": {
"EmailAddress": "administration@mydomain.de",
"Password": "randompassword",
"SmtpClient": "smtp.protonmail.com",
"Port": "587",
"SSL": "true"
}
这当然行不通,我在尝试发送电子邮件时收到此错误
System.Net.Mail.SmtpException: Failure sending mail.
System.Net.Sockets.SocketException (11001): No such host is known.
我到处寻找解决方案,我找到的唯一方法是安装在后台本地运行并加密和解密电子邮件的 ProtonBridge,但这看起来不像一个选项,因为我无法将它集成到Azure 应用服务,因为它类似于 PaaS 而不是 Azure VM。如果我错了,请不要严格判断,我对 C#、Azure 比较陌生:)
错误表示主机smtp.protonmail.com不存在
根据我在知识库中看到的内容,是的,您似乎是正确的,因为您需要设置 ProtonMail Bridge 才能通过 SMTP 为您的 ProtonMail 帐户发送邮件。
ProtonMail 没有 public 面向 SMTP 服务器,您必须设置 ProtonBridge。
我在 C# 中使用 Proton 电子邮件发送电子邮件的方式。无法使用免费版本。您至少需要升级到 Plus 及以上版本。
我假设你至少有 plus 版本,而不是安装 ProtonBridge。
使用您的帐户电子邮件和密码添加您的帐户:
完成后,技巧来了,点击邮箱配置(如上图所示):
您的 ProtonBridge 会向您显示您的配置和一个新密码,该密码与您用于主帐户的密码不同。此密码仅对安装了ProtonBridge的客户端有效。
您可以将此新用户名和密码用于您的本地 Outlook 客户端、其他客户端或用于编程,例如在 C# 中。
这是一个工作示例:
internal static readonly string SmtpServer = "127.0.0.1";
internal static readonly string EmailAccount = "email@domain.tld";
internal static readonly string Password = "***SecretGeneratedByProtonBridge***";
internal static readonly int Port = 1025;
您的使用情况:
ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate;
var smtpServer = new SmtpClient(SmtpServer)
{
Port = Port,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(EmailAccount, Password),
EnableSsl = true
};
var mailMessage = CreateMessage();
smtpServer.Send(mailMessage);
以及两种方法:
private static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
private static MailMessage CreateMessage()
{
return new MailMessage
{
From = new MailAddress(EmailAccount),
To =
{
"emailTo@domain.tld"
},
Subject = "System Monitor",
IsBodyHtml = true,
Body = "My Html message"
};
}
Note: in my case I return true for ValidateCertificate but you might
need to look at this for more details:
Could not establish trust relationship for SSL/TLS secure channel -- SOAP
我在 Azure 应用服务上有一个应用程序 运行。到目前为止,我一直在使用 Gmail SMTP 服务器发送电子邮件,并且运行良好。电子邮件服务与 documentation 中的类似,配置如下所示:
"ApplicationEmail": {
"EmailAddress": "template@gmail.com",
"Password": "temppassword",
"SmtpClient": "smtp.google.com",
"Port": "587",
"SSL": "true"
}
现在我正在尝试切换到 ProtonMail 服务器,我在那里有一个带有自定义域的帐户,最终,我尝试重新配置设置,如下所示:
"ApplicationEmail": {
"EmailAddress": "administration@mydomain.de",
"Password": "randompassword",
"SmtpClient": "smtp.protonmail.com",
"Port": "587",
"SSL": "true"
}
这当然行不通,我在尝试发送电子邮件时收到此错误
System.Net.Mail.SmtpException: Failure sending mail.
System.Net.Sockets.SocketException (11001): No such host is known.
我到处寻找解决方案,我找到的唯一方法是安装在后台本地运行并加密和解密电子邮件的 ProtonBridge,但这看起来不像一个选项,因为我无法将它集成到Azure 应用服务,因为它类似于 PaaS 而不是 Azure VM。如果我错了,请不要严格判断,我对 C#、Azure 比较陌生:)
错误表示主机smtp.protonmail.com不存在
根据我在知识库中看到的内容,是的,您似乎是正确的,因为您需要设置 ProtonMail Bridge 才能通过 SMTP 为您的 ProtonMail 帐户发送邮件。
ProtonMail 没有 public 面向 SMTP 服务器,您必须设置 ProtonBridge。
我在 C# 中使用 Proton 电子邮件发送电子邮件的方式。无法使用免费版本。您至少需要升级到 Plus 及以上版本。
我假设你至少有 plus 版本,而不是安装 ProtonBridge。
使用您的帐户电子邮件和密码添加您的帐户:
完成后,技巧来了,点击邮箱配置(如上图所示):
您的 ProtonBridge 会向您显示您的配置和一个新密码,该密码与您用于主帐户的密码不同。此密码仅对安装了ProtonBridge的客户端有效。
您可以将此新用户名和密码用于您的本地 Outlook 客户端、其他客户端或用于编程,例如在 C# 中。
这是一个工作示例:
internal static readonly string SmtpServer = "127.0.0.1";
internal static readonly string EmailAccount = "email@domain.tld";
internal static readonly string Password = "***SecretGeneratedByProtonBridge***";
internal static readonly int Port = 1025;
您的使用情况:
ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate;
var smtpServer = new SmtpClient(SmtpServer)
{
Port = Port,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(EmailAccount, Password),
EnableSsl = true
};
var mailMessage = CreateMessage();
smtpServer.Send(mailMessage);
以及两种方法:
private static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
private static MailMessage CreateMessage()
{
return new MailMessage
{
From = new MailAddress(EmailAccount),
To =
{
"emailTo@domain.tld"
},
Subject = "System Monitor",
IsBodyHtml = true,
Body = "My Html message"
};
}
Note: in my case I return true for ValidateCertificate but you might need to look at this for more details: Could not establish trust relationship for SSL/TLS secure channel -- SOAP