⇡Frequently Asked Questions
⇡Why are all the dates displayed in a funny order?
Because SQmaiL is intended for an international audience, and YYYY-MM-DD is the only unambiguous date format. UK format (DD-MM-YYYY) is too easily confused with US (MM-DD-YYYY), and vice versa; and besides, US date format is a crime against nature and utterly abhorrent. YYYY-MM-DD also happens to be ISO standard, so there.
⇡You keep telling me to back up my database. How?
There will soon be a nice interface for doing this, but for the time being, do:
mysqldump --opt -p sqmail | gzip -c > sqmailbackup.sql.gz
...replacing sqmail with whatever your mail database is called, of course. This will generate a compressed SQL script that will recreate the database. You can restore a backup with:
zcat sqmailbackup.sql.gz | mysql -p sqmail
You can use this to copy databases, too.
⇡I'm upgrading from an old version and nothing seems to work any more.
Sigh. You didn't read the instructions, did you?
As SQmaiL evolves, particularly in these early stages, the database format will periodically change. (For example, the way vfolders are stored changed dramatically from 0.1 to 0.2 when I realised that the old way was deeply brain-damaged.) So, I've included a tool that will upgrade your database if it is necessary. To do this, just type:
SQmaiL will look at the database, determine what parts need upgrading, and do it. (Yes, I could do this automatically. No, I haven't got the nerve to do it every time.) The upgrade procedure should be completely safe in that it will correctly do nothing if nothing needs to be done, but, well, hey, it's alpha.
⇡I select some text and it crashes!
It's a bug in pygtk.
As far as I can tell, this bugs bites when you (a) select some text in a message; (b) change messages without deselecting the text; (c) select some more text. If you deselect the text before changing messages, it doesn't appear to be a problem. Sorry --- nothing I can do. Complain to the pygtk authors.
⇡I select a message and it won't MIME decode it and stuff comes out on the console.
The message is not correctly MIME-encoded.
I'm using the Python mimetools/multifile libraries to decode the messages. They're a bit pedantic. They're also a bit buggy --- see the next question. I'm afraid there's nothing I can do at this point. I'm trying to track down the authors, but don't hold your breath. You can use the raw message display to read the message, but you won't be able to extract attachments from it. Sorry.
⇡I select a message and it locks up.
It's a bug in the mimetools/multifile libraries. When I ask for the next part of a message, on some (rare) messages mimetools gives me the same part I already have. This seems to happen particularly with bounce messages. I've put in some code to try and protect against this, but it doesn't always work. The only thing to do is to kill the process (^Z in the console is the only way of interrupting it) and restart. Don't click on the message again. Sorry.
⇡It won't let me send messages without a domain!
Yes. It's a feature.
Some mail servers, mine for example, will reject addresses without a domain. Also, unqualified addresses can be easily confused with mail aliases. So SQmaiL detects these and warns you. (It won't warn you if you've entered an alias. It'll just expand it and send the message.)
If you really want your old behaviour, go into the Preferences/Transport dialogue and enter your domain into the Default Domain box. Now if you enter and unqualified address, SQmaiL will silently add on the domain you've just entered and send the message.
⇡How do I use the aliases window?
The aliases window lets you edit your current set of mail aliases. A mail alias is a single word like an email address that SQmaiL will expand it into a set of real addresses. This is useful if you want to send mail to the same set of people a lot, without setting up a mailing list.
The user interface is currently a bit strange. I'm working on it.
To create a new entry, press the New button. You can then click on the new (blank) entry, and enter text in the box. If you press New when nothing is selected, a new alias is created; if an alias or email address is selected, a new email address will be added to that alias.
Did that make sense? Um. Suggestions, please.
⇡How do I do SQL queries?
You need to type a boolean expression into the box in the bottom-left corner.
If your message matches the criterion you supply, and the criterion for that
folder's parents, then it will be displayed in that vfolder. Note that messages
can appear in multiple vfolders. You will probably want to use the SQL
like operator, which does a glob match:
subjectfield like "%[listname]%"...will extract messages sent by a number of major mailing list software packages. (The % is a wildcard character.) Check out the MySQL documentation for more information.
The following SQL fields are available:
fromfield--- the sender's email address.
realfromfield--- the sender's real name.
tofield--- the To: field, in encoded form.
ccfield--- the Cc: field, in encoded form.
subjectfield--- the message's subject.
date--- the arrival date of the message (in SQL datetime format).
annotation--- the message's annotation.
id--- the SQmaiL internal message ID.
readstatus--- one of:
Encoded form fields are stored as Python pickles. You can ignore this for
all intents and purposes;
like will work as expected for both real
names and email addresses.
Currently it's not possible to search for arbitrary headers or body text. Support for this is planned. (Currently, the headers and the bodies are stored in different tables. This turns out to be unnecessary, and I'll collapse the two together at some point.)
⇡What's the deal with empty SQL queries?
If you leave the query space blank, that folder is treated specially. The
folder will display all the messages that aren't being shown in any of
the other vfolders on the same tier. For example, if you have under
Received Messages the folders
unfiled, where the query for
unfiled is blank,
then only messages that are not shown in
will appear in it.
Note that messages in subfolders aren't taken into account with this.
Internally it works by taking the queries for all the other folders and
combining them into
(not QUERY1) and (not QUERY2) and (not
QUERY3)... As a result, some rather odd things can happen. If one of
your folders has a query of
1 (display all messages), then that
will suppress any messages appearing in the unfiled folder (because not 1 is
⇡How can I add custom headers to outgoing messages?
Type the full header into the Extras box in the Compose window. For example, to Cc your message to me, type:
Cc: email@example.comAnything in the Extras box will be added verbatim to the message header. There is no syntax checking. Be careful.
⇡How do I do signatures?
You need one or more files in your home directory with a name starting with
.signature. When you press the 'Sign' button in the Compose
window, a menu will pop up giving you the choice of which signature you
want to use. The contents of the file will be appended to the end of your
However, if the signature file is executable, the file will be run instead, and the output appended. This allows you to have dynamic signatures (I do this).