如何从 Azure 函数应用发送电子邮件?

新手上路,请多包涵

我已经运行了 Azure 功能应用程序(使用 python 语言),因为业务需求需要从功能应用程序发送电子邮件。

为此,我写了一个 python 函数

from email.message import EmailMessage
import smtplib

def send_mail():
    # message to be sent
    msg = EmailMessage()
    msg.set_content('Test content')

    msg['Subject'] = 'Test'
    msg['From'] = "test@hotmail.com"
    msg['To'] = ["test@hotmail.com"]

    # creates SMTP session
    s = smtplib.SMTP('smtp-mail.outlook.com', 587)
    s.ehlo()

    # start TLS for security
    s.starttls()
    # Authentication
    s.login("test@hotmail.com", "password-to-login")

    # sending the mail
    s.send_message(msg)

    # terminating the session
    s.quit()

    return

以上代码块在本地机器上运行良好。如果我将相同的代码移动到 Azure Function App,它就无法工作。

如何让它在 Azure 函数应用程序上运行?

如何在 Azure Function App 中从 Gmail 发送电子邮件?

原文由 Anbarasu Subramaniyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 668
2 个回答

由于公共云服务 IP 的弹性特性和潜在的虐待。因此,Azure 计算 IP 地址块被添加到公共块列表(例如 Spamhaus PBL)。此政策没有例外。

由于我们不支持从我们的平台运行和 smtp 服务器,这应该不会影响我们。

到目前为止,在 Azure Web App 上使用 EMAIL 功能的唯一方法是通过 SMTP 中继。第三方服务(例如 SendGrid)提供这些类型的服务。

在 Azure Web Apps 架构中,实际的 Web Apps 位于公共前端之后,由该数据中心托管的所有站点共享。

有可能是该数据中心托管的站点之一正在发送垃圾邮件,并且该 IP 地址可能会被 MAIL 服务器列入黑名单。因此,从该地址发送的电子邮件将被邮件服务器拒绝或视为垃圾邮件。在 VM 或云服务的情况下也存在此限制。 Azure 使用一个 IP 地址池,这些地址被重复使用。这意味着您可以获得一个已经列入黑名单的 IP 地址,因为之前有人从该地址发送垃圾邮件,因此您的电子邮件将被邮件服务器拒绝或视为垃圾邮件。

这是云中的常见场景,通常建议使用外部邮件服务提供商(如 SendGrid)进行消息传递。 SendGrid相关文章:

如何在 Azure 中使用 SendGrid 发送电子邮件: https ://azure.microsoft.com/en-in/documentation/articles/sendgrid-dotnet-how-to-send-email/

原文由 DixitArora-MSFT 发布,翻译遵循 CC BY-SA 4.0 许可协议

我建议您使用一些第三方电子邮件服务,例如 SendGrid /Twillio 您可以将 SendGrid 输出绑定添加到 Python Azure 函数。 function.json 中的绑定看起来像 here

这是一个 例子

原文由 Sajeetharan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进