You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Red Hat上的aiosmtpd服务器配置日志以排查认证连接问题

aiosmtpd日志配置与认证问题排查方案

1. 核心问题说明

你当前日志不生效、看不到交互内容有两个直接原因:一是现有logging配置存在语法错误,二是aiosmtpd默认未开启SMTP协议级的交互日志。

2. 修复logging配置错误

你现有configure_logging函数中给handler绑定Formatter的逻辑写反了,修正后的完整配置如下:

def configure_logging():
    file_handler = logging.FileHandler("aiosmtpd.log", "a")
    stderr_handler = logging.StreamHandler(sys.stderr)
    # aiosmtpd默认日志输出到两个logger下,需要同时配置
    logger_mail = logging.getLogger("mail.log")
    logger_smtpd = logging.getLogger("aiosmtpd")
    fmt = "[%(asctime)s %(levelname)s] %(message)s"
    formatter = logging.Formatter(fmt, datefmt="%Y-%m-%d %H:%M:%S")
    # 给两个handler绑定格式化规则
    stderr_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter)
    # 给两个logger添加handler并设置日志级别
    for logger in [logger_mail, logger_smtpd]:
        logger.addHandler(stderr_handler)
        logger.addHandler(file_handler)
        logger.setLevel(logging.DEBUG)

3. 开启SMTP完整交互日志

初始化Controller时添加debug=True参数,即可打印客户端和服务器之间所有的命令交互(包括EHLO、AUTH、MAIL FROM等所有阶段的请求和返回):

controller = Controller(
    handler, 
    hostname='0.0.0.0', 
    port=587, 
    authenticator=authenticator_func, 
    auth_required=True,
    auth_require_tls=False,
    debug=True # 新增此行开启协议级调试
)

4. 补充认证失败日志(快速排查设备连接问题)

你当前的认证函数没有日志输出,无法看到设备提交的账号密码实际值,修改authenticator_func添加日志:

def authenticator_func(server, session, envelope, mechanism, auth_data):
    assert isinstance(auth_data, LoginPassword)
    username = auth_data.login
    password = auth_data.password
    # 打印认证请求详情,可直接看到设备提交的账号密码
    Lprint(f"认证请求:来源IP {session.peer[0]} 提交账号 {username!r} 提交密码 {password!r}", 2)
    if auth_db.get(username) == password:
        Lprint(f"认证成功:账号 {username!r}", 2)
        return AuthResult(success=True)
    else:
        Lprint(f"认证失败:账号 {username!r} 不存在或密码错误", 2)
        return AuthResult(success=False, handled=False)

配置后效果

  • 你可以在当前目录的aiosmtpd.log中看到所有SMTP协议交互、报错信息
  • 自定义的业务日志仍会输出到/home/matthew_gale/smtp-server/Logging/EmailExtractorLog.out
  • 可直接从日志中看到设备提交的认证信息,快速排查账号密码格式不匹配、特殊字符编码错误等常见问题

内容的提问来源于stack exchange,提问作者MattieG4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:04