]> code.delx.au - gnu-emacs/blobdiff - man/smtpmail.texi
Add a provide statement.
[gnu-emacs] / man / smtpmail.texi
index fd0d5b07d3383a91c9ce47d41e1d97a2abc46628..26fd77eafb32c7e1e8d20e86036f7c3f43c5cede 100644 (file)
@@ -3,17 +3,16 @@
 @settitle Emacs SMTP Library
 @syncodeindex vr fn
 @copying
-Copyright @copyright{} 2003 Free Software Foundation, Inc.
+Copyright @copyright{} 2003, 2004 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and
-``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU
-Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
-license is included in the section entitled ``GNU Free Documentation
-License'' in the Emacs manual.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
+and with the Back-Cover Texts as in (a) below.  A copy of the license
+is included in the section entitled ``GNU Free Documentation License''
+in the Emacs manual.
 
 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
 this GNU Manual, like GNU software.  Copies published by the Free
@@ -28,33 +27,110 @@ license to the document, as described in section 6 of the license.
 
 @dircategory Emacs
 @direntry
-* Emacs SMTP Library: (smtpmail). Emacs library for sending mail via SMTP.
+* SMTP: (smtpmail). Emacs library for sending mail via SMTP.
 @end direntry
 
 @titlepage
 @title{Emacs SMTP Library}
 @subtitle{An Emacs package for sending mail via SMTP}
-@author{Simon Josefsson}
+@author{Simon Josefsson, Alex Schroeder}
+@page
+@vskip 0pt plus 1filll
+@insertcopying
 @end titlepage
 
+@contents
+
+@ifnottex
 @node Top
-@chapter Sending mail via SMTP
-@cindex SMTP
+@top Emacs SMTP Library
+
+@insertcopying
+@end ifnottex
+
+@menu
+* How Mail Works::     Brief introduction to mail concepts.
+* Emacs Speaks SMTP::   How to use the SMTP library in Emacs.
+* Authentication::     Authenticating yourself to the server.
+* Queued delivery::    Sending mail without an internet connection.
+* Server workarounds:: Mail servers with special requirements.
+* Debugging::          Tracking down problems.
 
-   On the Internet, mail is sent from host to host using the simple
-mail transfer protocol (SMTP).  When you read and write mail you are
-using a mail program that does not use SMTP --- it just reads mails
-from files.  This is called a mail user agent (MUA).  The mail
-transfer agent (MTA) is the program that accepts mails via SMTP and
-stores them in files.  You also need a mail transfer agent when you
-send mails.  Your mail program has to send its mail to a MTA that can
-pass it on using SMTP.
+Indices
+
+* Index::              Index over variables and functions.
+@end menu
+
+@node How Mail Works
+@chapter How Mail Works
+
+@cindex SMTP
+@cindex MTA
+   On the internet, mail is sent from mail host to mail host using the
+simple mail transfer protocol (SMTP).  To send and receive mail, you
+must get it from and send it to a mail host.  Every mail host runs a
+mail transfer agent (MTA) such as Exim that accepts mails and passes
+them on.  The communication between a mail host and other clients does
+not necessarily involve SMTP, however.  Here is short overview of what
+is involved.
+
+@cindex MUA
+   The mail program --- also called a mail user agent (MUA) ---
+usually sends outgoing mail to a mail host.  When your computer is
+permanently connected to the internet, it might even be a mail host
+itself.  In this case, the MUA will pipe mail to the
+@file{/usr/lib/sendmail} application.  It will take care of your mail
+and pass it on to the next mail host.
+
+@cindex ISP
+   When you are only connected to the internet from time to time, your
+internet service provider (ISP) has probably told you which mail host
+to use.  You must configure your MUA to use that mail host.  Since you
+are reading this manual, you probably want to configure Emacs to use
+SMTP to send mail to that mail host.  More on that in the next
+section.
+
+@cindex MDA
+   Things are different when reading mail.  The mail host responsible
+for your mail keeps it in a file somewhere.  The messages get into the
+file by way of a mail delivery agent (MDA) such as procmail.  These
+delivery agents often allow you to filter and munge your mails before
+you get to see it.  When your computer is that mail host, this file is
+called a spool, and sometimes located in the directory
+@file{/var/spool/mail/}.  All your MUA has to do is read mail from the
+spool, then.
+
+@cindex POP3
+@cindex IMAP
+   When your computer is not always connected to the internet, you
+must get the mail from the remote mail host using a protocol such as
+POP3 or IMAP.  POP3 essentially downloads all your mail from the mail
+host to your computer.  The mail is stored in some file on your
+computer, and again, all your MUA has to do is read mail from the
+spool.
+
+   When you read mail from various machines, downloading mail from the
+mail host to your current machine is not convenient.  In that case,
+you will probably want to use the IMAP protocol.  Your mail is kept on
+the mail host, and you can read it while you are connected via IMAP to
+the mail host.
+
+@cindex Webmail
+   So how does reading mail via the web work, you ask.  In that case,
+the web interface just allows you to remote-control a MUA on the web
+host.  Whether the web host is also a mail host, and how all the
+pieces interact is completely irrelevant.  You usually cannot use
+Emacs to read mail via the web, unless you use software that parses
+the ever-changing HTML of the web interface.
+
+@node Emacs Speaks SMTP
+@chapter Emacs Speaks SMTP
 
    Emacs includes a package for sending your mail to a SMTP server and
 have it take care of delivering it to the final destination, rather
 than letting the MTA on your local system take care of it.  This can
 be useful if you don't have a MTA set up on your host, or if your
-machine is often disconnected from the Internet.
+machine is often disconnected from the internet.
 
   Sending mail via SMTP requires configuring your mail user agent
 (@pxref{Mail Methods,,,emacs}) to use the SMTP library.  How to do
@@ -82,7 +158,7 @@ from.
 @vindex SMTPSERVER
   The variable @code{smtpmail-smtp-server} controls the hostname of
 the server to use.  It is a string with an IP address or hostname.  It
-defaults to the contents of the @code{SMTPSERVER} environment
+defaults to the contents of the @env{SMTPSERVER} environment
 variable, or, if empty, the contents of
 @code{smtpmail-default-smtp-server}.
 
@@ -126,30 +202,42 @@ The following example illustrates what you could put in
 (setq smtpmail-smtp-service 587)
 @end example
 
-@menu
-* Authentication::     Authenticating yourself to the server.
-* Queued delivery::    Sending mail without an Internet connection.
-* Server workarounds:: Mail servers with special requirements.
-* Debugging::          Tracking down problems.
-* Index::              Index over variables and functions.
-@end menu
-
 @node Authentication
-@section Authentication
+@chapter Authentication
 
+@cindex SASL
+@cindex CRAM-MD5
+@cindex LOGIN
+@cindex STARTTLS
 Many environments require SMTP clients to authenticate themselves
 before they are allowed to route mail via a server.  The two following
 variables contains the authentication information needed for this.
 The first variable, @code{smtpmail-auth-credentials}, instructs the
 SMTP library to use a SASL authentication step, currently only the
