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 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.
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.
3600is the Time to Live (how long to cache this result in seconds)
INis the Internet Protocol
0Weight (If multiple records try the lowest first)
1Priority (If multiple records with the same Weight pick the highest first)
587The port number of the service
mail.example.comthe host where to find the service.
I have SRV records for the following protocols enabled:
- Mail Submission
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
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
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
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.