Вы можете использовать файл config.json
для хранения конфигурации для обеих учетных записей.Затем пользовательская функция может использовать этот файл для извлечения значений при необходимости.Следующий код показывает простую настройку двух учетных записей.Ключевое требование - обновить конфигурацию приложения перед инициализацией приложения с почтовым объектом (mail.init_app()
) в каждом маршруте.Каждая учетная запись smtp имеет свою операцию «отправки сообщений» по своему маршруту.
config.json :
Конфигурация для двух учетных записей SMTP Gmail
{
"MAIL_SERVER" : "smtp.gmail.com",
"MAIL_PORT" : 587,
"MAIL_USE_TLS": "True",
"MAIL_USERNAME" : ["smtp1@gmail.com", "smtp2@gmail.com"],
"MAIL_PASSWORD" : ["pwd_for_smtp1", "pwd_for_smtp2"]
}
Код :
Чтобы проверить этот код, я отправил тестовые письма от smtp1@gmail.com на smtp2@gmail.com и наоборот.Вы должны получить соответствующее сообщение, отображаемое для каждого маршрута при доступе к маршруту на вашем локальном хосте.
Примечание : В целях безопасности вы должны использовать отдельные пароли приложений для аутентификации, которые должны быть сгенерированы длякаждая учетная запись SMTP Gmail.Пароли приложения также должны быть обновлены в config.json выше для ключа MAIL_PASSWORD для каждой учетной записи.Подробнее здесь .
from flask import Flask
from flask_mail import Mail
from flask_mail import Message
import json
def smtp_config(config_name, smtp=1):
with open(config_name) as f:
config_data = json.load(f)
if smtp not in {1,2}:
raise ValueError("smtp can only be 1 or 2")
if smtp==2:
MAIL_USERNAME = config_data['MAIL_USERNAME'][1]
MAIL_PASSWORD = config_data['MAIL_PASSWORD'][1]
else:
MAIL_USERNAME = config_data['MAIL_USERNAME'][0]
MAIL_PASSWORD = config_data['MAIL_PASSWORD'][0]
MAIL_SERVER = config_data['MAIL_SERVER']
MAIL_PORT = config_data['MAIL_PORT']
MAIL_USE_TLS = bool(config_data['MAIL_USE_TLS'])
return [MAIL_USERNAME, MAIL_PASSWORD, MAIL_SERVER, MAIL_PORT, MAIL_USE_TLS]
app = Flask(__name__)
mail = Mail()
@app.route("/")
def index():
smtp_data = smtp_config('config.json', smtp=1)
app.config.update(dict(
MAIL_SERVER = smtp_data[2],
MAIL_PORT = smtp_data[3],
MAIL_USE_TLS = smtp_data[4],
MAIL_USERNAME = smtp_data[0],
MAIL_PASSWORD = smtp_data[1],
))
mail.init_app(app)
msg = Message("Hello", sender="smtp1@gmail.com", recipients=["smtp2@gmail.com"])
msg.body = "This message was sent from smtp1"
mail.send(msg)
return "The message was sent from smtp1"
@app.route("/smtp2/")
def smtp2():
smtp_data = smtp_config('config.json', smtp=2)
app.config.update(dict(
MAIL_SERVER = smtp_data[2],
MAIL_PORT = smtp_data[3],
MAIL_USE_TLS = smtp_data[4],
MAIL_USERNAME = smtp_data[0],
MAIL_PASSWORD = smtp_data[1],
))
mail.init_app(app)
msg = Message("Hello", sender="smtp2@gmail.com", recipients=["smtp1@gmail.com"])
msg.body = "This message was sent from smtp2"
mail.send(msg)
return "The message was sent from smtp2"
if __name__=='__main__':
app.run(debug=True, port=5000, host='localhost')
Функция smtp_config()
принимает два аргумента: config_name
- путь к файлу config.json и smtp
- значение по умолчанию1 для конфигурации учетной записи smtp1.Этот параметр может быть 1 или 2. Функция возвращает список значений, необходимых для конфигурации почты для конкретного smtp
.
Затем на каждом маршруте просто обновите конфигурацию приложения значениями, полученными из вышеуказанной функции, а затем инициализируйте настройки почты из настроек приложения (mail.init_app()
).
Чтобы добавить большеучетные записи, вы можете передать список имен учетных записей smtp в smtp
для уникальной идентификации (вместо номеров 1 и 2 выше).Конечно, вам также необходимо изменить config.json
соответственно:
def smtp_config(config_name, smtp=['smtp1@gmail.com', 'smtp2@gmail.com', 'smtp3@gmail.com'....]):
#<---code--->
if x[0]:
MAIL_USERNAME = 'smtp1@gmail.com'
....
elif x[1]:
MAIL_USERNAME = 'smtp2@gmail.com'
....