MozillaZine

Session logging for mail/news

From MozillaZine Knowledge Base

This article is about troubleshooting techniques for advanced users who are investigating problems with servers. It applies to all of the server types that Thunderbird connects to:

POP3 For getting mail
IMAP For getting mail
SMTP For sending mail
NNTP For usenet news
HTTP For RSS feeds
LDAP For address books

These methods are only useful for investigating problems that occur after Thunderbird establishes a connection to a server. If Thunderbird cannot connect to the server, then it is pointless trying to log the connection—in these cases, see: Network tools for server connections

To use these methods for investigating secure authentication, you will need additional tools depending on the authentication method.

Contents

Methods for logging

There are three methods for logging server connections:

  • Thunderbird itself
  • A logging proxy
  • A packet sniffer

Using Thunderbird

Thunderbird can create a log file for the server types POP3, IMAP, SMTP, NNTP and HTTP, and MIME and LDAP protocols.

When you use Thunderbird to log a connection:

  • You do not see all the authentication information, so you might not be able to investigate authentication problems in detail.
  • You can log secure (SSL and TLS) connections.

To create the log file, follow the instructions on the Mozilla web page linked below. Use log level 5, and remember to specify POP3:5, IMAP:5, SMTP:5, NNTP:5, nsHttp:5, MIME:5 or LDAP:5, depending on which type of server or protocol you are investigating. (The module nsHttp is not mentioned on the linked page.)

MailNews Logging

Exiting Thunderbird and running it again with session logging doesn't always close any existing connections, they may need a minute or two to time out. It's usually easiest to debug a problem when it makes a new connection. For example, if you enabled IMAP logging and the connection to the AIM mail server was still open you would see something roughly like:

0[34988]: 2310cc0:imap.cs.com:NA:SetupWithUrl: clearing IMAP_CONNECTION_IS_OPEN

If the log file is empty that normally means you either didn't configure the logging correctly (you need to specify POP3:5 , not POP:5 for example) or you couldn't make a TCP-IP connection to the mail server for some reason. You could use netstat to list your connections. Run it from a console window/DOS box.

Note that you can also add a timestamp to the log entries for cases where the timing information is important. A combination like

NSPR_LOG_MODULES=imap:5,timestamp

would add the time of an event to each entry. This option is only available for 1.9.1-branch builds (TB 3.0, SM 2.0) and higher.

The TBTracer add-on is a GUI that makes it easier to view the session logging. You still need to set the NSPR_LOG_MODULES and NSPR_LOG_FILE environmental variables (as described above) before using it. One downside is that toggling the "capture" of a protocol in the GUI actually only effects whats displayed, it has no effect on what data is being logged by Thunderbird. This means you always have the overhead of any protocol that is enabled for logging regardless of whether you care about it, and need to remember to periodically delete the log file.

Other types of problems you can solve

You can also log memory usage using MSGDB:5 to help diagnose memory usage problems. If you build a debug version of Thunderbird there are other logging options such as MAPI, msgcompose, imapoffline etc. that may be useful for debugging.

Using a proxy

A logging proxy is an additional program that logs a specific connection.

When you use a proxy:

  • You can log any server type.
  • You do not see Thunderbird's connection states. This simplifies the log, but it might make some problems more difficult to discover.
  • You see the raw data with no explanatory information.
  • You see all the authentication information. However, investigating secure authentication requires additional tools.
  • You cannot successfully log a secure (SSL) connection, nor a TLS connection after the initial negotiation.

To configure a proxy, either change Thunderbird's server settings, or use Thunderbird's proxy settings to specify localhost (your own computer, where the proxy is running) as the proxy server. By changing settings in Thunderbird, you risk changing the nature of the problem that you are investigating. If possible, check the proxy configuration with a working server before you use it with the server you are investigating.

To change Thunderbird's server settings, point Thunderbird at the server localhost and point the logging proxy at the real server.

To change Thunderbird's proxy settings, choose: Tools – Options... – General – Connection Settings..., choose "Manual proxy configuration", set the HTTP proxy to localhost, and check the box "Use this proxy server for all protocols". Use whatever port you have configured in the proxy—for example, 80. Point the logging proxy at the real server and port.

Some examples of logging proxies that you can download are:

Using a packet sniffer

A packet sniffer is an additional program that logs network traffic. You usually configure the packet sniffer to filter the log, so that you only see the parts that interest you. The resulting log contains information similar to a proxy log, but it might be presented in a much more complex way, depending on the sniffer and on how you configure it.

When you use a packet sniffer:

  • You can log any server type.
  • You do not change any settings in Thunderbird.
  • You see the raw data with no explanatory information.
  • You do not see Thunderbird's connection states. This simplifies the log, but it might make some problems more difficult to discover.
  • You see all the authentication information. However, investigating secure authentication requires additional tools.
  • You cannot successfully log a secure (SSL) connection, nor a TLS connection after the initial negotiation.

Configuring a packet sniffer depends on the sniffer.

Some examples of packet sniffers that you can download are:

Interpreting a connection log

