LevSelector.com New York
home > Email

Email
* intro * SMTP * POP3
* main MTA-s
* mail_User Agents
* misc. email programs
* mailing list managers
* more email programs
* email-related Books
* email-related Perl modules
* Java email API
* avoiding spam
* my qmail page

 
Intro home - top of the page -

 
UA ->MTA
<-LDA
 <-->  MTA<-
LDA->
UA

When you send an email - you use a program called "user agent" (UA , - also called MUA - Mail UA, or email client) - which helps you to send and receive emails, as well as sort things around in folders.

UA sends your email to a "Mail Transport Agent" (MTA) - usually an SMTP server listening on port 25.
(Try this from the prompt:  telnet   SomeDomain  25). You may send email directly to a destination MTA - or to an MTA on your provider - which will then pass your email to the destination MTA. Also note, that email may be passed not only using TCP/IP, but also via UUCP, etc.

UA receives email from Local delivery Agent (LDA) which may be implemented quite differently. For example, email can be delivered to user mailbox in his directory, or it can be available from a POP3 server (it listens on port 110) or from IMAP4 server (listens on port 143), or some other way.

* http://www.faqs.org/faqs/mail/setup/unix/part1/ - FAQ

Main abbreviations:
MTA - Mail Transport Agent (Routing, LDA and RDA)
LDA - Local delivery agent
RDA - Remote delivery agent
UA - User Agent

SMTP - Simple Mail Transfer Protocol (ESMTP - extended SMTP) - main protocols for sending email

POP3 - Post Office Protocol ver.3 - a client-server protocol to retrieve email from a remote server. POP3 server listens on TCP port 110.
IMAP4 - Internet Message Access Protocol - alternative to POP3, listens on port 143. Messages are stored on the mail-drop server. Allows user to manage email on the server (which is good).

MIME - Multipurpose Internet Mail Extensions - a way to send binary info (encoded text, spread sheet, image, etc.). Message can be a multipart message, containing several "inner" messages of different Content-Type.
APOP - Authenticated Post Office Protocol
Ph - Directory Access protocol
LDAP - Lightweight Directory Access Protocol
S/MIME, SSL, or RSA support for message encryption.

 
SMTP commands home - top of the page -

SMTP commands:
      telnet mail.somedomain.com 25
Try those 14 commands from prompt (RFC 821).
SMTP Command  -  What It Does
HELO  somedomain  -  Hello, identify the SMTP sender to the SMTP receiver.
MAIL  FROM: reverse-path  -  Mail - start an e-mail transaction to deliver the e-mail to one or more recipients.
RCPT  TO: forward-path  -  Recipient - identify an individual recipient of e-mail.
DATA  -  Data - consider the lines following the command to be e-mail from the sender.
SEND  FROM: reverse-path  -  Send - deliver e-mail to one or more work stations.
SOML  FROM: reverse-path  -  Send or mail - deliver e-mail to one or more work stations or recipients if the user is not active.
SAML  FROM: reverse-path  -  Send and mail - deliver e-mail to one or more work stations and recipients if the user is not active.
RSET  -  Reset - end the current e-mail transaction.
VRFY  string  -  Verify - ask the receiver to confirm that a user has been identified.
EXPN string  -  Expand - ask the receiver to confirm that a mailing list has been identified.
HELP  string  -  Help - ask the receiver to send helpful information to the sender.
NOOP  -  Noop - ask the receiver to send a valid reply (but specify no other action).
QUIT  -  Quit - ask the receiver to send a valid reply, and then close the transmission channel.
TURN  -  Turn - ask the receiver to send a valid reply and then become the SMTP sender, or else ask the receiver to send a refusal reply and remain the SMTP receiver.

Note: each command should be finished with <CRLF>.
Note: A dot by itself in a line marks the end of your multi-line message (end of "DATA" command).
Note: The reverse-path consists of an optional list of hosts and the sender mailbox. When the list of hosts is present, it is a "reverse" source route and indicates that the mail was relayed through each host on the list (the first host in the list was the most recent relay). This list is used as a source route to return non-delivery notices to the sender. As each relay host adds itself to the beginning of the list, it must use its name as known in the IPCE to which it is relaying the mail rather than the IPCE from which the mail came (if they are different). In some types of error reporting messages (for example, undeliverable mail notifications) the reverse-path may be null.
Note: The forward-path consists of an optional list of hosts and a required destination mailbox. When the list of hosts is present, it is a source route and indicates that the mail must be relayed to the next host on the list. If the receiver-SMTP does not implement the relay function it may user the same reply it would for an unknown local user (550). When mail is relayed, the relay host must remove itself from the beginning forward-path and put itself at the beginning of the reverse-path. When mail reaches its ultimate destination (the forward-path contains only a destination mailbox), the receiver-SMTP inserts it into the destination mailbox in accordance with its host mail conventions.
     For example, mail received at relay host A with arguments
                       FROM:<USERX@HOSTY.ARPA>
                       TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>
     will be relayed on to host B with arguments
                       FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>
                       TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.
     This command causes its forward-path argument to be appended to the forward-path buffer.

