{
    "mode": "pydoc",
    "parameter": "smtpd",
    "section": "",
    "url": "https://www.chedong.com/phpMan.php/pydoc/smtpd/json",
    "generated": "2026-06-02T15:04:53Z",
    "sections": {
        "NAME": {
            "content": "smtpd - An RFC 5321 smtp proxy with optional RFC 1870 and RFC 6531 extensions.\n",
            "subsections": []
        },
        "MODULE REFERENCE": {
            "content": "https://docs.python.org/3.10/library/smtpd.html\n\nThe following documentation is automatically generated from the Python\nsource files.  It may be incomplete, incorrect or include features that\nare considered implementation detail and may vary between Python\nimplementations.  When in doubt, consult the module reference at the\nlocation listed above.\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]]\n\nOptions:\n",
            "subsections": [
                {
                    "name": "--nosetuid",
                    "content": "",
                    "long": "--nosetuid"
                },
                {
                    "name": "-n",
                    "content": "This program generally tries to setuid `nobody', unless this flag is\nset.  The setuid call will fail if this program is not run as root (in\nwhich case, use this flag).\n",
                    "flag": "-n"
                },
                {
                    "name": "--version",
                    "content": "",
                    "long": "--version"
                },
                {
                    "name": "-V",
                    "content": "Print the version number and exit.\n\n--class classname\n-c classname\nUse `classname' as the concrete SMTP proxy class.  Uses `PureProxy' by\ndefault.\n\n--size limit\n-s limit\nRestrict the total size of the incoming message to \"limit\" number of\nbytes via the RFC 1870 SIZE extension.  Defaults to 33554432 bytes.\n",
                    "flag": "-V"
                },
                {
                    "name": "--smtputf8",
                    "content": "",
                    "long": "--smtputf8"
                },
                {
                    "name": "-u",
                    "content": "Enable the SMTPUTF8 extension and behave as an RFC 6531 smtp proxy.\n",
                    "flag": "-u"
                },
                {
                    "name": "--debug",
                    "content": "",
                    "long": "--debug"
                },
                {
                    "name": "-d",
                    "content": "Turn on debugging prints.\n",
                    "flag": "-d"
                },
                {
                    "name": "--help",
                    "content": "",
                    "long": "--help"
                },
                {
                    "name": "-h",
                    "content": "Print this message and exit.\n\nVersion: %(version)s\n\nIf localhost is not given then `localhost' is used, and if localport is not\ngiven then 8025 is used.  If remotehost is not given then `localhost' is used,\nand if remoteport is not given, then 25 is used.\n",
                    "flag": "-h"
                }
            ]
        },
        "CLASSES": {
            "content": "asynchat.asyncchat(asyncore.dispatcher)\nSMTPChannel\nasyncore.dispatcher(builtins.object)\nSMTPServer\nDebuggingServer\nPureProxy\nMailmanProxy\n",
            "subsections": [
                {
                    "name": "class DebuggingServer",
                    "content": "|  DebuggingServer(localaddr, remoteaddr, datasizelimit=33554432, map=None, enableSMTPUTF8=False, decodedata=False)\n|\n|  Method resolution order:\n|      DebuggingServer\n|      SMTPServer\n|      asyncore.dispatcher\n|      builtins.object\n|\n|  Methods defined here:\n|\n|  processmessage(self, peer, mailfrom, rcpttos, data, kwargs)\n|      Override this abstract method to handle messages from the client.\n|\n|      peer is a tuple containing (ipaddr, port) of the client that made the\n|      socket connection to our smtp port.\n|\n|      mailfrom is the raw address the client claims the message is coming\n|      from.\n|\n|      rcpttos is a list of raw addresses the client wishes to deliver the\n|      message to.\n|\n|      data is a string containing the entire full text of the message,\n|      headers (if supplied) and all.  It has been `de-transparencied'\n|      according to RFC 821, Section 4.5.2.  In other words, a line\n|      containing a `.' followed by other text has had the leading dot\n|      removed.\n|\n|      kwargs is a dictionary containing additional information.  It is\n|      empty if decodedata=True was given as init parameter, otherwise\n|      it will contain the following keys:\n|          'mailoptions': list of parameters to the mail command.  All\n|                          elements are uppercase strings.  Example:\n|                          ['BODY=8BITMIME', 'SMTPUTF8'].\n|          'rcptoptions': same, for the rcpt command.\n|\n|      This function should return None for a normal `250 Ok' response;\n|      otherwise, it should return the desired response string in RFC 821\n|      format.\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from SMTPServer:\n|\n|  init(self, localaddr, remoteaddr, datasizelimit=33554432, map=None, enableSMTPUTF8=False, decodedata=False)\n|      Initialize self.  See help(type(self)) for accurate signature.\n|\n|  handleaccepted(self, conn, addr)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from SMTPServer:\n|\n|  channelclass = <class 'smtpd.SMTPChannel'>\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from asyncore.dispatcher:\n|\n|  repr(self)\n|      Return repr(self).\n|\n|  accept(self)\n|\n|  addchannel(self, map=None)\n|\n|  bind(self, addr)\n|\n|  close(self)\n|\n|  connect(self, address)\n|\n|  createsocket(self, family=<AddressFamily.AFINET: 2>, type=<SocketKind.SOCKSTREAM: 1>)\n|\n|  delchannel(self, map=None)\n|\n|  handleaccept(self)\n|\n|  handleclose(self)\n|\n|  handleconnect(self)\n|\n|  handleconnectevent(self)\n|\n|  handleerror(self)\n|\n|  handleexpt(self)\n|\n|  handleexptevent(self)\n|\n|  handleread(self)\n|\n|  handlereadevent(self)\n|\n|  handlewrite(self)\n|\n|  handlewriteevent(self)\n|\n|  listen(self, num)\n|\n|  log(self, message)\n|\n|  loginfo(self, message, type='info')\n|\n|  readable(self)\n|\n|  recv(self, buffersize)\n|\n|  send(self, data)\n|\n|  setreuseaddr(self)\n|\n|  setsocket(self, sock, map=None)\n|\n|  writable(self)\n|\n|  ----------------------------------------------------------------------\n|  Data descriptors inherited from asyncore.dispatcher:\n|\n|  dict\n|      dictionary for instance variables (if defined)\n|\n|  weakref\n|      list of weak references to the object (if defined)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from asyncore.dispatcher:\n|\n|  accepting = False\n|\n|  addr = None\n|\n|  closing = False\n|\n|  connected = False\n|\n|  connecting = False\n|\n|  debug = False\n|\n|  ignorelogtypes = frozenset({'warning'})\n"
                },
                {
                    "name": "class MailmanProxy",
                    "content": "|  MailmanProxy(*args, kwargs)\n|\n|  Method resolution order:\n|      MailmanProxy\n|      PureProxy\n|      SMTPServer\n|      asyncore.dispatcher\n|      builtins.object\n|\n|  Methods defined here:\n|\n|  init(self, *args, kwargs)\n|      Initialize self.  See help(type(self)) for accurate signature.\n|\n|  processmessage(self, peer, mailfrom, rcpttos, data)\n|      Override this abstract method to handle messages from the client.\n|\n|      peer is a tuple containing (ipaddr, port) of the client that made the\n|      socket connection to our smtp port.\n|\n|      mailfrom is the raw address the client claims the message is coming\n|      from.\n|\n|      rcpttos is a list of raw addresses the client wishes to deliver the\n|      message to.\n|\n|      data is a string containing the entire full text of the message,\n|      headers (if supplied) and all.  It has been `de-transparencied'\n|      according to RFC 821, Section 4.5.2.  In other words, a line\n|      containing a `.' followed by other text has had the leading dot\n|      removed.\n|\n|      kwargs is a dictionary containing additional information.  It is\n|      empty if decodedata=True was given as init parameter, otherwise\n|      it will contain the following keys:\n|          'mailoptions': list of parameters to the mail command.  All\n|                          elements are uppercase strings.  Example:\n|                          ['BODY=8BITMIME', 'SMTPUTF8'].\n|          'rcptoptions': same, for the rcpt command.\n|\n|      This function should return None for a normal `250 Ok' response;\n|      otherwise, it should return the desired response string in RFC 821\n|      format.\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from SMTPServer:\n|\n|  handleaccepted(self, conn, addr)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from SMTPServer:\n|\n|  channelclass = <class 'smtpd.SMTPChannel'>\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from asyncore.dispatcher:\n|\n|  repr(self)\n|      Return repr(self).\n|\n|  accept(self)\n|\n|  addchannel(self, map=None)\n|\n|  bind(self, addr)\n|\n|  close(self)\n|\n|  connect(self, address)\n|\n|  createsocket(self, family=<AddressFamily.AFINET: 2>, type=<SocketKind.SOCKSTREAM: 1>)\n|\n|  delchannel(self, map=None)\n|\n|  handleaccept(self)\n|\n|  handleclose(self)\n|\n|  handleconnect(self)\n|\n|  handleconnectevent(self)\n|\n|  handleerror(self)\n|\n|  handleexpt(self)\n|\n|  handleexptevent(self)\n|\n|  handleread(self)\n|\n|  handlereadevent(self)\n|\n|  handlewrite(self)\n|\n|  handlewriteevent(self)\n|\n|  listen(self, num)\n|\n|  log(self, message)\n|\n|  loginfo(self, message, type='info')\n|\n|  readable(self)\n|\n|  recv(self, buffersize)\n|\n|  send(self, data)\n|\n|  setreuseaddr(self)\n|\n|  setsocket(self, sock, map=None)\n|\n|  writable(self)\n|\n|  ----------------------------------------------------------------------\n|  Data descriptors inherited from asyncore.dispatcher:\n|\n|  dict\n|      dictionary for instance variables (if defined)\n|\n|  weakref\n|      list of weak references to the object (if defined)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from asyncore.dispatcher:\n|\n|  accepting = False\n|\n|  addr = None\n|\n|  closing = False\n|\n|  connected = False\n|\n|  connecting = False\n|\n|  debug = False\n|\n|  ignorelogtypes = frozenset({'warning'})\n"
                },
                {
                    "name": "class PureProxy",
                    "content": "|  PureProxy(*args, kwargs)\n|\n|  Method resolution order:\n|      PureProxy\n|      SMTPServer\n|      asyncore.dispatcher\n|      builtins.object\n|\n|  Methods defined here:\n|\n|  init(self, *args, kwargs)\n|      Initialize self.  See help(type(self)) for accurate signature.\n|\n|  processmessage(self, peer, mailfrom, rcpttos, data)\n|      Override this abstract method to handle messages from the client.\n|\n|      peer is a tuple containing (ipaddr, port) of the client that made the\n|      socket connection to our smtp port.\n|\n|      mailfrom is the raw address the client claims the message is coming\n|      from.\n|\n|      rcpttos is a list of raw addresses the client wishes to deliver the\n|      message to.\n|\n|      data is a string containing the entire full text of the message,\n|      headers (if supplied) and all.  It has been `de-transparencied'\n|      according to RFC 821, Section 4.5.2.  In other words, a line\n|      containing a `.' followed by other text has had the leading dot\n|      removed.\n|\n|      kwargs is a dictionary containing additional information.  It is\n|      empty if decodedata=True was given as init parameter, otherwise\n|      it will contain the following keys:\n|          'mailoptions': list of parameters to the mail command.  All\n|                          elements are uppercase strings.  Example:\n|                          ['BODY=8BITMIME', 'SMTPUTF8'].\n|          'rcptoptions': same, for the rcpt command.\n|\n|      This function should return None for a normal `250 Ok' response;\n|      otherwise, it should return the desired response string in RFC 821\n|      format.\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from SMTPServer:\n|\n|  handleaccepted(self, conn, addr)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from SMTPServer:\n|\n|  channelclass = <class 'smtpd.SMTPChannel'>\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from asyncore.dispatcher:\n|\n|  repr(self)\n|      Return repr(self).\n|\n|  accept(self)\n|\n|  addchannel(self, map=None)\n|\n|  bind(self, addr)\n|\n|  close(self)\n|\n|  connect(self, address)\n|\n|  createsocket(self, family=<AddressFamily.AFINET: 2>, type=<SocketKind.SOCKSTREAM: 1>)\n|\n|  delchannel(self, map=None)\n|\n|  handleaccept(self)\n|\n|  handleclose(self)\n|\n|  handleconnect(self)\n|\n|  handleconnectevent(self)\n|\n|  handleerror(self)\n|\n|  handleexpt(self)\n|\n|  handleexptevent(self)\n|\n|  handleread(self)\n|\n|  handlereadevent(self)\n|\n|  handlewrite(self)\n|\n|  handlewriteevent(self)\n|\n|  listen(self, num)\n|\n|  log(self, message)\n|\n|  loginfo(self, message, type='info')\n|\n|  readable(self)\n|\n|  recv(self, buffersize)\n|\n|  send(self, data)\n|\n|  setreuseaddr(self)\n|\n|  setsocket(self, sock, map=None)\n|\n|  writable(self)\n|\n|  ----------------------------------------------------------------------\n|  Data descriptors inherited from asyncore.dispatcher:\n|\n|  dict\n|      dictionary for instance variables (if defined)\n|\n|  weakref\n|      list of weak references to the object (if defined)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from asyncore.dispatcher:\n|\n|  accepting = False\n|\n|  addr = None\n|\n|  closing = False\n|\n|  connected = False\n|\n|  connecting = False\n|\n|  debug = False\n|\n|  ignorelogtypes = frozenset({'warning'})\n"
                },
                {
                    "name": "class SMTPChannel",
                    "content": "|  SMTPChannel(server, conn, addr, datasizelimit=33554432, map=None, enableSMTPUTF8=False, decodedata=False)\n|\n|  Method resolution order:\n|      SMTPChannel\n|      asynchat.asyncchat\n|      asyncore.dispatcher\n|      builtins.object\n|\n|  Methods defined here:\n|\n|  init(self, server, conn, addr, datasizelimit=33554432, map=None, enableSMTPUTF8=False, decodedata=False)\n|      Initialize self.  See help(type(self)) for accurate signature.\n|\n|  collectincomingdata(self, data)\n|      # Implementation of base class abstract method\n|\n|  foundterminator(self)\n|      # Implementation of base class abstract method\n|\n|  push(self, msg)\n|      # Overrides base class for convenience.\n|\n|  smtpDATA(self, arg)\n|\n|  smtpEHLO(self, arg)\n|\n|  smtpEXPN(self, arg)\n|      # Commands that have not been implemented\n|\n|  smtpHELO(self, arg)\n|      # SMTP and ESMTP commands\n|\n|  smtpHELP(self, arg)\n|\n|  smtpMAIL(self, arg)\n|\n|  smtpNOOP(self, arg)\n|\n|  smtpQUIT(self, arg)\n|\n|  smtpRCPT(self, arg)\n|\n|  smtpRSET(self, arg)\n|\n|  smtpVRFY(self, arg)\n|\n|  ----------------------------------------------------------------------\n|  Readonly properties defined here:\n|\n|  maxcommandsizelimit\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes defined here:\n|\n|  COMMAND = 0\n|\n|  DATA = 1\n|\n|  commandsizelimit = 512\n|\n|  commandsizelimits = defaultdict(<function SMTPChannel.<lambda> at 0x...\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from asynchat.asyncchat:\n|\n|  closewhendone(self)\n|      automatically close this channel once the outgoing queue is empty\n|\n|  discardbuffers(self)\n|\n|  getterminator(self)\n|\n|  handleclose(self)\n|\n|  handleread(self)\n|\n|  handlewrite(self)\n|\n|  initiatesend(self)\n|\n|  pushwithproducer(self, producer)\n|\n|  readable(self)\n|      predicate for inclusion in the readable for select()\n|\n|  setterminator(self, term)\n|      Set the input delimiter.\n|\n|      Can be a fixed string of any length, an integer, or None.\n|\n|  writable(self)\n|      predicate for inclusion in the writable for select()\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from asynchat.asyncchat:\n|\n|  acinbuffersize = 65536\n|\n|  acoutbuffersize = 65536\n|\n|  encoding = 'latin-1'\n|\n|  useencoding = 0\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from asyncore.dispatcher:\n|\n|  repr(self)\n|      Return repr(self).\n|\n|  accept(self)\n|\n|  addchannel(self, map=None)\n|\n|  bind(self, addr)\n|\n|  close(self)\n|\n|  connect(self, address)\n|\n|  createsocket(self, family=<AddressFamily.AFINET: 2>, type=<SocketKind.SOCKSTREAM: 1>)\n|\n|  delchannel(self, map=None)\n|\n|  handleaccept(self)\n|\n|  handleaccepted(self, sock, addr)\n|\n|  handleconnect(self)\n|\n|  handleconnectevent(self)\n|\n|  handleerror(self)\n|\n|  handleexpt(self)\n|\n|  handleexptevent(self)\n|\n|  handlereadevent(self)\n|\n|  handlewriteevent(self)\n|\n|  listen(self, num)\n|\n|  log(self, message)\n|\n|  loginfo(self, message, type='info')\n|\n|  recv(self, buffersize)\n|\n|  send(self, data)\n|\n|  setreuseaddr(self)\n|\n|  setsocket(self, sock, map=None)\n|\n|  ----------------------------------------------------------------------\n|  Data descriptors inherited from asyncore.dispatcher:\n|\n|  dict\n|      dictionary for instance variables (if defined)\n|\n|  weakref\n|      list of weak references to the object (if defined)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from asyncore.dispatcher:\n|\n|  accepting = False\n|\n|  addr = None\n|\n|  closing = False\n|\n|  connected = False\n|\n|  connecting = False\n|\n|  debug = False\n|\n|  ignorelogtypes = frozenset({'warning'})\n"
                },
                {
                    "name": "class SMTPServer",
                    "content": "|  SMTPServer(localaddr, remoteaddr, datasizelimit=33554432, map=None, enableSMTPUTF8=False, decodedata=False)\n|\n|  Method resolution order:\n|      SMTPServer\n|      asyncore.dispatcher\n|      builtins.object\n|\n|  Methods defined here:\n|\n|  init(self, localaddr, remoteaddr, datasizelimit=33554432, map=None, enableSMTPUTF8=False, decodedata=False)\n|      Initialize self.  See help(type(self)) for accurate signature.\n|\n|  handleaccepted(self, conn, addr)\n|\n|  processmessage(self, peer, mailfrom, rcpttos, data, kwargs)\n|      Override this abstract method to handle messages from the client.\n|\n|      peer is a tuple containing (ipaddr, port) of the client that made the\n|      socket connection to our smtp port.\n|\n|      mailfrom is the raw address the client claims the message is coming\n|      from.\n|\n|      rcpttos is a list of raw addresses the client wishes to deliver the\n|      message to.\n|\n|      data is a string containing the entire full text of the message,\n|      headers (if supplied) and all.  It has been `de-transparencied'\n|      according to RFC 821, Section 4.5.2.  In other words, a line\n|      containing a `.' followed by other text has had the leading dot\n|      removed.\n|\n|      kwargs is a dictionary containing additional information.  It is\n|      empty if decodedata=True was given as init parameter, otherwise\n|      it will contain the following keys:\n|          'mailoptions': list of parameters to the mail command.  All\n|                          elements are uppercase strings.  Example:\n|                          ['BODY=8BITMIME', 'SMTPUTF8'].\n|          'rcptoptions': same, for the rcpt command.\n|\n|      This function should return None for a normal `250 Ok' response;\n|      otherwise, it should return the desired response string in RFC 821\n|      format.\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes defined here:\n|\n|  channelclass = <class 'smtpd.SMTPChannel'>\n|\n|  ----------------------------------------------------------------------\n|  Methods inherited from asyncore.dispatcher:\n|\n|  repr(self)\n|      Return repr(self).\n|\n|  accept(self)\n|\n|  addchannel(self, map=None)\n|\n|  bind(self, addr)\n|\n|  close(self)\n|\n|  connect(self, address)\n|\n|  createsocket(self, family=<AddressFamily.AFINET: 2>, type=<SocketKind.SOCKSTREAM: 1>)\n|\n|  delchannel(self, map=None)\n|\n|  handleaccept(self)\n|\n|  handleclose(self)\n|\n|  handleconnect(self)\n|\n|  handleconnectevent(self)\n|\n|  handleerror(self)\n|\n|  handleexpt(self)\n|\n|  handleexptevent(self)\n|\n|  handleread(self)\n|\n|  handlereadevent(self)\n|\n|  handlewrite(self)\n|\n|  handlewriteevent(self)\n|\n|  listen(self, num)\n|\n|  log(self, message)\n|\n|  loginfo(self, message, type='info')\n|\n|  readable(self)\n|\n|  recv(self, buffersize)\n|\n|  send(self, data)\n|\n|  setreuseaddr(self)\n|\n|  setsocket(self, sock, map=None)\n|\n|  writable(self)\n|\n|  ----------------------------------------------------------------------\n|  Data descriptors inherited from asyncore.dispatcher:\n|\n|  dict\n|      dictionary for instance variables (if defined)\n|\n|  weakref\n|      list of weak references to the object (if defined)\n|\n|  ----------------------------------------------------------------------\n|  Data and other attributes inherited from asyncore.dispatcher:\n|\n|  accepting = False\n|\n|  addr = None\n|\n|  closing = False\n|\n|  connected = False\n|\n|  connecting = False\n|\n|  debug = False\n|\n|  ignorelogtypes = frozenset({'warning'})\n"
                }
            ]
        },
        "DATA": {
            "content": "all = ['SMTPChannel', 'SMTPServer', 'DebuggingServer', 'PureProxy'...\nwarningregistry = {'version': 0}\n",
            "subsections": []
        },
        "VERSION": {
            "content": "Python SMTP proxy version 0.3\n",
            "subsections": []
        },
        "FILE": {
            "content": "/usr/lib/python3.10/smtpd.py\n\n",
            "subsections": []
        }
    },
    "summary": "smtpd - An RFC 5321 smtp proxy with optional RFC 1870 and RFC 6531 extensions.",
    "flags": [
        {
            "flag": "",
            "long": "--nosetuid",
            "arg": null,
            "description": ""
        },
        {
            "flag": "-n",
            "long": null,
            "arg": null,
            "description": "This program generally tries to setuid `nobody', unless this flag is set. The setuid call will fail if this program is not run as root (in which case, use this flag)."
        },
        {
            "flag": "",
            "long": "--version",
            "arg": null,
            "description": ""
        },
        {
            "flag": "-V",
            "long": null,
            "arg": null,
            "description": "Print the version number and exit. --class classname -c classname Use `classname' as the concrete SMTP proxy class. Uses `PureProxy' by default. --size limit -s limit Restrict the total size of the incoming message to \"limit\" number of bytes via the RFC 1870 SIZE extension. Defaults to 33554432 bytes."
        },
        {
            "flag": "",
            "long": "--smtputf8",
            "arg": null,
            "description": ""
        },
        {
            "flag": "-u",
            "long": null,
            "arg": null,
            "description": "Enable the SMTPUTF8 extension and behave as an RFC 6531 smtp proxy."
        },
        {
            "flag": "",
            "long": "--debug",
            "arg": null,
            "description": ""
        },
        {
            "flag": "-d",
            "long": null,
            "arg": null,
            "description": "Turn on debugging prints."
        },
        {
            "flag": "",
            "long": "--help",
            "arg": null,
            "description": ""
        },
        {
            "flag": "-h",
            "long": null,
            "arg": null,
            "description": "Print this message and exit. Version: %(version)s If localhost is not given then `localhost' is used, and if localport is not given then 8025 is used. If remotehost is not given then `localhost' is used, and if remoteport is not given, then 25 is used."
        }
    ],
    "examples": [],
    "see_also": []
}