I finally got round to setting up a new version of a Virtual Machine I had on my old laptop. It’s purpose is basically to host an email client that accesses a bunch of email addresses I have set up on my domain.
It was all going smoothly until I actually got round to adding the account details to Thunderbird

It sat and span like this for a while then pops up the manual configuration view.

Which is fine as I know the difference between pop3 and imap but it’s the sort of thing that really confuses the most users (I’ve lost count of the number of times I’ve had to talk people through this over the phone).
The problem is I thought I’d already fixed particular probelm. Back last time I set up a bunch of email addresses I remember setting up a bunch of DNS SRV records to point to both the inbound mail server and the IMAP server.
SRV Records
SRV records allow you to say which servers to use for a particular protocol using a given domain. The entries are made up of the protocol followed by the transport type and then the domain e.g.
_submission._tcp.example.com
The mail client would look the SRV record for this hostname to find the mail submission protocol server for the example.com
domain and would get a response that looks like this:
_submission._tcp.example.com. 3600 IN SRV 0 1 587 mail.example.com.
where:
3600
is the Time to Live (how long to cache this result in seconds)IN
is the Internet ProtocolSRV
Record type0
Weight (If multiple records try the lowest first)1
Priority (If multiple records with the same Weight pick the highest first)587
The port number of the servicemail.example.com
the host where to find the service.
I have SRV records for the following protocols enabled:
- Mail Submission
_submission._tcp
- IMAPS
_imaps._tcp
- SIP
_sip._tcp
&_sip._udp
- SIPS
_sips._tcp
Using SRV records for email discovery is covered by RFC6186. SRV records are also used in the VoIP space to point to SIP servers.
So the question is why this doesn’t work. The problem looks to be that Thunderbird hasn’t implemented support for RFC6186 just yet. A bit of digging found this document which covers what the current design for Thunderbird is and which bits are still to be implemented. It looks like the only option that currently works in the XML configuration file
config-v1.1.xml file
The document lists a few locations that a file can be placed relative to the domain that holds details of how to configure the email account. This includes http://example.com/.well-known/autoconfig/mail/config-v1.1.xml
where example.com
is the domain part of the email address.
The schema for config-v1.1.xml
can be found here. A basic minimal entry would look something like this:
<?xml version="1.0"?>
<clientConfig version="1.1">
<emailProvider id="example.com">
<domain>example.com</domain>
<displayName>Example Mail</displayName>
<displayShortName>Example</displayShortName>
<incomingServer type="imap">
<hostname>mail.example.com</hostname>
<port>995</port>
<socketType>SSL</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.example.com</hostname>
<port>587</port>
<socketType>STARTTLS</socketType>
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
<addThisServer>true</addThisServer>
</outgoingServer>
</emailProvider>
<clientConfigUpdate url="https://www.example.com/config/mozilla.xml" />
</clientConfig>
Apart from the obvious parts that say which servers to connect to the other useful bit is found in the <username>
tags. Here I’m using %EMAILADDRESS%
which says to use the whole email address as the username. You can also use %EMAILLOCALPART%
which is everything before the @
sign and %EMAILDOMAIN%
which is everything after the @
sign.
The documentation includes options for setting up remote address books and calendar information, though it doesn’t look like Thunderbird supports all of these options just yet.
With this file now in place on my HTTP server Thunderbird now sets everything up properly.