You can accomplish this by including a small tracking image in every email that is sent out.
<img src="http://yourdomain.com/tracking/1x1.gif?cId=12345&uId=56789">
Use mod-rewrite to push everything beyond '/tracking/' into your analytics script, snag the query_string and return a 1x1 gif to the email clients.
From Campaign Monitor:
http://help.campaignmonitor.com/topic.aspx?t=89
When each email is sent out, we
automatically add a piece of code that
requests a tiny, invisible image from
our web servers. So when a reader
opens the email, the image is
downloaded, and we can record that
download as an open for that specific
email.
It is important to understand that the
open rate is not a 100% accurate
measure. Recording an 'open' can only
happen if the reader's email client is
capable of displaying html with
images, and that option is turned on.
So if you are sending text-only
emails, there is no way to record open
rates. Similarly, people reading your
html email without images showing will
not be recorded as opens (unless they
click a link).
Another issue is that your readers may
have a preview pane in their email
client. That preview pane might be
displaying your email automatically
(and therefore downloading the images)
without the reader ever having to
click on it or read it.
So you should never take your open
rate as a hard and fast number,
because you can never know the true
figure. It is much better used as
general guide, and as a way of
measuring the trends on your email
campaigns.