#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)