PHP Newsletter System - php

I need to create a PHP Newsletter System which detects when an e-mail is read, forwarded, printed and deleted. The response is then caught and inserted in a database.
How should I approach this?
Thanks!

The only feedback you can get are from pictures loaded by the email client (often called beacon), which can only tell you that this particular client loaded that picture. Some person won't load the images although they read the e-mail, and you cannot do anything about forwarding, printing or deletion afaik.
In email
Web bugs are frequently used in spamming (sending unsolicited commercial email) as a way of "pinging" to find which spam recipients open (and presumably read) before deleting it.
Tracking in email can be disabled by:
Many web bugs can be avoided by turning off HTML display and displaying only the text.
Turning off the display of images while still using HTML may still allow other techniques to be used.
https://en.wikipedia.org/wiki/Web_bug#In_email

Related

Email marketing statistics implementation

I will soon be tasked with making an email campaign manager, and part of it will be a statistics screen that will show how many emails were delivered successfully, how many were not, and how many people actually opened the email.
The main thing I can't get my head around is how to code the part that deals with people opening the email.
I know you could probably do it with a 1x1 white pixel, and then perhaps somehow have the server detect that it was loaded based on the image file name and trigger a script from that. But not all email clients have images enabled and in some cases they are disabled completely etc. I also think this method is quite dated?
I would like to know how the big players do this like Cheetah Mail etc.
What is the best way to do this using PHP/MySQL?
Thanks for your reply.
These are opted in subscribers and there will be afew links in the body of the email that will go to certain places on our websites. Tracking of those is easy because the link will have a string appended to it which will make it easy to detect if they visit the site from an email.
If whitepixel is the way to go at the moment, how do I go about linking the loading of that pixel to a script that is triggered on my server?
Firstly, I'd suggest using an off-the-shelf solution for this, rather than building your own - it's a complicated field, and others have already solved the problems.
As for the specific question, you can create an image tag in each mail along the following lines:
<img src="http://myserver.com/images/transparent.php?emailID=$IDofCurrentCampaign&uid=$emailAddressOfRecipient">
When this image is requested, the query string means it won't be cached, and your php script can store the campaign and email address in a database; you then need to respond with an image mime type, and send back a transparent gif.
Well most people do not like being tracked like that and thus will not load your pixel automatically.
Still, the white pixel "beacon" is the best method at the moment.
You could of course ask your viewers to click a link, but that will also require action from the receiver and will not give you the real number of people that opened the email.

Trying to collect email analytics

I've written an email application in PHP that handles very large mailing lists. Is there a way to find out what emails are opened and by who? Any solution will do as long as it can tell me if the user has actually received and opened the email. I do not want to use email receipts either as it may put off recipients.
If it's relevant, I'm using the codeIgniter framework.
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.
You can put a tiny invisible img in each email, each image named differently to corespond with a specific email. Then you parse your access logs and see which images have been requested and you know which emails have been opened.
It's not fool proof but i've seen some companies use this method.
There's read receipts, but those are only supported by specific clients (ie, Outlook), and even then they are given the option to not notify you of their reading it.
The only other option is to communicate with your server when they read the email. To do this, you can implement a tracking pixel, which is a 1x1 transparent gif. You can intercept the response on your server and log the time, date, ip address, etc.
This still isn't foolproof though, because some clients such as gmail don't show images by default.
You can read more here: http://en.wikipedia.org/wiki/E-mail_tracking

How can I force email programs to show images send in html email using php?

I am sending an html email with php and it includes an image. Some email programs, such as gMail have a 'display images' button. The user has to click on that in order for the images in the email to show up.
Is there any way I can force email programs to show images that are sent within html emails generated by php?
As a rule of thumb, email clients are configured to display attached images by default (e.g. those with a cid: URI scheme) and not load remote images (which can include tracking information).
If you attach all the images, then you'll usually get them showing up (while inflating your SMTP bandwidth use along with that of your recipients (which can make you unpopular)).
I'm afraid not. The main reason email programs block images is because images are often used to 'report back' to whoever sent the email that the email has been opened. This is a common tactic used by spammers. Also, malicious code is often attached to images and downloading these images is how such code gets executed. Another reason email programs block images.
No, you can't force programs you didn't write yourself to do anything.
Email is hugely variable, and in general you're going to see different results in different places. That being said: There's no general way to force an email client to display images; this is why most email now includes a link at the top indicating that if it doesn't display correctly the user should click on it (which then takes the user to a standard HTML page outside the email client's image/javascript/everything-else-blocking grasp).
You specifically mention gmail so it's worth pointing out that if you embed (CID URI) the images they won't show inline, they'll show as attachments at the bottom of the message.
Doubt it, it would be a security issue if the 'src' of an image opened up a cross site scripting attack.
Cross site request forgery
Customers of a bank in Mexico were attacked in early 2008 with an
image tag in email and were sent
through their home routers to the
wrong website.
You can, but unfortunatley Trident, which is the IE rendering engine doesn't support it (surprise, surprise), but it is technically possible to include images in the html itself - see http://en.wikipedia.org/wiki/Data_URI_scheme
The last place I worked, we were sending out emails that had images in them that would come up automatically, in outlook at least, without me having to explicitly click a show images button.
When I inquired, another developer explained that they simply copied the encoded block of the image from an already sent email into the body of the email. I think this may be a weird sort of workaround they stumbled upon. I don't know if this adds more weight than an attachment, but I could see how an email reader would see an attachment and then ask the user as opposed to read it already in the body and just show it...

verify email opened

