python-3.x - 如何从 Azure 函数应用发送电子邮件?

标签 python-3.x azure email azure-functions smtplib

我正在运行Azure function App(python语言),出于业务需求需要从function app发送电子邮件。

为此,我编写了一个 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'] = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8afeeff9fecae2e5fee7ebe3e6a4e9e5e7" rel="noreferrer noopener nofollow">[email protected]</a>"
    msg['To'] = ["<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7307160007331b1c071e121a1f5d101c1e" rel="noreferrer noopener nofollow">[email protected]</a>"]

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

    # start TLS for security 
    s.starttls() 
    # Authentication 
    s.login("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e397869097a38b8c978e828a8fcd808c8e" rel="noreferrer noopener nofollow">[email protected]</a>", "password-to-login") 
      
    # sending the mail 
    s.send_message(msg)
    
    # terminating the session 
    s.quit() 

    return

以上代码块在本地计算机上运行良好。如果我将相同的代码移至 Azure Function App,它将无法正常工作。

如何使其在 Azure 函数应用上运行?

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

最佳答案

由于公共(public)云服务 IP 的弹性性质,不支持直接从 Azure 计算服务中托管的电子邮件服务器向外部域(例如 Outlook.com、gmail.com 等)发送出站电子邮件滥用的可能性。因此,Azure 计算 IP 地址 block 将添加到公共(public) block 列表(例如 Spamhaus PBL)。此政策没有异常(exception)。

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

目前在 Azure Web App 上使用 EMAIL 功能的唯一方法是通过 SMTP 中继。 SendGrid 等第三方服务提供此类服务。

在 Azure Web Apps 架构中,实际的 Web Apps 位于公共(public)前端后面,这些前端由该数据中心上托管的所有站点共享。

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

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

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

关于python-3.x - 如何从 Azure 函数应用发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58246398/

相关文章:

python-3.x - 如何读取存储在azure blob存储中的.py文件中的变量

python - 有什么方法可以在 python 脚本中创建一个 Understand (from Scitools) DB?

python - 将具有多个列表的文本文件读取到 pandas dataframe 中,列表中的元素之间存在空格和逗号

PHP mail() 多部分/替代 HTML 和纯文本电子邮件

java - 用Java发送/接收电子邮件

python - 处理双引号内包含单引号或相反情况的字符串的简单方法是什么?

c# - 如何确定电子邮件地址是 Microsoft 'Work or School' 帐户还是 Microsoft 帐户

azure - 无法从azure数据 block 访问cassandra

c# - 获取azure中查询行的id

表格之间的 HTML 电子邮件空间(Gmail 和 Outlook)