Как подружить flask-mail и postfix?

Друзья, есть у меня на моей машине ubuntu 16.04 с почтой на борту. Из консоли отправлять письма пробовал - всё работает. Прикрутил flask-mail к приложению и отправляю письмо, но ничего не выходит.

Конфигурация flask-mail
spoiler

MAIL_SERVER = "localhost"
MAIL_PORT = 25
MAIL_USE_TLS = False
MAIL_USE_SSL = False
MAIL_DEBUG = DEBUG
MAIL_USERNAME = "*****" # Системный пользователь от которого вхожу в систему
MAIL_PASSWORD = "*****" # Указываю реальный пароль от пользователя в системе
MAIL_DEFAULT_SENDER = None
MAIL_MAX_EMAILS = None
MAIL_SUPPRESS_SEND = TESTING
MAIL_ASCII_ATTACHMENTS = False


Отправка письма:
msg = Message("Hello", sender="****@pc", recipients=["*****@yandex.ru"])
msg.body = "testing"
msg.html = "<b>testing</b>"
mail.send(msg)


в /var/mail/'username' - пусто, ничего об этих ивентах не пишет.
  • Вопрос задан
  • 548 просмотров
Пригласить эксперта
Ответы на вопрос 1
@pcdesign
У меня вот такая конфигурация реально работает в связке flask-mail и postfix?
import os
    # FLASK-MAIL SETTINGS

    MAIL_USERNAME = os.getenv('MAIL_USERNAME', 'noreply@_your_host.com')
    MAIL_PASSWORD = os.getenv('MAIL_PASSWORD', '')
    MAIL_DEFAULT_SENDER = os.getenv('MAIL_DEFAULT_SENDER', 'noreply@_your_host.com')
    MAIL_SERVER = os.getenv('MAIL_SERVER', 'localhost')
    MAIL_PORT = int(os.getenv('MAIL_PORT', '25'))
    MAIL_USE_SSL = int(os.getenv('MAIL_USE_SSL', False))


_your_host - это то что показывает команда
hostname

И во такая функция для отправки письма:

from flask_mail import Mail, Message
mail = Mail(app)
def send_email(subject, sender, recipients, text_body, html_body):
    msg = Message(subject, sender=sender, recipients=recipients)
    msg.body = text_body
    msg.html = html_body
    mail.send(msg)


Еще имеет смысл поставить команду, типа
apt-get install postfix mailx

И потом оправить письмо из консоли куда-нибудь, чтобы убедится что с постфиксом проблем нет

echo 'Test msg' |  mail -s 'test subj'  your@mail.ru


Если письмо дойдет тогда уже разбираться с фласком. И пароль имхо в этом случае не нужен, если настройка постфикс типовая.

P.S. Отправка письма в одном флаконе:

from flask import Flask
from flask_mail import Mail, Message
import os


app = Flask(__name__)


# FLASK-MAIL SETTINGS
app.config['SECRET_KEY'] = 'dsfdsfdsfdsfdsf'
app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME', 'noreply@example.com')
app.config['MAIL_PASSWORD'] = os.getenv('MAIL_PASSWORD', '')
app.config['MAIL_DEFAULT_SENDER'] = os.getenv(
    'MAIL_DEFAULT_SENDER', 'noreply@example.com')
app.config['MAIL_SERVER'] = os.getenv('MAIL_SERVER', 'localhost')
app.config['MAIL_PORT'] = int(os.getenv('MAIL_PORT', '25'))
app.config['MAIL_USE_SSL'] = int(os.getenv('MAIL_USE_SSL', False))


mail = Mail(app)


def send_email(subject, sender, recipients, text_body, html_body):
    msg = Message(subject, sender=sender, recipients=recipients)
    msg.body = text_body
    msg.html = html_body
    mail.send(msg)


@app.route('/')
def home_page():
    send_email('subj', 'noreply@example.com', ['ne@example.com'], 'Hello txt',
               '<h1>Hello html</h1>')
    return "100500"


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы