Как отправить электронное письмо от flask с помощью SMTP-сервера - PullRequest
0 голосов
/ 20 апреля 2020

Я разрабатываю приложение, в котором есть форма регистрации, и мне нужно создать систему проверки электронной почты.

Я пытался сделать это, используя Elasti c Mail в качестве сервера, и flask -mail библиотека.

Вот как я настроил flask -mail конфигурационный метод:

def config_mail(self, server, port, use_tls, use_ssl, username, apikey, password):
    self.app.config['DEBUG'] = True
    self.app.config['MAIL_SERVER'] = server
    self.app.config['MAIL_PORT'] = port
    self.app.config['MAIL_USE_TLS'] = use_tls
    self.app.config['MAIL_USE_SSL'] = use_ssl
    self.app.config['MAIL_USERNAME'] = username
    self.app.config['MAIL_API_KEY'] = apikey
    self.app.config['MAIL_PASSWORD'] = password

    self.mail = Mail(self.app)

И вот как я его называю:

fsql.config_mail(
    'smtp.elasticemail.com', 
    2525, 
    False, 
    False, 
    "User Name", // From SMTP
    "API key",   // From API
    "Password"   // From SMTP
)

И вот Вот как я отправляю реальное письмо:

def send_validation_mail(self, user):
        auth_mail = Message("Advanced School Email Verification Service",
            sender="advancedschoolsystemservice@gmail.com",
            recipients=[user['email']]
        )
        auth_mail.body = "Validation Code Here"
        fsql.mail.send(auth_mail)

Этот точно такой же метод отправки почты работал для меня с другим SMTP-сервером, но моя учетная запись там была приостановлена. Когда я пытаюсь вызвать функцию send_validation_mail, я получаю следующий вывод в консоли, где я запускаю сервер разработки flask:

send: 'ehlo localhost.localdomain\r\n'
reply: b'250-smtp.elasticemail.com\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-SIZE 20971520\r\n'
reply: b'250-8BITMIME\r\n'
reply: b'250-AUTH=PLAIN LOGIN CRAM-MD5\r\n'
reply: b'250-AUTH PLAIN LOGIN CRAM-MD5\r\n'
reply: b'250-STARTTLS\r\n'
reply: b'250 OK\r\n'
reply: retcode (250); Msg: b'smtp.elasticemail.com\nPIPELINING\nSIZE 20971520\n8BITMIME\nAUTH=PLAIN LOGIN CRAM-MD5\nAUTH PLAIN LOGIN CRAM-MD5\nSTARTTLS\nOK'
send: 'AUTH CRAM-MD5\r\n'
reply: b'334 PDliODg4MWU0LTZjZDItNGVkNS1iYjkyLWZlZDE5N2NlOTdlNT4=\r\n'
reply: retcode (334); Msg: b'PDliODg4MWU0LTZjZDItNGVkNS1iYjkyLWZlZDE5N2NlOTdlNT4='
send: 'YWR2YW5jZWRzY2hvb2xzeXN0ZW1zZXJ2aWNlQGdtYWlsLmNvbSBlYjUxN2FiYjkwY2FjYzM3NWFiN2U3N2U0MGRkMWY4Yw==\r\n'
reply: b'235 Authentication successful\r\n'
reply: retcode (235); Msg: b'Authentication successful'
send: 'mail FROM:<advancedschoolsystemservice@gmail.com> size=341\r\n'
reply: b'250 OK\r\n'
reply: retcode (250); Msg: b'OK'
send: 'rcpt TO:<dimitarschool@gmail.com>\r\n'
reply: b'250 OK\r\n'
reply: retcode (250); Msg: b'OK'
send: 'data\r\n'
reply: b'354 Begin send data. End with CRLF.CRLF\r\n'
reply: retcode (354); Msg: b'Begin send data. End with CRLF.CRLF'
data: (354, b'Begin send data. End with CRLF.CRLF')
send: b'Content-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\nSubject: Advanced School Email Verification Service\r\nFrom: advancedschoolsystemservice@gmail.com\r\nTo: dimitarschool@gmail.com\r\nDate: Mon, 20 Apr 2020 19:50:36 +0200\r\nMessage-ID: <158740503623.11616.4810701167508943119@localhost.localdomain>\r\n\r\nhi\r\n.\r\n'
reply: b'250 OK 61116c08-660a-4151-0008-7c640ee56e31\r\n'
reply: retcode (250); Msg: b'OK 61116c08-660a-4151-0008-7c640ee56e31'
data: (250, b'OK 61116c08-660a-4151-0008-7c640ee56e31')
send: 'quit\r\n'
reply: b'221 Good bye\r\n'
reply: retcode (221); Msg: b'Good bye'

К сожалению, у меня нет большого опыта работы с такими вещами так что этот ответ для меня - гиббери sh - я не понимаю, что мне нужно исправить.

Примечание: я попытался поиграться с шифрованием TLS и SSL, изменив их значения с True на False, но не повезло.

...