Read command descriptions here:
* http://www.freesoft.org/CIE/RFC/821/13.htm -
* http://www.freesoft.org/CIE/RFC/821/14.htm -
* http://www.nthelp.com/smtp_commands.htm -
* http://users.pandora.be/sonal.nv/ics/faq/TSMTPClient/SmtpMailCmds.html -
* http://www.ietf.org/rfc/rfc0821.txt - text of  RFC 821 "SIMPLE MAIL TRANSFER PROTOCOL" by Jonathan B. Postel

 
POP3 commands home - top of the page -

POP3
telnet pop.somedomain.com 110
Try those commands (from RFC1225):
Command  -  Responses Examples
USER name  -  +OK name is welcome here 
-ERR never heard of name 
USER David 
+OK Please enter a password 
PASS string  -  +OK maildrop locked and ready 
-ERR invalid password 
-ERR unable to lock maildrop 
PASS test 
+OK valid logon 
QUIT  -  +OK  +OK Server closing connection 
STAT  -  +OK nn mm  STAT 
+OK 2 320 
LIST MsgNo  -  +OK scan listing follows 
-ERR no such message 
LIST 
+OK 2 messages (320 octets) 
1 120 
2 200 
... 

LIST 2 
+OK 2 200 

RETR MsgNo  -  +OK message follows
-ERR no such message 
RETR 1 
+OK 120 octets 
< the POP3 server sends the entire message here > 
DELE msg  -  +OK message deleted 
-ERR no such message 
DELE 2 
+OK message deleted 
NOOP  -  +OK no transaction  NOOP 
+OK
LAST  -  +OK nn  LAST 
+OK 2 
RSET  -  +OK  RSET 
+OK maildrop has 2 messages (320 octets) 
Additional Commands 
TOP msg nn  -  +OK top of msg 
-ERR 
TOP 1 10 
+OK 
< first 10 lines of the header > 
RPOP user  -  +OK 
-ERR 
RPOP david 
+OK enter password 

Read command descriptions here:
* www.freesoft.org/CIE/RFC/1725/index.htm -
* www.freesoft.org/CIE/RFC/1725/index.htm -

 
Main MTAs home - top of the page -

Main MTAs (Mail Transport Agents  - Servers):

* www.sendmail.org - sendmail - a 20-year old veteran MTA, comes standard with all Unix-s.
* www.sendmail.com - commercial version of sendmail
* http://serverwatch.internet.com/reviews/mail-sendmail.html - good review
Known to be difficult to configure (you have to spend hours trying to figure out how something like this works:  $*<$+@$-.$=W>$*).  As Chris Lewis, author of UNIX Email Software Survey FAQ writes "Please don't take this as condescending - I've been working on/in/with email systems for over 12 years and I *still* won't play with (as just one example) sendmail.cf's."  That's one of the reasons why many shrewd businesses use qmail or some other MTA instead of standard sendmail.
  Sendmail can do just about anything - and this is also its main problem. The language of the sendmail.cf is cryptic, but the problem is that it's extremely difficult to know when the rules you are implementing are the right thing - many sendmail configurations do slightly buggy, or even extremely buggy, or illegal things.  Default configurations and minimal changing is the approach to take.  The major problem with sendmail is that it tries to do too many things.  Rather than confining itself to handling local mail, and simply routing external mail and leaving transport-specific format/standards conversions to transport software, it attempts (nay virually *insists*) that you have to do all of the format/standards conversions for different transports all at once. Which results in configuration files that are veritable nightmares to maintain.  And that many sendmail.cf files depend on out-of-date standards for different transports, rather than trying to unify them (as in RFC976).
  Indeed, while common wisdom and practice mandates that MTAs don't rewrite headers, sendmail makes it extremely difficult to *not* rewrite headers.  Which results in many major systems attempting to "be nice", yet, totally scramble return addresses and the like.
  There are several different sendmail lineages in the world but they seem to be coming together now with Eric Allman's work creating sendmail V8.x.  Sendmail V8.1 was shipped with BSD 4.4 UNIX.
  It is strongly recommended that anyone contemplating running sendmail upgrade to at least 8.9.x (see www.sendmail.org), which has a number of serious security problems fixed. Administrators wishing something easier to configure than sendmail, particularly with the addition of filtering rules, are best advised to consider using qmail, exim instead, or, using mailshield SMTP relaying to stand in "front" of sendmail.

