TOC

SMTP 状态图

stateDiagram-v2
    [*] --> Connected
    Connected --> AwaitingGreeting: TCP连接建立

    # 协议握手阶段
    AwaitingGreeting --> HelloCommand: 收到220后发送EHLO
    HelloCommand --> TLS_Decision: 解析250扩展

    # 加密与认证决策
    TLS_Decision --> TLS_Handshake: 需要STARTTLS
    TLS_Handshake --> HelloCommand: 加密后重发EHLO
    TLS_Decision --> Auth_Decision: 无需TLS

    Auth_Decision --> AUTH_Login: 需要认证
    AUTH_Login --> MailFromCommand: 认证成功
    Auth_Decision --> MailFromCommand: 无需认证

    # 邮件传输流程
    MailFromCommand --> RcptToCommand: 收到250后发送RCPT TO
    RcptToCommand --> DataCommand: 收到250(最终收件人)后发送DATA
    DataCommand --> Data: 收到354后发送邮件内容
    Data --> QuitCommand: 收到250后发送QUIT
    QuitCommand --> Disconnected: 收到221断开连接

    Disconnected --> [*]

    # 统一错误处理
    state ErrorHandler <<choice>>
        HelloCommand --> ErrorHandler: 错误响应
        MailFromCommand --> ErrorHandler: 错误响应
        RcptToCommand --> ErrorHandler: 错误响应
        DataCommand --> ErrorHandler: 错误响应
        Data --> ErrorHandler: 错误响应

        ErrorHandler --> RSETCommand: 可恢复错误
        RSETCommand --> MailFromCommand: 重置到发件人状态
        ErrorHandler --> Disconnected: 致命错误
如果你有魔法,你可以看到一个评论框~