logo

GNUGotMail. GPL licensed free software.

GNUGotMail is a simple SMTP/POP3 client for the PalmPilot Professional and later versions. It is not very different from other available mailers except that it shows free memory, and battery voltage during mail retrieval so you can make decisions on whether to cut your session short before all of your memory/battery is exhausted. It also lets you define a 'free memory' point so that it will automatically stop. This can be useful if you have some programs on your PalmPilot which are sensitive to low memory conditions.

Another key feature of GNUGotMail is that the last message number is kept in the POP Preferences so that the next time you check your mail it will continue at that point. This is useful if you are checking your mail while away from your computer and you don't want to delete your mail from the POP.

If you specify a 'max number of lines' it will use the TOP command rather than the RETR command, which can shorten your session time as well as keep your Inbox messages from being too big. Since the TOP command counts "lines" it is not as accurate as a byte-count because lines may be up to 1024 bytes long according to the POP RFC. Still, it is more efficient than other truncation methods because you do not have to receive the entire message as you would with the RETR command.

This is just the bare minimum for a mailer application. I am interested in adding some synchronization, attachments, and filtering capabilities at some point which would work along with a mail processing system such as procmail.

I guess I should start listing the version history now that I am approaching a version 1.0.

  • 0.66 - Bug fix for OS 3.5. Icons were not showing up for applications which used overlays. I also add the form update handler so that the debug rom redraws properly.
  • 0.65 - A bug fix where I forgot to unlock records; showed up in Gremlins. Also I added a soft reset menu option because I switched to EVPlugBase and it doesn't have an option for that like Hackmaster did.
  • 0.64 - International PalmOS versions have different category spellings. We've changed things to only use category numbers to fix this.
  • 0.63 - A minor change. Increased the SMTP email & name sizes to 64 characters from 32. Prefs go byebye on this as well, so don't forget to copy them down somewhere.
  • 0.62 - There is now a fake POP option in the SMTP prefs. This is for SMTP servers that have a security requirement that users check mail just prior to sending. Umm also this version will clear your prefs because I added a byte to the structure. Sorry. Sooner or later I will write some prefs migration code.
  • 0.61 - Added some menu options. An option to set the starting message number to the end of the mailbox. More newline to: cc: magic.
  • 0.60 - Newlines in to: cc: ignored. Error messages fixup. Multi-line 220 greeting response allowed.
  • 0.58 - Cached the launch icons for speed.
  • 0.57 - Little /* TRUNCATED */ fixup to message truncation.
  • 0.56 - Got sick of going into POP Prefs and resetting the starting msg number. Now I have an option that tries to determine if the mailbox has been reset. It does a UIDL of the first message and compares it from the last time you checked mail. If it doesn't match, then it assumes the mailbox has been cleared and starts again at msg 1. Also I had a bug in the field whitespace code.
  • 0.55 - Trying to make use of all the extra screen space. So I put six application icons on the screen. They draw a bit slow, so I'll probably have to cache the icons each time the user changes the prefs.
  • 0.54 - Got rid of some whitespace in the fields.
  • 0.53 - Apparently there is a bug in qpopper that makes the message byte count +1 if you have a really long line. Non-fatal but annoying, so I put a work-around in there for it.
  • 0.52 - Confirm reading/delivery (outgoing) options work now. The priority works incoming and outgoing, though really there is just "urgent" priority if you set high.
  • 0.51 - APOP support added. Changes to Makefile to allow more than 32K code.
  • 0.50 - I'm starting at 0.50 because I ran out of .99's and I didn't want to imply that this is releaseable yet. This has a 'msgrec exceeded' bug fix I ran into today.
  • 0.99z - I added a Clear Bits button so that it will just run through and clear the dirty bits and set the last backup date on all of the databases. This saves me some time when I have to reload everything. Blah, I'm an idiot because I didn't think this through. I've disabled it because there is no way to correlate the creation date differences between a new file and the one in the repository. I forgot to recognize the sorting order for inbox and filed records, so I just added that. Unfortunately I ran out of code space so it is hard-coded to sort by date in ascending order.
  • 0.99y - PDB files have a proprietary sortinfo structure. It consists of the 3-byte record unique IDs back to back. This provides pilot-merge.pl with a way to recognize missing records and sort the records properly in the repository.