once we send email from php using mail() function, is there any way to check either mail is open or not?
may be any type of database insertion code in email..?
or calling any function from website?
any possibility.........
i search on internet all the day but did't found any ans.
Thanks
Small images - called Web Bugs - are the only direct way as Szere Dyeri points out, but they are increasingly frowned upon and blocked by every major mail client for privacy reasons now. I would not consider them a reliable way to tell whether an E-Mail has been read any more.
There is a legitimate way to request a read receipt by adding the following header to the E-Mail:
Disposition-Notification-To: your#address.com
Sending of this notification can be turned off by the recipient of course.
Add an invisible small sized image to the email content. And, let the image point to a unique url on your website. You will know that email is opened once that url is accessed. But this will not work in email clients that does not show images in the emails by default.
I found this web service called Get Notify. They claim they do this for free but you need to verify for yourself.
The only way to do this would be to include an image in the email that resided on your server which includes a key to match to the user you are sending the email to. For example, I send an email to Joe#mail.com. In my database (or other storage system) I have Joe#mail.com matched to key 0100. In his email I include an image, like
<img src="http://www.myserver.com/image/?key=0100" />
On your server, /image/ needs to return an image, even a 1 pixel .png. Now you have the key that the user was assigned and can act accordingly.
Many people responded that adding a "tracking image" is a "frowned upon" method and 'considered "questionable" activity'.
Out of curiosity lets say we didn't include a separate tracking image but rather we included this method in an existing image like for instance added it onto your companies logo image like:
http://mycompany.com/images/logo.png?track=2742'>
At least with this method your tracking image won't get blocked by any scanning applications.
One legitimate way to do this is to only send textual information in the email asking the user to follow a link which you can then track. Something along the lines of:
//lots of good info to identify yourself/company
Thank you for your request...
Please follow this link: http://somewhere/ for tracking information
Unfortunately this leaves it in the users hands to acknowledge your request. This is considered to be the most respectful way to do it.
If your application is not public facing (i.e. an internal app for your company), then the img src method already posted is a good technique.

How to Check if a mail was received with php

i'm new in php. I want to send an email to someone and afterwards i need to check if this mail could be received. How do i do that? Hope you guys understand my problem ;).
Thanks in advance. Marc
That's a really sticky question. The only real way is to have PHP monitor an inbox to check for "undeliverable message" notices you might get back. If you're really wanting to go forward with it, look into POP3 connectors for PHP. Like this: http://pecl.php.net/package/POP3
if (strpos(strtolower($subject), 'undeliverable') !== false){
//do whatever you want with the address that couldn't be reached
}
You technically wouldn't need a compiled PHP extension for POP3 (especially if you're new to PHP)... you could connect and read messages by opening a socket and speaking mail server:
http://www.adamsinfo.com/a-rudimentary-php-pop3-example/
Edit (years later):
Definitely check out http://mailgun.net/, http://sendgrid.com/, and http://postmarkapp.com/.
If you're sending HTML mails, you could use a little trick:
generate a unique id for the mail you are sending (based on content and recipient)
include an image that is loaded from your webserver
<img src="http://yourdomain.com/tracker.php?id=1234567" />
in tracker.php, log the id that called the script and send a 1px by 1px image
This won't work though, if the mail client does not download images from the internet when showing an email, as Thunderbird does, for example (IIRC Outlook does so too)
There is no definite solution for this. Web bugs are a o.k. idea but they're dying out, as they are very problematic security wise and are blocked by default in every current E-mail client I know of. I would suggest a combination of checking a bounce inbox like brianreavis suggested, and in addition, requesting a delivery receipt using the following header line:
Disposition-Notification-To:<xxx.xxx#example.com>
That way, you can get most negatives (bounced mails) as well as many positives (receipts). Sending the receipt can be blocked by the sender, but together with parsing error notifications, you should have fairly reliable system.
One option is a Web Bug but these are far from 100% reliable, and are arguably not a nice way to behave. It won't differentiate between emails which are unread and those which are undelivered, for example because of a bad email address, and it is possible to read an email containing a Web Bug without triggering it.
In short you create an HTML email containing an element which has a URL on your site which is unique to that email. So if a client accesses that URL you can be sure that someone has read your email. Wikipedia gives this example:
For example, an e-mail sent to the address somebody#example.org can contain the embedded image of URL http://example.com/bug.gif?somebody#example.org. Whenever the user reads the e-mail, the image at this URL is requested. The part of the URL after the question mark is ignored by the server for the purpose of determining which file to send, but the complete URL is stored in the server's log file. As a result, the file bug.gif is sent and shown in the e-mail reader; at the same time, the server stores the fact that the particular e-mail sent to somebody#example.org has been read.
However, it is possible - probably quite likely - that someone can read your email without connecting to that URL. This may because:
A lot of email readers block such links by default because of privacy concerns precisely because of Web Bugs like this.
They read the email in text only, either because their email client is configured to do so or because it can't display HTML email, for example, a lot of mobile phone clients.
This is a often used option - both by spammers and more responsible marketers - but I probably wouldn't recommend it unless you fully understand its limitations and implications in terms of what people might think of you if you do use it.
There is a perfect solution, in terms of knowing the eMail has been read.
The bad part is that the body of the eMail must be stored on web server.
The trick:
-Send an eMail just just a small text and a URL, so the user must go to that URL to read de content of the eMail.
In other words... on the eMail there is nothing about what you want to send, there is only a link to a unique page you create before sending such eMail.
So to read the content the user must open a web browser and go to such URL.
The trick is to put a little of such text on eMail... something like: bla, bla, bla ... press here to read more.
The concept: Online body, offline URL to access such body.
That way you can be sure of this: if URL has been read, the eMail has been read.
The bad part is that the info you want to send is not on the eMail, must be on a unique webpage.
So you must control no robot can go to such URL... for example with URL like:
https://server/private/?eMail_Body=user
Hope this idea can help someone.

Categories