To interpret a connection log, you need to understand something about how the server works and how Thunderbird works.

The server specifications are Internet standards published as RFCs. There are some links to them in the External links section below.

For POP3, SMTP and NNTP, Thunderbird works by computing a connection state that tells it what to expect from the server and what to do next. These connection states are internal to Thunderbird. They might be different in different releases of Thunderbird. To understand the connection states in detail, you might have to read Thunderbird's C++ source code.

POP3 connection states

 0READ_PASSWORD 
 1START_CONNECT 
 2FINISH_CONNECT 
  3WAIT_FOR_RESPONSE 
  4WAIT_FOR_START_OF_CONNECTION_RESPONSE 
  5SEND_USERNAME 
  6SEND_PASSWORD 
  7SEND_STAT 
 8GET_STAT 
 9SEND_LIST 
10GET_LIST 
11SEND_UIDL_LIST 
12GET_UIDL_LIST 
13SEND_XTND_XLST_MSGID 
14GET_XTND_XLST_MSGID 
15GET_MSG 
16SEND_TOP 
17TOP_RESPONSE 
18SEND_RETR 
19RETR_RESPONSE 
20SEND_DELE 
21DELE_RESPONSE 
22SEND_QUIT 
23DONE 
24ERROR_DONE 
25FREE 
26START_USE_TOP_FOR_FAKE_UIDL 
27SEND_FAKE_UIDL_TOP 
28GET_FAKE_UIDL_TOP 
29SEND_AUTH 
30AUTH_RESPONSE 
31SEND_CAPA 
32CAPA_RESPONSE 
33PROCESS_AUTH 
34AUTH_FALLBACK 
35AUTH_LOGIN 
36AUTH_LOGIN_RESPONSE 
37AUTH_NTLM 
38AUTH_NTLM_RESPONSE 
39SEND_XSENDER 
40XSENDER_RESPONSE 
41SEND_GURL 
42GURL_RESPONSE 
43QUIT_RESPONSE 
44INTERRUPTED 
45TLS_RESPONSE 
46AUTH_GSSAPI 
47AUTH_GSSAPI_FIRST 
48AUTH_GSSAPI_STEP 

SMTP connection states

 0RESPONSE
 1START_CONNECT
 2FINISH_CONNECT
 3SEND_HELO_RESPONSE
 4SEND_EHLO_RESPONSE
 5SEND_VRFY_RESPONSE
 6SEND_MAIL_RESPONSE
 7SEND_RCPT_RESPONSE
 8SEND_DATA_RESPONSE
 9SEND_POST_DATA
10SEND_MESSAGE_RESPONSE
11DONE
12ERROR_DONE
13FREE
14AUTH_LOGIN_STEP0_RESPONSE
15EXTN_LOGIN_RESPONSE
16SEND_AUTH_LOGIN_STEP0
17SEND_AUTH_LOGIN_STEP1
18SEND_AUTH_LOGIN_STEP2
19AUTH_LOGIN_RESPONSE
20TLS_RESPONSE
21AUTH_EXTERNAL_RESPONSE
22AUTH_PROCESS_STATE
23AUTH_CRAM_MD5_CHALLENGE_RESPONSE
24SEND_AUTH_GSSAPI_FIRST
25SEND_AUTH_GSSAPI_STEP

NNTP connection states

 0RESPONSE
 1CONNECT
 2CONNECT_WAIT
 3LOGIN_RESPONSE
 4SEND_MODE_READER
 5SEND_MODE_READER_RESPONSE
 6SEND_LIST_EXTENSIONS
 7SEND_LIST_EXTENSIONS_RESPONSE
 8SEND_LIST_SEARCHES
 9SEND_LIST_SEARCHES_RESPONSE
10LIST_SEARCH_HEADERS
11LIST_SEARCH_HEADERS_RESPONSE
12GET_PROPERTIES
13GET_PROPERTIES_RESPONSE
14SEND_LIST_SUBSCRIPTIONS
15SEND_LIST_SUBSCRIPTIONS_RESPONSE
16SEND_FIRST_NNTP_COMMAND
17SEND_FIRST_NNTP_COMMAND_RESPONSE
18SETUP_NEWS_STREAM
29BEGIN_AUTHORIZE
20AUTHORIZE_RESPONSE
21PASSWORD_RESPONSE
22READ_LIST_BEGIN
23READ_LIST
24DISPLAY_NEWSGROUPS
25NEWGROUPS_BEGIN
26NEWGROUPS
27BEGIN_ARTICLE
28READ_ARTICLE
29XOVER_BEGIN
30FIGURE_NEXT_CHUNK
31XOVER_SEND
32XOVER_RESPONSE
33XOVER
34PROCESS_XOVER
35READ_GROUP
36READ_GROUP_RESPONSE
37READ_GROUP_BODY
38SEND_GROUP_FOR_ARTICLE
39SEND_GROUP_FOR_ARTICLE_RESPONSE
40PROFILE_ADD
41PROFILE_ADD_RESPONSE
42PROFILE_DELETE
43PROFILE_DELETE_RESPONSE
44SEND_ARTICLE_NUMBER
45PROCESS_BODIES
46PRINT_ARTICLE_HEADERS
47SEND_POST_DATA
48SEND_POST_DATA_RESPONSE
49CHECK_FOR_MESSAGE
50NEWS_RC_POST
51DISPLAY_NEWS_RC
52DISPLAY_NEWS_RC_RESPONSE
53START_CANCEL
54DO_CANCEL
55XPAT_SEND
56XPAT_RESPONSE
57SEARCH
58SEARCH_RESPONSE
59SEARCH_RESULTS
60LIST_PRETTY_NAMES
61LIST_PRETTY_NAMES_RESPONSE
62LIST_XACTIVE
63LIST_XACTIVE_RESPONSE
64LIST_GROUP
65LIST_GROUP_RESPONSE
66NEWS_DONE
67NEWS_POST_DONE
68NEWS_ERROR
69ERROR
70NEWS_FREE
71NEWS_FINISHED