Besides just being a simplistic mailer, GNUGotMail has these features which are special:

  • Keeps message number in Prefs to allow easy retrieval of new messages.
  • Optionally uses TOP command to keep large emails from slowing your retrieval.
  • A button for completely clearing (delete & purge) your Inbox.
  • Safety 'free memory' setting to prevent mail from using all of memory.
  • Text reformatting to make messages more readable and to make it easier to quote. As of 0.98 this is implemented like this; if a line has at least 60 chars the following line break is considered soft and it is removed.
  • An optional Bcc setting so that you don't have to add it each time to every mail message. This is useful if you want an "off-hand" archive of your outgoing messages.

Future features:

  • Parsing of attachments; a) to discard them, and b) to possibly install prc & pdb files.
  • Creating attachments. For example, on-the-fly creation of data files that contain dirty records.

Well I guess the future is now. I finally got around to updating this page to match the current version of the software. Basically I have been working on the one-way synchronization capabilities. Here's how it works. I have a 'Send Files' option on the main screen, and when you pick that option it will send an email message that contains PRC and PDB file attachments. There aren't many choices over which files to send, as it only has an ALL or just the ones that have dirty/deleted records.

I should warn you that the 'Fast' mode hardly ever sends all of the records in a file. Even though the attachment is a complete and independent data file, it may only have the dirty/deleted records if you picked 'Fast' mode. I chose to create a PDB file with a subset of records because I felt it was a better idea to leverage the many PDB utilities rather than creating a proprietary file format. In the next paragraph I describe the scripts that I use to "merge" two PDB files together.

On the recieving end of these emails w/ attachments you'll have to set something up. I have a couple of Perl scripts that I run from procmail that allow me to maintain a directory of files. One of the scripts, pilot-base64.pl, takes an input mail message and decodes the base64 encoded attachments - then it runs them into pilot-merge.pl which merges them into the repository. A merge consists of adding new records, replacing dirty records, and deleting records that have a delete flag.

I guess the only weird thing that can happen is if you send a file that wasn't designed for a conduit, because that file will never have delete flagged records. So when it gets merged with the repository it is only going to add or replace records and will never be able to delete them because that information is not kept. At this time that isn't bothering me because I know I can fix my files by hand if they have unwanted records ;)

Okay I did finally get sick of this and I have a solution now. Here's the deal; whenever you change the order of records or completely remove a record on the device, you can't really tell this because there won't be any dirty records. So I did something extremely funky :) since I wanted to keep the PDB format, I decided to add a proprietary sortinfo structure. So each time I send a PDB file from the device I will supply this sortinfo structure to let me know if any records have been removed or changed positions. This accomodates both conduit and non-conduit based data files.

The sortinfo structure I add is very simple. It is all of the 3-byte record unique IDs back to back. If pilot-merge.pl recognizes this sortinfo structure it will use it to repack the resulting PDB file by eliminating repository records that don't exist and re-ordering the records in the new order indicated by the sortinfo structure. The repository PDB files will NOT have a sortinfo structure because I don't know how it would affect any install tools.

Now you must realize that the Send Files option is just for *me* and for people who like to live dangerously. While it is unlikely to damage any files on your PalmPilot it can make your desktop synchronization lose records if you don't understand how/when to set the 'Clear dirty bits when done' option. *I* don't use any desktop software but I understand that some people would like to use both the Send Files option and also maintain a desktop. That is when you would turn OFF the clear dirty bits option. That keeps GNUGotMail from updating the information that the desktop synchronization needs to perform a fast hotsync.

So in theory you could use the Send Files option to update your off-site repository and then use your normal desktop hotsync to clear the dirty bits. Well that's the best idea I can come up with so far.. I wish it were simpler.

You may be asking what is the use of the Send Files option. As I said it is really something for *me*, and mostly because I am paranoid that I am going to lose some bits of information when I am away from my desktop computer for a while. The other reason is that I've wanted a way to send updates to my ISP or to submit articles and perhaps maintain a web site all from a PalmPilot. With some clever use of procmail and some PDB file parsing you should be able to do these things.

GNUGotMail screenshot
Uses 53K of memory

Download (v0.66):
gnugotmail.tar.gz (LF)
gnugotmail.zip (CRLF)