Не удается отправить электронную почту, используя fastapi-mail в качестве фоновых задач

#python #email #fastapi

Вопрос:

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

Вот мой маршрут

 @router.post('/register')
async def register_user(data: MakeUser, background_task: BackgroundTasks, request: Request, db: Session = Depends(get_db)):
    try:
        # NOTE: It is better to go with this right now in future avoid making multiple querys
        if user_crud.validate_email(data.email, db):
            return JSONResponse("Email Already Exist",
                                status.HTTP_406_NOT_ACCEPTABLE)
        if user_crud.validate_username(data.username, db):
            return JSONResponse(
                "Username is taken",
                status_code=status.HTTP_406_NOT_ACCEPTABLE)
        data = user_crud.create_user(data, db)
        email_verification_token = create_token_for_email_verification(
            {"user_id": data.public_id, "email": data.email})
        email_verification_url = f'{request.base_url}auth/verify/{email_verification_token}'
        await send_email_verification_mail(
            background_task, "Email Verification", data.email, {"url": email_verification_url})
        return data
    except Exception as e:
        print(e)
        return HTTPException(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Problem creating user")
 

Вот мой скрипт отправки почты

 async def send_email_verification_mail(background_task: BackgroundTasks, subject: str, email_to: str, body):
    print(os.environ.get("MAIL_USERNAME"))
    message = MessageSchema(
        subject=subject,
        recipients=[email_to],
        body=body
    )
    fm = FastMail(configs)
    print("Sendig Mail")
    background_task.add_task(fm.send_message, message)
    print("Mail Sent")
 

Комментарии:

1. Просто для отладки, вместо вызова background_task.add_task(fm.send_message, message) , не могли бы вы попробовать создать фиктивную функцию, которая просто печатает что-то в консоли, просто чтобы убедиться, что функция вызывается? Что-то вроде: background_task.add_task(dummy_function_that_prints)