Unix/Linux Go Back    

RedHat 9 (Linux i386) - man page for smtpd (redhat section n)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)

smtpd(n)			     Tcl SMTP Server Package				 smtpd(n)

       smtpd - Tcl SMTP server implementation

       package require Tcl 8.3

       package require smtpd ?1.0?

       ::smtpd::start ?myaddr? ?port?


       ::smptd::configure ?option value? ?option value ...?

       ::smtpd::cget ?option?

       The  smtpd  package provides a simple Tcl-only server library for the Simple Mail Transfer
       Protocol as described in RFC 821 and RFC 2821.  By default the server  will  bind  to  the
       default network address and the standard SMTP port (25).

       This  package  was  designed  to  permit testing of Mail User Agent code from a developers
       workstation. In particular, on Unix platforms binding to the SMTP port requires root priv-
       ileges. I would not recommend running any script-based server as root unless there is some
       method for dropping root privileges immediately after the socket is bound.  Under  Windows
       platforms,  it  is not necessary to have root or administrator privileges to bind low num-
       bered sockets. However, security on these platforms is weak anyway. In  short,  this  code
       should  probably not be used as a permanently running MTA on an Internet connected server,
       even though we are careful not to evaluate remote user input.

       ::smtpd::start ?myaddr? ?port?
	      Start the service listening on port or the default port 25. If myaddr is given as a
	      domain-style  name  or numerical dotted-quad IP address then the server socket will
	      be bound to that network interface. By default the server is bound to  all  network
	      interfaces. For example:

		set sock [::smtpd::start [info hostname] 0]

	      will bind to the hosts internet interface on the first available port.

	      At present the package only supports a single instance of a SMTP server. This could
	      be changed if required at the cost of making the package a little more  complicated
	      to  read. If there is a good reason for running multiple SMTP services then it will
	      only be necessary to fix the options array and the ::smtpd::stopped variable usage.

	      As the server code uses fileevent(n) handlers to process the input on  sockets  you
	      will  need  to  run  the	event  loop. This means either you should be running from
	      within wish(1) or you should vwait(n) on the ::smtpd::stopped variable which is set
	      when the server is stopped.

	      Halt  the  server  and  release  the  listening  socket. If the server has not been
	      started then this command does nothing.  The ::smtpd::stopped variable is  set  for
	      use with vwait(n).

	      It  should  be  noted  that  stopping  the server does not disconnect any currently
	      active sessions as these are operating over an independant channel. Only explicitly
	      tracking	and closing these sessions, or exiting the server process will close down
	      all the running sessions. This is similar to the ususal unix daemon practice  where
	      the  server  performs  a	fork(2)  and  the  client  session continues on the child

       ::smptd::configure ?option value? ?option value ...?
	      Set configuration options for the SMTP server. Most values are the name of a  call-
	      back  procedure  to be called at various points in the SMTP protocol. See the CALL-
	      BACKS section for details of the procedures.

	      -validate_host proc
		     Callback to authenticate new connections based  on  the  ip-address  of  the

	      -validate_sender proc
		     Callback to authenticate new connections based on the senders email address.

	      -validate_recipient proc
		     Callback to validate and authorize a recipient email address

	      -deliver proc
		     Callback used to deliver email.

       ::smtpd::cget ?option?
	      If  no  option is specified the command will return a list of all options and their
	      current values. If an option is specified it will return the value of that option.

       validate_host callback
	      This procedure is called with the clients  ip  address  as  soon	as  a  connection
	      request  has  been  accepted and before any protocol commands are processed. If you
	      wish to deny access to a specific host then an error should  be  returned  by  this
	      callback. For example:

	       proc validate_host {ipnum} {
		  if {[string match "192.168.1.*" $ipnum]} {
		     error "go away!"

	      If  access  is  denied the client will receive a standard message that includes the
	      text of your error, such as:

	       550 Access denied: I hate you.

	      As per the SMTP protocol, the connection is not closed but we wait for  the  client
	      to send a QUIT command. Any other commands cause a 503 Bad Sequence error.

       validate_sender callback
	      The  validate_sender  callback  is called with the senders mail address during pro-
	      cessing of a MAIL command to allow you to accept or  reject  mail  based	upon  the
	      declared	sender.  To reject mail you should throw an error. For example, to reject
	      mail from user "denied":

	       proc validate_sender {address} {
		  eval array set addr \
		       [mime::parseaddress $address]
		  if {[string match "denied" $addr(local)]} {
		       error "mailbox $addr(local) denied"

	      The content of any error message will not be passed back to the client.

       validate_recipient callback
	      The validate_recipient callback is similar to the validate_sender callback and per-
	      mits  you to verify a local mailbox and accept mail for a local user address during
	      RCPT command handling. To reject mail, throw an error as above. The  error  message
	      is ignored.

       deliver callback
	      The  deliver callback is called once a mail message has been successfully passed to
	      the server. The procedure is called with the sender, a list of recipients  and  the
	      text of the mail as a list of lines. For example:

	       proc deliver {sender recipients data} {
		  set mail "From $saddr(address) \
			     [clock format [clock seconds]]"
		  append mail "\n" [join $data "\n"]
		  puts "$mail"

	      Note  that  the DATA command will return an error if no sender or recipient has yet
	      been defined.

	      This variable is set to true during the ::smtpd::stop command to permit the use  of
	      the vwait(n) command.

       Written by Pat Thoyts mailto:patthoyts@users.sourceforge.net.

       This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
       without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PURPOSE.
       See the file "license.terms" for more details.

       smtpd, smtp, services, RFC 821, RFC 2821, vwait, socket

smtpd					       1.0					 smtpd(n)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums

All times are GMT -4. The time now is 12:45 PM.