I'm beginning to work on mailing-list software we use internally (EDIT: though we send emails externally as well, so we can't enforce policy on mail clients). Is there any way to track whether, when I send an email to a particular user, that email has been opened as opposed to being marked as junk or being deleted without being opened?
The simplest approach that I thought of was to serve a one-pixel custom image that would need to be loaded from our servers, but a number of mail clients block this approach. Is there an alternate approach that gets better data?
Mail clients block pretty much all of these kinds of attempts. The best idea is to give them an image that they would want to see if they read the message, and therefore they choose to display images in their mail client.
There is no bulletproof way to check if a user has read your mail. And there shouldn't be IMO.
I have been looking for an answer to this question for a few weeks now and found several options out there. The one I like will send the 'open' data to Google Analytics.
The image below should be inserted into the body of your email. Each person I send an email to has a unique customer number so i can see opens/unique opens but it must not identify a specific customer according to Google's terms.
<img src="http://www.google-analytics.com/collect?v=1
&tid=UA-12345678-1
&cid=12345
&t=event
&ec=email
&ea=open
&el=recipient_id
&cs=newsletter
&cm=email
&cn=Campaign_Name
" />
You can ask for a read receipt (an email feature), but most users consider this a real pain.
Add a transparent gif to the email. When your users will display the image, it will query your server and adds a line to your document. It is aka render rate. This is what email marketers used to call "open rate".
You can use MxM (http://www.m--x--m.net) to deliver your emails. They add that automatically and manage deliverability and antispam for you. We have open sourced that piece of code but it is in Python.
(disclosure, I am the founder of this company)
If this is internal I assume you own the IMAP server (or Exchange or what-else-have-you). It'd be kind of ugly, but that would be the "proper" way to know if the email client has at least displayed the message. You can't really guarantee that it's been read of course :-p
You could potentially send out the mail with "read receipts" requested and then enforce the policy that all mail clients automatically send notices upon opening.
The only way of tracking whether users read (downloaded) your email is by putting the information not in the email but in something like an image or an external html page and only have your email link to said resource (either through external browser or enabling images in email client).
You might be able to meet your needs by redistributing the content. Design the email in such a way that users who care about your email will click a certain link to learn more / continue reading. In other words, I advocating avoiding this problem because there isn't a solid solution.