У меня вот такая конфигурация реально работает в связке 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)