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.
|