{
  "states": [
    "Connection Established",
    "Greeted",
    "Mail Transaction Started",
    "Recipient Specified",
    "Data Entry",
    "Message Accepted",
    "Session Terminated"
  ],
  "initial_state": "Connection Established",
  "final_states": [
    "Session Terminated"
  ],
  "transitions": [
    {
      "from": "Connection Established",
      "event": "receive EHLO or HELO after 220 greeting",
      "action": "send HELO",
      "to": "Greeted"
    },
    {
      "from": "Greeted",
      "event": "receive MAIL FROM",
      "action": "send MAIL FROM",
      "to": "Mail Transaction Started"
    },
    {
      "from": "Mail Transaction Started",
      "event": "receive RCPT TO",
      "action": "send RCPT TO",
      "to": "Recipient Specified"
    },
    {
      "from": "Recipient Specified",
      "event": "receive DATA",
      "action": "send DATA 354",
      "to": "Data Entry"
    },
    {
      "from": "Data Entry",
      "event": "cond message ended with <CRLF>.<CRLF>",
      "action": "send message body",
      "to": "Message Accepted"
    },
    {
      "from": "Message Accepted",
      "event": "receive QUIT",
      "action": "send QUIT",
      "to": "Session Terminated"
    },
    {
      "from": "Greeted",
      "event": "receive RSET",
      "action": "send RSET",
      "to": "Greeted"
    },
    {
      "from": "Mail Transaction Started",
      "event": "receive RSET",
      "action": "send RSET",
      "to": "Greeted"
    },
    {
      "from": "Recipient Specified",
      "event": "receive RSET",
      "action": "send RSET",
      "to": "Greeted"
    },
    {
      "from": "Data Entry",
      "event": "receive RSET before message is complete",
      "action": "send RSET",
      "to": "Greeted"
    },
    {
      "from": "Message Accepted",
      "event": "receive RSET",
      "action": "send RSET",
      "to": "Greeted"
    },
    {
      "from": "Greeted",
      "event": "receive VRFY",
      "action": "send VRFY",
      "to": "Greeted"
    },
    {
      "from": "Greeted",
      "event": "receive EXPN",
      "action": "send EXPN; reply 250",
      "to": "Greeted"
    },
    {
      "from": "Mail Transaction Started",
      "event": "receive VRFY or EXPN",
      "action": "send VRFY; send EXPN",
      "to": "Mail Transaction Started"
    },
    {
      "from": "Recipient Specified",
      "event": "receive VRFY or EXPN",
      "action": "send VRFY; send EXPN",
      "to": "Recipient Specified"
    },
    {
      "from": "Data Entry",
      "event": "receive VRFY or EXPN",
      "action": "send VRFY; send EXPN",
      "to": "Data Entry"
    },
    {
      "from": "Message Accepted",
      "event": "receive VRFY or EXPN",
      "action": "send VRFY; send EXPN",
      "to": "Message Accepted"
    },
    {
      "from": "Connection Established",
      "event": "receive QUIT",
      "action": "send QUIT",
      "to": "Session Terminated"
    },
    {
      "from": "Greeted",
      "event": "receive QUIT",
      "action": "send QUIT",
      "to": "Session Terminated"
    },
    {
      "from": "Mail Transaction Started",
      "event": "receive QUIT",
      "action": "send QUIT",
      "to": "Session Terminated"
    },
    {
      "from": "Recipient Specified",
      "event": "receive QUIT",
      "action": "send QUIT",
      "to": "Session Terminated"
    },
    {
      "from": "Data Entry",
      "event": "receive QUIT before finishing data",
      "action": "send QUIT",
      "to": "Session Terminated"
    }
  ]
}
