Как отправить электронное письмо из приложения-функции Azure - PullRequest
0 голосов
/ 05 октября 2019

У меня запущено приложение-функция 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?

Как отправить электронное письмо с Gmail в приложении-функции Azure?

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Отправка исходящей электронной почты на внешние домены (например, outlook.com, gmail.com и т. Д.) Непосредственно с почтового сервера, размещенного в вычислительных службах Azure, не поддерживается из-за эластичности IP-адресов общедоступных облачных служб ипотенциал для злоупотребления. Таким образом, блоки IP-адресов вычислений Azure добавляются в публичные списки блокировок (например, Spamhaus PBL). Нет никаких исключений из этой политики.

Поскольку мы не поддерживаем запуск и smtp-сервер с нашей платформы, это не должно влиять на нас.

Единственный способ использовать функциональность EMAIL на данный момент в AzureВеб-приложение через реле SMTP. Сторонние службы, такие как SendGrid, предоставляют такие типы услуг.

В архитектуре веб-приложений Azure реальные веб-приложения находятся за общими интерфейсами, которые используются всеми сайтами, размещенными в этом центре обработки данных.

Существует вероятность того, что один из сайтов, размещенных в этом центре обработки данных, отправляет электронные письма со спамом, и это может иметь IP-адрес, который будет занесен в черный список серверами MAIL. Таким образом, электронные письма, отправленные с этого адреса, будут отклоняться или рассматриваться как спам почтовыми серверами. Это ограничение существует и в случае VM или облачных сервисов. Azure использует пул IP-адресов, и эти адреса используются повторно. Это означает, что вы можете получить IP-адрес, который уже занесен в черный список, поскольку кто-то ранее отправлял СПАМ с этого адреса, и, следовательно, ваши электронные письма будут отклоняться или рассматриваться как СПАМ почтовыми серверами.

Это распространенный сценарий вОблако, и обычно рекомендуется использовать внешний поставщик почтовых услуг, например SendGrid для обмена сообщениями. Статьи, связанные с SendGrid:

Как отправить электронное письмо с использованием SendGrid с Azure: https://azure.microsoft.com/en-in/documentation/articles/sendgrid-dotnet-how-to-send-email/

0 голосов
/ 05 октября 2019

Я бы предложил вам использовать какой-либо сторонний почтовый сервис, такой как SendGrid / Twillio. Вы можете добавить выходную привязку SendGrid к вашей функции Python Azure. Привязка в function.json будет выглядеть примерно так: here

Вот пример

...