* www.qmail.org - fast and easier to configure than sendmail.
Was written originally by Dan Bernstein to overcome the limitations of and flaws in sendmail. qmail is capable of handle large volumes, fast, secure. Docs available in many languages (for example, in Russian - www.ru.qmail.org:8101/ ) .  Mailing lists: mailto:qmail-help@list.cr.yp.to , mailto:qmailannounce-help@list.cr.yp.to.
 - qmail is designed using unix philosophy as a set of many small utilities each performing its own task.  Even qmail's configuration is modular.  qmail doesn't have large monolithic configuration files with complex structures, that have to be read and parsed every time that a new mail process is created, only to have 70% or more of that information remain unused because it is irrelevant to the task at hand.  qmail's configuration comprises individual files in /var/qmail/control, each file having a single job.  The names of the local domains are listed, one per line, in /var/qmail/control/locals, for example.  Many configuration tasks (and FAQ answers!)  are, as a result of this philosophy, one-liners involving `echo' and `cat'.
  - qmail was designed to be secure.  Not only does the mail system not trust the outside world, but different modules in the mail system don't even trust one another.  Different parts of the mail system run under different non-privileged UIDs ("qmaild", "qmailr", "qmailq", &c.).  So, for example, even if the SMTP server (qmail-smtpd, which runs as user "qmailr") were compromised, the rest of the system will not be. qmail has only one setuid binary, qmail-queue which is setuid to one of the qmail user IDs, not root.  qmail has only two programs that run as root, qmail-start which spawns the other daemon processes under the correct UIDs and qmail-lspawn which spawns the local delivery program qmail-local under the UID and GID of the user being delivered to.  Neither program writes to any files or spawns any program under the root user ID.  qmail doesn't treat root as a "real" user, and so never delivers mail as root.
  - qmail provides a flexible aliasing/forwarding mechanism, supports /etc/aliases and .forward with its fastforward and dot-forward packages. Each user controls all local parts that begin with the user's username, allowing each user to have an unlimited number of different local parts.  Delivery to each local part is (optionally) controlled by a separate .qmail-* file in the user's home directory.

* www.postfix.org - postfix - even faster server (use with procmail).

* www.exim.org - Exim (Author: Philip Hazel - ph10@cus.cam.ac.uk) is a message transfer agent (MTA), similar to Smail 3, but its facilities are more extensive, and in particular it has some defenses against mail bombs and unsolicited junk mail in the form of options for refusing messages from particular hosts, networks, or senders. It can be installed in place of sendmail, although the configuration of exim is quite different to that of sendmail.

* http://serverwatch.internet.com/mailservers.html - some other email servers

 
mail UAs home - top of the page -

On MS Windows platform people mostly use:
  - Microsoft Outlook (Express),
  - Netscape Composer built-in email client,
  - Eudora,
  - Forte Agent,
  - Lotus Notes email,
  - Pegasus,
  - and some others (see list on www.tucows.com).

On Unix there is a whole bunch of utilities:
  - mail = binmail - simple UA. Binmail stores mail in "mbox" format. It also may serve as a TA (Transport Agent) on some systems, but it is not any good at that. On BSD, binmail invokes sendmail to do the MTA function.
  - rmail - remote mail - handles remote mail received via uucp. You better replace it with smail 2.5 etc.
  - Mail - the original BSD UA. Not bad, stores mail in "mbox" format.
  - mailx - AT&T's answer to BSD "Mail", from which it is descended.  Probably should be avoided, stores mail in "mbox" format.
  - mush (or Mush - also available commercially as Z-Mail from z-code.com) - "Mail User's Shell" (author Dan Heller <argv@well.com>).  Internally, mush has a csh-like scripting language, you can virtually build your own library of email features. Has several interfaces (command-line or screen).  Mush stores its messages in "mbox" format, or MMDF format. Note: Z-Mail is not related at all to Zmailer.  Zmailer is an MTA.
  - elm - a screen-interfaced replacement for "/bin/mail" and "mailx".   Has conenient utilites (including autoreply), easy to use.
  - mm - a good UA similar to old MM program written and developed for DEC20s over a period of many years. Was developed at Columbia University. Uses mbox file format (can also use some others).
  - MM - good UAs for novices from Columbia University (free).
  - MH - Message Handling system, in which each command is a separate program, and the shell is used as an interpreter.  So, all the power of UNIX shells (pipes, redirection, history, aliases, and so on) works with MH - you don't have to learn a new interface. Mail messages are stored in individual files.
  - XMH - provides a graphical user interface to the MH Message Handling System.
  - EXMH - an X interface to the MH mail system written in John Ousterhout's Tcl/Tk language system and requires that you have both Tcl/Tk and MH installed.  If you have metamail installed, exmh supports MIME. Has many conenient features.
  - GNU Emacs Rmail - Rmail is an Emacs subsystem for reading and disposing of mail.  Rmail stores mail messages in Rmail files in BABYL format (originally used under the ITS operating system), although it can incorporate new mail from MMDF and Unix format files, or mixed-format files.  Reading the messages in an Rmail file is done in a special major mode, Rmail mode, which redefines most letters to run commands for managing mail. Replying uses another Emacs subsystem, Mail mode.
  - VM - View Mail - a GNU Emacs subsystem that allows UNIX mail to be read and disposed of within Emacs.  Commands exist to do tasks like bursting and creating digests, message forwarding, and organizing message presentation according to various criteria.
  - MH-E: GNU Emacs front end for MHIt is a part of the standard GNU Emacs distribution.  It offers all the functionality of MH, the visual orientation and simplicity of use of xmh, and full integration with Emacs. The command set is similar to that of rmail (the Emacs front end for BSD mail) and BSD mail itself. Mh-e allows one to read and process mail very quickly. During a reply, the original message is displayed simultaneously in another window for easy reference where a mh-e command can quickly incorporate and format this text into your reply. With mh-e you compose outgoing messages in Emacs.
  - C-Client - a general library useful for creating MUA's (useful if you want to write a new MUA).
  - Metamail - a software implementation of Mime, designed for easy integration with traditional mail-reading interfaces.
  - MailManager - a A MUA implemented using C-Client for NeXT computers.
  - MMail - a WYSIWYG, text composition, visualization and MIME mailer.
  - Pine - an easy to use email UA developed by the University of Washington (Authors: Lundblade, Seibel, and Crispin). Originally based on Elm (Pine Is No-longer Elm). Very simple to use, works on all unixes and even on DOS. It's built-in text editor is also available as a stand-alone program (called Pico) - very simple, convenient, even has spell-checker.
  - Ream - similar to elm in a number of ways, but considerably smaller and with a stronger separation between MUA and MTA behaviours. It runs over sendmail, mmdf and PP.
  - ML - a mail reader for the X window system, using Motif and the IMAP protocol. It provides active filtering of mail into user-defined views using a simple but powerful filter language.
  - Z-Mail - a commercial variant of mush - a UNIX World Magazine "Product of the Year" winner for 1991, is a complete electronic mail system for workstations, PCs, ASCII terminals and Macs.  Z-Mail provides Motif and Open Look graphical user interfaces, as well as two character modes.  The software has been ported to nearly every system that runs UNIX, and it works with all standard UNIX mail transport agents including sendmail, binmail, smail, MMDF and X.400 gateways.  Z-Mail can replace or coexist with standard mail user agents on the system, including BSD Mail, AT&T mailx, Sun Mail Tool, Elm or Mush.  Most anyone can use Z-Mail "off the shelf" and immediately benefit from its simple interface and advanced features.

 
misc email programs home - top of the page -

  - uumail - Uumail is a very old and obsolete precursor to smail 2.5.
  - smail 2.5 - a small, simple and hard-coded rule MTA for use on UUCP networks. Not recommended for new installations. Can be used with sendmail as a UUCP router.
  - lmail - implements mail-to-pipe and mail-to-file aliasing - to be used with smail 2.5. Has bugs.
  - smail 3 - a domain-capable mail router and delivery program that works in the UUCP zone and on the Internet and that is capable of gatewaying between the two.  It supports SMTP, UUCP mail, alias files, .forward files, mailing list directories, pathalias files, /etc/hosts files, the domain name system, and can also query uucp for neighboring sites, automatically. It is also very simple to configure with a reasonable certainty of correctness.
  - ZMailer - intended for gateways or mail servers or other large site environments that have extreme demands on the abilities of the mailer.
  - MMDF - a MTA older and simpler than sendmail. Understands smtp, uucp, and other protocols, maintained in Germany.
  - PP - A MTA for high volume message switching, protocol conversion, and format conversion. PP is an appropriate replacement for MMDF or Sendmail, and also supports SMTP and UUCP mail.PP is *very* large and ideal for large organizations, where PP would be used as "backbone mail servers", and something simpler on the "client" computers.  It does have _substantial_ learning and support requirements, and is *not* suitable for smaller installations.  It does, however, shine in large production environments, where policy-based routing, high levels of security, or extensive gatewaying to different transports is required.
  - SVR4 mail - a domain-capable mail router and delivery, supports  SMTP, UUCP mail, alias files, forwarding files, mailing list directories, /etc/hosts files, the domain name system, and can also query uucp for neighboring sites, automatically.  It is also very simple to configure with a reasonable certainty of correctness. It also supports mail-to-pipe and mail-to-file. SVR4 mail uses configuration files to resolve addresses based on their syntax, somewhat similar to sendmail, but using regular expressions and a more easily understood syntax.
  - deliver - allows any user to write a shell script that processes all incoming mail messages for that user.  The system administrator may also install scripts that process all messages by installing it as the Local Delivery Agent (LDA, lmail replacement). The output of a script is a list of mail addresses, files and programs that should receive the message.  It has access to each message as it is processed, so the action can be content dependent.  The script may also generate automatic replies, like the "vacation" program, or pass along a modified version of the original message. Deliver can be used to construct mail-based services (e.g. automatic mailing list maintenance).  It can also be used to filter mail automatically in prearranged ways (e.g. encryption and decryption, tossing junk mail, or vacation notices).
  - procmail - can be used to create mail-servers, mailing lists, sort your incoming mail into separate folders/files (real convenient when subscribing to one or more mailing lists or for prioritising your mail), preprocess your mail, start any programs upon mail arrival (e.g. to generate different chimes on your workstation for different types of mail) or selectively forward certain incoming mail automatically to someone. Procmail can be used and installed by an unprivileged user (for himself only). It can be used as a drop in replacement for the local delivery agent /bin/mail (with biff/comsat support). It can be used as a general mailfilter for whole groups of messages (e.g. when called from within sendmail.cf rules). The accompanying formail program enables you to generate autoreplies, split up digests/mailboxes into the original messages, do some very simple header-munging/extraction, or force mail into mail-format (with leading From line). Also included is a comprehensive mailinglist/archive management system.  Since procmail is written entirely in C, it poses a very low impact on your system's resources (under normal conditions, when you don't start other programs/scripts from within it). Procmail was designed to deliver the mail under the worst conditions (file system full, out of swap space, process table full, file table full, missing support files, unavailable executables; it all doesn't matter).  Should (in the unlikely event) procmail be unable to deliver
 your mail somewhere, the mail will bounce back to the sender or reenter the mailqueue (your choice).
  - mailagent - yet another mail filter, written in perl, which will let you do anything with your mail. Plus it is very extensible.
It has all the features you may expect from a filter: mailing lists sorting, forwarding to MTA or to inews, pre-processing of message before saving into folder, vacation mode, etc... It was initially written as an ELM-filter replacement, but has now enough power to also supplant MMDF's .maildelivery. There is also a support for @SH mail hooks, which allows you to automatically distribute patches or software via command mails.  The mailagent was designed to make mail filtering as easy as it can be. It is highly configurable and fairly complete. Rules are specified in a lex-like style, with the full power of perl's regular expressions. The automation supports the notion of mode, and header selection has many magic features built-in, to ease the rule writing process.  To give a simple example, the two following rules:
     Subject: /cron output/ { SAVE cron };
     To Cc: dist-users  { FORWARD friend@acri.fr; LEAVE };
would save in a folder 'cron' all cron-related mail, and forward mail from the dist-users mailing list to a friend, leaving a copy in the system mailbox for immediate processing... The distribution comes with a set of examples, an exhaustive test suite, and naturally a detailed manual page. It should be noted that the mailagent will work even if your system administrator forbids "| programs" hooks in the ~/.forward, provided you have access to some sort of cron daemon. 
mailagent is available from CPAN: http://www.perl.com/CPAN-local/authors/Raphael_Manfredi/
  - pathalias - uucp, not recommended any more
  - uuhosts - uucp, no recommended any longer
  - unpackmaps - uucp, no recommended any longer
  - unshar - uucp - capable of automatically unpacking new files from a newsgroup spool directory, and requires no interaction whatsoever with the news system.  Apart from UUCP maps, it can be used to automatically and safely unpack shar files from the sources newsgroups.  It does not handle some of the newer, esoteric shar formats that do automatic uudecodes, etc.

 
mailing lists managers (MLM) home - top of the page -

MLM - Mailing List Managers (also called listserves):
-
* Lsoft Listserv - www.lsoft.com -  The most popular mailing-list management software on the market (~50% of ALL email list messages on the Internet). Examples:  C|NET - over 4 million users on 23 LISTSERV lists, University of Arizona - 1,934 lists on a single RS/6000 server. Platforms - Unix, Windows, VMS. Listserv requires low maintenance after installation, and it is very reliable. But it is expensive for low-end users. Read this review - serverwatch.internet.com/listserver-listserv.html (also for Listserv Lite version review - serverwatch.internet.com/listserver-listservlite.html ). Listserv has somewhat tricky installation - and it is not very intuitive for end-users.
-
* ezmlm - www.ezmlm.org - a qmail-based mailing list manager written by Dan J. Bernstein (author of qmail). It has all the basic functionality of a mailing list manager, such as subscriber address management including automated bounce handling as well as message distribution and archiving. ezmlm-idx is an add-on to ezmlm. It adds multi-message threaded message retrieval from the archive, digests, message and subscription moderation, and a number of remote administration function.  The whole package is very good and easy to work with.
-
* Lyris listmanager - www.lyris.com - very good. Unix, Windows, OS/2.  Has probably the best Web-based interface for admins and users. Allows users to read, contribute, search, join, and leave mailing lists over the Web. Users also have the option of choosing to receive their messages from Lyris mailing lists by regular e-mail or by accessing and reading them on the Web. 
     Free - unlimited number of small mailing lists (<200 members per list).
     $500 - 500 members/list
     5K - unlimited number of members per list + ultra high-performance mail sending engine ( hundreds of messages per second, good for 10K members and more).
     For a little extra - get secure private newsgroups.
Additional features in Lyris include an extremely fast mail engine that is capable of delivering hundreds of messages per second, automatic e-mail error detection, an installation wizard, automatic message archiving, fast text-based searching capabilities for the mailing list archives, multithreading capabilities (offers better performance when the server is used in multiple CPU configurations), extensive logging capabilities, numerous moderation options (for moderated discussion groups), server action phrases (customized auto-responders with tailored responses based on the content of messages), and support for virtual hosts (allows multiple organizations to share one Lyris server while appearing to users to be separate, distinct servers). Excellent security options. Excellent documentation and support. Admin duties can be delegated to other users. 
Failsafe unsubscription system, support for parent/child lists, site admin can now disable mailing lists and limit the number of members on a list, progress reports can now report full SMTP delivery summary, document mail merging, password option (pw=) when subscribing, server cookie and thread-priority commands added to Perl toolkit, speed improvements, security vulnerabity fix, improved mail loop detection, SMTP thread-tracking option; bug fixes; optional ODBC database connectivity. Random header/footer rotation; review options to obtain reports by type of member; headers and footers can be defined for an entire site or server; member id, site, and list document caching for increased speed; option to allow blank message bodies in postings; Built-in Web server; HTTP fetching of ads; in-memory message processing; versions go up to several million messages per hour; rebranding option; Linux version now available; Enhanced analysis tools; mail engine now scales to 500,000 unique messages per hour; more flexible mail merge; unique text or banner ads into can be added into every e-mail creating advertising opportunities; enhanced "documents" (e.g., Hello and Confirm) can now use double-byte characters, other international symbols (such as accents), and HTML to further improve list members' experiences; read review here: serverwatch.internet.com/listserver-lyris.html
  - www.lyris.com = www.lyristechnologies.com - Lyris Technologies, Inc. (since 1994, in CA):
  -- listmanager - Lyris ListManager helps you manage permission email campaigns, email announcement lists, and online discussion groups.
  -- listmanager_sql - Lyris ListManagerSQL is opt-in email marketing software designed for targeted email campaigns and highly-scalable email broadcasting majordomo - program
  -- mailengine - Lyris MailEngine sends or relays email up to 150,000 messages per hour from a single server.
  -- mailshield - Lyris MailShield is a server-based email filtering program for businesses. (also www.mailshield.com )
-
* Majordomo - http://www.greatcircle.com/majordomo/ - Majordomo is one of the first tools ever created for managing mailing lists on the Internet. Unix based. Small C-program + perl. Free. Works in conjunction with some MTA (sendmail, qmail, smail). Confusing setup. No tech support. Outdated. Doesn't attempt to detect mail loops. Read FAQ here: www.greatcircle.com/majordomo/majordomo-faq.html , Review - serverwatch.internet.com/listserver-majordomo.html .
-
* SmartList - an email list management system based on procmail (http://www.procmail.org) and Perl.
     - http://www.hartzler.net/smartlist/SmartList-FAQ.html - FAQ
     - http://www.hartzler.net/smartlist/Manual.html  - manual
-
Some other programs (mostly Windows based):
* www.mailloop.com - Mailloop ($400, Windows) - used and sold by some shrewd mailing list marketers 

* Cren Listproc - www.listproc.net - not very convenient to maintain http://serverwatch.internet.com/listserver-unity.html 
* serverwatch.internet.com/listservers.html - List Servers
* serverwatch.internet.com/listserver-arrow.html - Arrow Mailing List Server (Windows)
* serverwatch.internet.com/mailserver-dmail.html - DMail Email Server (Windows, Unix) - A POP3/SMTP/List server suite designed for the SOHO market
* serverwatch.internet.com/listserver-liststar.html - ListSTAR (Macintosh)
* serverwatch.internet.com/listserver-ntlist.html - NTList (Windows)
* serverwatch.internet.com/listserver-sllist.html - Seattle Lab List Server (Windows)
* serverwatch.internet.com/listserver-unity.html - UnityMail (Windows)

Comparing MLMs look for features like ability to restrict submissions, detecting loops, adding standard header & footer (with info how to get help on unsubscribe), archiving, address translations (allows a person to have different addresses at which he receives email or sends email from).

* http://www.postcast.com/ - PostCast is an e-mail and database software for MS Windows (MS Access) with integrated SMTP mail server, e-mail merge client, scheduler, autoresponders and many other tools.
 

-
There are some directories of mailing lists, for example:
* http://catalog.com/vivian/interest-group-search.html -
* www.pubsgroup.com/MailingLists.htm -
-
How to run a mailing list - and some history.
The simpliest way to run a mailin list is to do it manually from your email program (for example Outlook). Send your email newsletter to yourself, and put all other addresses in the Bcc: field so the whole list isn't visible to the recipients. As your lsit grows, you may need some tools to merge the lists, for example:
* Campaign - www.arialsoftware.com
* NetMailer - www.alphasoftware.com/netmailer/
Further you may find a Web hosting which would provide you with a mailing list functionality (for example Majordomo) for ~ $10..20/mo - or free, if you already use their hosting. Having mail-list server will allow recepients to subscribe/unsubscribe by themselves - a must for a large list. There are also some services out there which will serve your mailing list for you -Yahoo and other search engines will give you lists of companies which provide service for smaller newsletter and discussion lists, too. Search for "listbot" on  www.wilsonweb.com  to see some links. Also read PC Magazine review - www.zdnet.com/pcmag/stories/reviews/0,6755,2425991,00.html. Some of these services are absolutely free, for example ListBot, - but will include some advertising.

* eGroups - bought by Yahoo! - http://groups.yahoo.com/local/news.html
* OneList - bought by Yahoo! - http://groups.yahoo.com/
* Topica - www.topica.com
* ListBot - bought by Microsoft - www.listbot.com
* CoolList - www.coollist.com/
* Envoy Mail - www.envoymail.com - www.envoyinc.com
* LSoft ListPlex - www.lsoft.com/EASE-head.html
* PostMaster General - www.postmasterdirect.com
* SparkList - (uses Lyris) - www.sparklist.com
* UnityMail Express from MessageMedia - www.messagemedia.com/solutions/unitymail/um_express.shtml
* Lyris - www.lyris.com
* Revnet Groupmaster - www.groupmaster.com/html/hosting.html

e-mail campaign provider:
* eGain Communications - www.egain.com
* Exactis.com - www.exactis.com = www.experian.com
* Kana Communications - 

Autoresponders with followup (for marketing):
* Aweber.com - $30/mo for an autoresponder with 6 followups
* www.google.com/search?q=autoresponders&cat=gwd%2FTop - list of autoresponders on Google
* www.sendfree.com - autoresponder ad exchange
* www.getresponse.com
 

-
In 1986, Eric Thomas created ListServ, - the first automated list server
Later, Anastosias Kotsikonas developed an automated list server, ListProc, for Unix. 
Later Brent Chapman created a simple list server called Majordomo. This program was (and still is) very popular, it is free and easily customizable with Perl.

Initially, list servers were email command driven. In 1997, Lyris list server appeared with new features like web browser administration.
Companies such as L-Soft (producer of ListServ) and Lyris began providing list hosting services - reliable, easy administration. Some companies used ListServ, Lyris, ListProc, or Majordomo, others developed their own proprietary list server programs. 

Some modern companies added some marketing/revenue-building features ( response tracking, trackable URLs, dynamic content, and targeted content delivery). 
* Revnet - www.revnet.com (messagemedia)
* Interstep - was acquired by Flycast, which was aquired by Engage - www.engage.com
* Exactis.com - www.exactis.com = www.experian.com
* www.revnetdesign.com/ - content


 
more email programs home - top of the page -

Everything Email - resource with many links, but strangely lacking main industry workhorses like sendmail, qmail, lyris, listserv, etc. Looks like the site is compiled by a non-technical person targeting small user.
  * http://everythingemail.net/ -
  * http://everythingemail.net/email_software.html -
  * http://everythingemail.net/email_services.html -
 

qpopper
cyrus
vpopmail homepage ( http://www.inter7.com/vpopmail )
qmail@planetsites.com - mailing list
Security and encryption:  OpenPGP and S/MIME formats.
vCard - and vCalendar formats to distribute info about the person and scheduling info.
Mailbox formats:
  mbox (ant many variations of it) - many messages in one file
  MH - each message in a separate file
  Maildir - to be used with qmail - an enhancement of MH format.
  Mailcap files

 
Email Related Books home - top of the page -

 
* "Programming Internet Email - David Wood, O'Reilly, 1999 - very good. Describes protocols and software, provides perl and java examples of solving common tasks (for example - has a perl script mail.pl working similar to /bin/mail - but also capable of attaching binary files). 
* "Running qmail" - by Richard Blum, 2000
* "The qmail Handbook" - by Dave Sill, 2001
* "sendmail" - by Bryan Costales & Eric Allman, O'Reilly, 2nd ed., 1997
* "Sendmail - Theory and Practice" - by Frederick Avolio & Paul Vixie, 1995
* "sendmail for Linux" - by Richard Blum, 2000 
* "Managing Mailing Lists" - by Alan Schwartz, O'Reilly, 1998 (reviews Unix-based mailing lists -- Majordomo 1.94.4, Listproc 6.0c, SmartList 3.10, and LISTSERV Lite 1.8d )

 
email with perl  home - top of the page -

Email can be sent from Perl by
  either invoking some external client program (like mail),
  or invoking some MTA (like sendmail)
  or connecting directly to some SMTP server (usually via port 25).
 
$sendmail' => '/usr/sbin/sendmail -t -oi';
open(MAIL,"|$sendmail");
print MAIL <<EOM;
From: $from_email ($from_name)
To: $to_email ($to_name)
Subject: $subject

$email_txt
EOM
close(MAIL);

Net::SMTP - Simple Mail Transfer Protocol Client (Author - Graham Barr) - talks to SMTP server. The fastest way when you need to send many emails. Note: Net::SMTP, Net::POP3, Net::FTP, etc. are part of famous libnet library (go to CPAN and search for libnet) - www.perl.com/CPAN-local//authors/id/G/GB/GBARR/.
* www.perldoc.com/perl5.6/lib/Net/SMTP.html
    $smtp = Net::SMTP->new('mailhost',
                           Hello => 'my.mail.domain'
                           Timeout => 30,
                           Debug   => 1,
                          );
-------------------------
#!/usr/local/bin/perl -w

use Net::SMTP;

$smtp = Net::SMTP->new('mailhost');

$smtp->mail($ENV{USER});
$smtp->to('postmaster');

$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();

$smtp->quit;

Mail::Mailer - Simple interface to electronic mailing mechanisms.
* www.perldoc.com/perl5.6/lib/Mail/Mailer.html
Sends mail using any of the built-in methods (mail, sendmail, smtp server).
You can alter the behaviour of a method by passing $command to the new method.
mail 
Use the Unix system mail program to deliver the mail. $command is the path to mail. Mail::Mailer will search for mailx, Mail and mail (in this order).

sendmail
Use the sendmail program to deliver the mail. $command is the path to sendmail. 

smtp
Use the smtp protocol via Net::SMTP to deliver the mail. The server to use can be specified in @args with

    $mailer = new Mail::Mailer 'smtp', Server => $server;

test
Used for debugging, this calls /bin/echo to display the data. No mail is ever sent. $command is ignored. 

 

use Mail::Mailer;
use Mail::Mailer qw(mail);

$mailer = new Mail::Mailer;
$mailer = new Mail::Mailer $type, @args;

$mailer->open(\%headers);
print $mailer $body;
$mailer->close;
 

 - MIME::Lite package - good way to send attachments. Example: sending log file in case of failure (in csh syntax):
some_job >>& $log1file
if ( "$status" != "0" ) then
   echo "Error at:" >> $log1file
   date >> $log1file
   sendmime.pl --to=$mailTo --subject='some_job Failed' --msg_file=$log1file
   exit(1)
endif
Here is a working copy:  sendmime.pl
It is a simple script using MIME::Lite, pieces of code looking like this:
 $msg = MIME::Lite->new( 
                                     From    =>'me@myhost.com',
                                     To      =>'you@yourhost.com',
                                     Cc      =>'some@other.com, some@more.com',
                                     Subject =>'A message with 2 parts...',
                                     Type    =>'multipart/mixed'
                                     );

   ### Add parts (each "attach" has same arguments as "new"):
$msg->attach(Type     =>'TEXT', 
                                     Data     =>"Here's the GIF file you wanted"
                                     ); 
 $msg->attach(Type     =>'image/gif',
                                     Path     =>'aaa000123.gif',
                                     Filename =>'logo.gif'
                                     );

#Output a message:
### Format as a string:
                        $str = $msg->as_string;
### Print to a filehandle (say, a "sendmail" stream):
                        $msg->print(\*SENDMAIL);
### Send in the "best" way (the default is to use "sendmail"):
                        $msg->send;

Here is how to send an HTML formatted email with image(s) attached to the message itself:
#!/usr/local/bin/perl
# email html with image attached

use MIME::Lite;                 # Standard CPAN module
my $from_address = 'selector@LevSelector.com';
my $to_address = 'selector@LevSelector.com';

my $subject = 'MIME test - HTML with image';
my $mime_type = 'multipart/related';

# Create the message headers
my $mime_msg = MIME::Lite->new(
   From => $from_address,
   To   => $to_address,
   Subject => $subject,
   Type => $mime_type
   )
  or die "Error creating MIME body: $!\n";

# Attach the HTML content
my $message_body = '<html><body><H3>Hello world!
   <img src="cid:myid.gif"></H3></body></html>';

$mime_msg->attach(Type => 'text/html',
                  Data => $message_body);

# Attach the image
$mime_msg->attach(
   Type => 'image/gif',
   Id => 'myid.gif',
   Encoding => 'base64',
   Path => 'pikachu.jpg');

$mime_msg->send;

 - MIME::Base64 package:  Base64.pm, Quotedprint.pm
 - MIME::tools package: Body.pm, Decoder.pm, Entity.pm, Head.pm, Parser.pm, ParserBase.pm, ToolUtils.pm, Tools.pm, Words.pm
 - Mail::Cclient package: Cclient.pm - perl interface to c-client libraries.
 - Mail::Folder package: Folder.pm - provides access to multiple mailbox types
 - Mail  tools package: Address.pm, Alias.pm, Cap.pm, Field.pm, Filter.pm, Header.pm, Internet.pm, Mailer.pm, Send.pm, Util.pm
 - Libnet package: POP3.pm, SMTP.pm, etc.
 - POP3::Client package:  POP3Client.pm

some useful perl email programs:
 - webmail - http://opensource.jaos.org/ - Perl webmail is a CGI script that interfaces with a POP mail server that you provide. It can check mail, read messages, reply, forward, and delete, and it doesn't have to be a local mail server. This script talks strictly POP3 and SMTP for sending mail.
 - mailagent - www.perl.com/CPAN-local/authors/Raphael_Manfredi/ - mail filter and processor - see description earlier on this page.
 - MailMan -- www.endymion.com/portfolio/software/scripts/mailman.htm - MailMan is a simple 1-file CGI script written in Perl5 (comes with some images and html templates). Just unzip it somewhere under your public_html - and you can start using it. MailMan presents a browser interface similar to hotmail, yahoomail, etc. and allows you to read and send email through standard POP3 and SMTP servers. It uses only libraries which are part of standard Perl5 distribution - so it works right out of the box on both Unix and Windows platforms. MailMan is designed for users who are away from their desks, in conjunction with a 'primary' mail reading program. By default, it does not delete messages from the server. You can download free version for private or non-profit use, but the perl script is sort-of encrypted (names are made meaningless, parts of the script are coded in hex strings - and packed/evaled on the fly). You can also buy ($250 - standard, $400 - pro). Very good script.
 - MailMan -- www.list.org - mailman Mailing list manager - written in Python (and a little bit in C).
 - WWW-Mail - www.vejrum.dk/www-mail/www_mail.htm - www Mail Client/Gateway
 - PerlMx - www.ActiveState.com/PerlMX - Mail filtering

More scripts:
 - http://www.emailman.com/unix/mailinglist.html -
 - http://www.mml.org.ua/ - minimalist -
 - http://totalscripts.com/pages/Perl_Scripts/MLM/ -
 - http://www.quikpix.com/pages/E_Design/Perl_CGI_Scripts/Mass_Mailing/-
 - http://www.devdaily.com/Dir/Perl/CGI/E_Mail/ -
 - http://perl.miningco.com/compute/perl/cs/scriptswebbase/ -
 - http://www.cgifiles.com/scripts/perl/webmail.shtml -
 - http://www.secureroot.com/security/advisories/9761547364.html -
 - http://webcab.de/we/Computers_and_Internet/Computers/Programming_Languages/PERL/Scripts/ -

 
Java Mail API home - top of the page -

javax.mail   package


 
Avoiding Spam home - top of the page -

- Avoid posting your real email on usenet groups, mailing lists, commercial web sites.
- Occasionally post a meaningful message to news.admin.netabuse.email using your real address.

Filter incoming messages:
  - use procmail to filter out spam before it gets to your mailbox.
  - use filter in your UA.

Revenge:
 - mail bomb - send 1000s of long messages to the spammer - not recommended.  Better to analyze the headers, find who the spammer is - or at least who is his provider - and send this ISP a note (or send it to their backbone ISP).

Spammers can use a misconfigured MTA. Normally an MTA does not allow SMTP relaying, that is to send email from outside address to any other address.  They only send emails from outside to one of their "internal" clients. Because if it will allow anybody to connect to it and send messages to any address - this may be used by a spammer.

Here are some links:
 - www.spamcop.net - for all of the spam-spanking goodness you crave.
 - Mail::SpamAssassin - Perl module
 - Mail::Audit - Perl module
 - http://www.spambouncer.org/ - Spam Bouncer which consists of a bunch of procmail scripts
 - http://razor.sf.net/ - Vipul's Razor - a distributing system for identifying spam