Examples

Here is a proxy log of a connection to a POP3 server. There are no messages on the server:

+OK Hello there.
AUTH
-ERR Invalid command.
CAPA
+OK Here's what I can do:
SASL LOGIN CRAM-MD5 CRAM-SHA1
TOP
USER
LOGIN-DELAY 10
PIPELINING
UIDL
IMPLEMENTATION Courier Mail Server
.
AUTH LOGIN
+ VXNlcm5hbWU6
anVzdC50ZXN0aW5nQGV4YW1wbGUubmV0DQo=
+ UGFzc3dvcmQ6
Zm9vYmFyMTIzDQo=
+OK logged in.
STAT
+OK 0 0
QUIT
+OK Bye-bye.

The base64 strings that you see are:

VXNlcm5hbWU6Username:
anVzdC50ZXN0aW5nQGV4YW1wbGUubmV0DQo=   just.testing@example.net (the username)
UGFzc3dvcmQ6Password:
Zm9vYmFyMTIzDQo=foobar123 (the password)

Here is a Thunderbird log of the same connection:

0[ef1790]: Entering NET_ProcessPop3 18
0[ef1790]: POP3: Entering state: 1
0[ef1790]: POP3: Entering state: 2
0[ef1790]: POP3: Entering state: 4
0[ef1790]: RECV: +OK Hello there.
0[ef1790]: POP3: Entering state: 29
0[ef1790]: SEND: AUTH

0[ef1790]: Entering NET_ProcessPop3 23
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: -ERR Invalid command.
0[ef1790]: POP3: Entering state: 30
0[ef1790]: POP3: Entering state: 31
0[ef1790]: SEND: CAPA

0[ef1790]: Entering NET_ProcessPop3 142
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: +OK Here's what I can do:
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: SASL LOGIN CRAM-MD5 CRAM-SHA1
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: TOP
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: USER
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: LOGIN-DELAY 10
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: PIPELINING
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: UIDL
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: IMPLEMENTATION Courier Mail Server
0[ef1790]: POP3: Entering state: 32
0[ef1790]: RECV: .
0[ef1790]: POP3: Entering state: 33
0[ef1790]: POP3: Entering state: 35
0[ef1790]: SEND: AUTH LOGIN

0[ef1790]: Entering NET_ProcessPop3 16
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: + VXNlcm5hbWU6
0[ef1790]: POP3: Entering state: 36
0[ef1790]: POP3: Entering state: 5
0[ef1790]: SEND: anVzdC50ZXN0aW5nQGV4YW1wbGUubmV0DQo=

0[ef1790]: Entering NET_ProcessPop3 16
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: + UGFzc3dvcmQ6
0[ef1790]: POP3: Entering state: 34
0[ef1790]: POP3: Entering state: 6
0[ef1790]: Logging suppressed for this command (it probably contained authentication information)
0[ef1790]: Entering NET_ProcessPop3 16
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: +OK logged in.
0[ef1790]: POP3: Entering state: 34
0[ef1790]: POP3: Entering state: 7
0[ef1790]: SEND: STAT

0[ef1790]: Entering NET_ProcessPop3 9
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: +OK 0 0
0[ef1790]: POP3: Entering state: 8
0[ef1790]: POP3: Entering state: 22
0[ef1790]: SEND: QUIT

0[ef1790]: Entering NET_ProcessPop3 14
0[ef1790]: POP3: Entering state: 3
0[ef1790]: RECV: +OK Bye-bye.
0[ef1790]: POP3: Entering state: 43
0[ef1790]: POP3: Entering state: 23
0[ef1790]: POP3: Entering state: 25

Rich logging using Gloda

The global database (gloda) has been enhanced to support additional logging and context information. Logsploder is a XULRunner application that supports using these features. See logsploder, circa a year+ ago for more information. This functionality isn't useful for most users, its intended mainly to support unit testing.

See also

External links

Wikipedia articles (including links to RFCs):

Protocol guides (they focus on the actual commands and which RFC applies to a specific protocol command):

Sometimes its useful to compare session logs for another email client and Thunderbird.

Additional information on how the logging works: