【问题标题】:No Such Host is known Azure functions没有此类主机已知 Azure 功能
【发布时间】:2020-07-29 16:07:02
【问题描述】:

我有一个 Azure 函数,我正在尝试发送电子邮件:

EmailHelper.SendEmail(myEventHubMessage, notifyFrom, notifyTo, environment);

这是我的 SendEmail 方法:

MailMessage mail = new MailMessage(notifyFrom, notifyTo);
SmtpClient client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "The actual value of host";
mail.Subject = $"[{environment}]: [{keyvaultEvent.Data.VaultName}] Key Vault Event";
mail.Body = $"An event of type {keyvaultEvent.EventType} in KeyVault {keyvaultEvent.Data.VaultName} occured at {keyvaultEvent.EventTime}";
client.Send(mail);

我尝试在本地运行它,它工作正常。我收到一封电子邮件。部署 Azure 功能后,我收到一条错误消息 No such host is known

environment、notifyfrom 和 notifyto 的值来自应用设置。

知道为什么会这样吗?

【问题讨论】:

  • 您是否将这些应用设置值添加到您的 azure 函数中?如果您在本地设置它们,我认为也没有一种机制可以在云中更新它们。当您上传/部署它时,它不会将应用程序设置文件转移到云中,因此您必须将它们设置为 azure 以便它检索值。见这里:docs.microsoft.com/en-us/azure/azure-functions/…
  • @tnw 是的,我将它们设置为配置值。
  • 如何在本地加载配置?如果你是从 local.settings.json 加载它(你应该是),那么你可以看看stackoverflow.com/a/63124002/1138731。它对配置的工作原理进行了一些解释。
  • @lopezbertoni 这不是配置问题。即使我在代码本身中编写配置值,我也会得到同样的错误
  • @MAK 好的,请记住,如果您在 Startup.cs 中加载设置并使用 appsettings.json 或类似文件覆盖它们,则这些值可能会丢失。本地主机的行为不同。此外,该错误消息通常意味着 azure 函数有问题,您可以从门户运行诊断。

标签: c# smtp azure-functions azure-functions-runtime


【解决方案1】:

要从 Azure 虚拟机或应用发送电子邮件,请使用经过身份验证的 SMTP 中继服务,也称为智能主机,支持 TLS

SMTP 中继服务在发件人和收件人的邮件服务器之间提供中间 SMTP 服务器。 通过安全端口 587 或 443 建立 TCP 连接

MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress("user@recipient.com", "The Recipient"));
msg.From = new MailAddress("user@sender.com", "The Sender");
msg.Subject = "Test Email from Azure Web App using Office365";
msg.Body = "<p>Test emails on Azure from a Web App via Office365</p>";
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("<Office365-username>", "<Office365-password>");#insert your credentials
client.Port = 587;
client.Host = "smtp.office365.com";
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;

更多详情可以参考这个article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多