FastAPI使用fastapi-mail发邮件遇TypeError:NoneType无法转int求助
解决FastAPI使用fastapi-mail时MAIL_PORT为None的错误
错误原因
报错TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'说明os.getenv('MAIL_PORT')返回了None,核心问题是程序未正确读取到.env文件中的配置,同时代码存在拼写错误:
.env文件路径配置错误,导致环境变量加载失败Envs类中MAIL_FROM_NAME的读取变量名写错(写成了MAIN_FROM_NAME)
解决方案
1. 修复.env文件加载路径
修改send_email.py中的load_dotenv调用,使用绝对路径确保能找到根目录的.env文件:
import os from dotenv import load_dotenv # 获取当前文件目录,拼接根目录的.env路径 current_dir = os.path.dirname(os.path.abspath(__file__)) env_path = os.path.join(current_dir, '.env') load_dotenv(env_path)
2. 修正变量名拼写错误
修改Envs类中的MAIL_FROM_NAME读取代码:
class Envs: MAIL_USERNAME = os.getenv('MAIL_USERNAME') MAIL_PASSWORD = os.getenv('MAIL_PASSWORD') MAIL_FROM = os.getenv('MAIL_FROM') MAIL_PORT = int(os.getenv('MAIL_PORT')) MAIL_SERVER = os.getenv('MAIL_SERVER') MAIL_FROM_NAME = os.getenv('MAIL_FROM_NAME') # 修正拼写错误
3. 验证环境变量加载(可选)
在load_dotenv后添加测试代码,确认配置是否读取成功:
print(os.getenv('MAIL_PORT')) # 正常应输出587,而非None
完整修正后的send_email.py核心片段
import os from fastapi import BackgroundTasks from fastapi_mail import FastMail, MessageSchema, ConnectionConfig from dotenv import load_dotenv # 正确加载.env文件 current_dir = os.path.dirname(os.path.abspath(__file__)) env_path = os.path.join(current_dir, '.env') load_dotenv(env_path) class Envs: MAIL_USERNAME = os.getenv('MAIL_USERNAME') MAIL_PASSWORD = os.getenv('MAIL_PASSWORD') MAIL_FROM = os.getenv('MAIL_FROM') MAIL_PORT = int(os.getenv('MAIL_PORT')) MAIL_SERVER = os.getenv('MAIL_SERVER') MAIL_FROM_NAME = os.getenv('MAIL_FROM_NAME') conf = ConnectionConfig( MAIL_USERNAME=Envs.MAIL_USERNAME, MAIL_PASSWORD=Envs.MAIL_PASSWORD, MAIL_FROM=Envs.MAIL_FROM, MAIL_PORT=Envs.MAIL_PORT, MAIL_SERVER=Envs.MAIL_SERVER, MAIL_FROM_NAME=Envs.MAIL_FROM_NAME, MAIL_TLS=True, MAIL_SSL=False, USE_CREDENTIALS=True, TEMPLATE_FOLDER='./templates/' ) # 后续邮件发送函数代码不变
内容的提问来源于stack exchange,提问作者Po_
相关产品推荐
相关产品推荐

