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.