-CRAM-MD5, PLAIN and LOGIN-MD5 mechanisms are supported and will be
-selected in that order if the server supports them.  The second
-variable, @code{smtpmail-starttls-credentials}, instructs the SMTP
-library to connect to the server using STARTTLS.  This means the
-protocol exchange can be integrity protected and confidential by using
-TLS, and optionally also authentication of the client.  It is common
-to use both these mechanisms, e.g., to use STARTTLS to achieve
-integrity and confidentiality and then use SASL for client
+CRAM-MD5 and LOGIN mechanisms are supported and will be selected in
+that order if the server support both.
+
+The second variable, @code{smtpmail-starttls-credentials}, instructs
+the SMTP library to connect to the server using STARTTLS.  This means
+the protocol exchange may be integrity protected and confidential by
+using TLS, and optionally also authentication of the client.  This
+feature uses the elisp package @file{starttls.el} (see it for more
+information on customization), which in turn require that at least one
+of the following external tools are installed:
+
+@enumerate
+@item
+The GNUTLS command line tool @samp{gnutls-cli}, you can get it from
+@url{http://www.gnu.org/software/gnutls/}.  This is the recommended
+tool, mainly because it can verify the server certificates.
+
+@item
+The @samp{starttls} external program, you can get it from
+@file{starttls-*.tar.gz} from @uref{ftp://ftp.opaopa.org/pub/elisp/}.
+@end enumerate
+
+It is not uncommon to use both these mechanisms, e.g., to use STARTTLS
+to achieve integrity and confidentiality and then use SASL for client
 authentication.
 
 @table @code
@@ -160,11 +248,13 @@ hostname, port, username and password tuples.  When the SMTP library
 connects to a host on a certain port, this variable is searched to
 find a matching entry for that hostname and port.  If an entry is
 found, the authentication process is invoked and the credentials are
-used.  The hostname field follows the same format as
+used.
+
+The hostname field follows the same format as
 @code{smtpmail-smtp-server} (i.e., a string) and the port field the
 same format as @code{smtpmail-smtp-service} (i.e., a string or an
 integer).  The username and password fields, which either can be
-@samp{nil} to indicate that the user is queried for the value
+@code{nil} to indicate that the user is prompted for the value
 interactively, should be strings with the username and password,
 respectively, information that is normally provided by system
 administrators.
@@ -175,65 +265,67 @@ administrators.
 tuples with hostname, port, name of file containing client key, and
 name of file containing client certificate.  The processing is similar
 to the previous variable.  The client key and certificate may be
-@samp{nil} if you do not wish to use client authentication.  The use
-of this variable requires the @samp{starttls} external program to be
-installed, you can get @file{starttls-*.tar.gz} from
-@uref{ftp://ftp.opaopa.org/pub/elisp/}.
+@code{nil} if you do not wish to use client authentication.
 @end table
 
 The following example illustrates what you could put in
 @file{~/.emacs} to enable both SASL authentication and STARTTLS.  The
 server name (@code{smtpmail-smtp-server}) is @var{hostname}, the
 server port (@code{smtpmail-smtp-service}) is @var{port}, and the
-username and password are @var{username} and "@var{password}
+username and password are @var{username} and @var{password}
 respectively.
 
 @example
 ;; Authenticate using this username and password against my server.
 (setq smtpmail-auth-credentials
       '(("@var{hostname}" "@var{port}" "@var{username}" "@var{password}")))
+
+;; Note that if @var{port} is an integer, you must not quote it as a
+;; string.  Normally @var{port} should be the integer 25, and the example
+;; become:
+(setq smtpmail-auth-credentials
+      '(("@var{hostname}" 25 "@var{username}" "@var{password}")))
+
 ;; Use STARTTLS without authentication against the server.
 (setq smtpmail-starttls-credentials
       '(("@var{hostname}" "@var{port}" nil nil)))
 @end example
 
 @node Queued delivery
-@section Queued delivery
+@chapter Queued delivery
 
-If you connect to the Internet via a dialup connection, or for some
-other reason doesn't have permanent Internet connection, sending mail
+@cindex Dialup connection
+If you connect to the internet via a dialup connection, or for some
+other reason don't have permanent internet connection, sending mail
 will fail when you are not connected.  The SMTP library implements
 queued delivery, and the following variable control its behaviour.
 
 @table @code
-
 @item smtpmail-queue-mail
 @vindex smtpmail-queue-mail
   The variable @code{smtpmail-queue-mail} controls whether a simple
 off line mail sender is active.  This variable is a boolean, and
-defaults to @samp{nil} (disabled).  If this is non-nil, mail is not
-sent immediately but rather queued in the directory
+defaults to @code{nil} (disabled).  If this is non-@code{nil}, mail is
+not sent immediately but rather queued in the directory
 @code{smtpmail-queue-dir} and can be later sent manually by invoking
 @code{smtpmail-send-queued-mail} (typically when you connect to the
-Internet).
+internet).
 
-@item smtpmail-queue-mail
+@item smtpmail-queue-dir
 @vindex smtpmail-queue-dir
   The variable @code{smtpmail-queue-dir} specifies the name of the
 directory to hold queued messages.  It defaults to
 @file{~/Mail/queued-mail/}.
+@end table
 
 @findex smtpmail-send-queued-mail
   The function @code{smtpmail-send-queued-mail} can be used to send
 any queued mail when @code{smtpmail-queue-mail} is enabled.  It is
-typically invoked interactively with @kbd{M-x RET
-smtpmail-send-queued-mail RET} when you are connected to the Internet.
-
-@end table
-
+typically invoked interactively with @kbd{M-x
+smtpmail-send-queued-mail RET} when you are connected to the internet.
 
 @node Server workarounds
-@section Server workarounds
+@chapter Server workarounds
 
 Some SMTP servers have special requirements.  The following variables
 implement support for common requirements.
@@ -272,7 +364,7 @@ an error such as:
 
 
 @node Debugging
-@section Debugging
+@chapter Debugging
 
 Sometimes delivery fails, often with the generic error message
 @samp{Sending failed; SMTP protocol error}.  Enabling one or both of
@@ -302,8 +394,19 @@ cannot accept mail.
 @end table
 
 @node Index
+@chapter Index
+
+@section Concept Index
+
+@printindex cp
+
 @section Function and Variable Index
+
 @printindex fn
 
 @contents
 @bye
+
+@ignore
+   arch-tag: 6316abdf-b366-4562-87a2-f37e8f894b6f
+@end ignore