My problem isn't validating an email address. I want to verify that an email address exists or not.
I have been looking solutions for that all day. But no result is useful to me.
Can any one help me with this? Thanks!
Ge.
This is not so trivial, but there are a number of options:
1) Find out, using DNS lookups, which mail servers are responsible for the domain of the E-Mail address and connect to one of them. Using SMTP try to deliver a message to the target address. Some servers will tell you at that point that the target address does not exist.
2) Send a test mail to the target address and check if you get a bounce/error mail back.
Not trivial, as badcat already said. If you absolutely have to, I would some other entity do the actual work of sending and receiving the email (such as your webserver). The flow would be something like
1) your app instructs your webserver to send a testing email (make sure you secure this - else it will be perfect for spamming)
2) your app instructs the user that a test email has been sent and that he should reply to it, confirming he's a human (or maybe click on a url contained in the email)
3) the users response (click on url or email reply) will be recorded in a small DB which you can query with your app
Related
When sending an email, is there a way to find out:
User has received the email (displayed in user's inbox).
User has read (and at what time) the email.
If it's not possible, what prevents it from finding out? What is the route an email message follows from sender to receiver.
When you send an email, the email is transferred through a series of servers using SMTP (Simple Mail Transfer Protocol). Once the email reaches it's destination it is stored into the recipients directory. To retrieve and read the email, the recipient uses and email client like Outlook to that connects to the server via IMAP/POP3 which tells them how many new emails they have and delivers each message to the client. In order to get this information, the user must provide their credentials.
So, in order to get this information you would need to know the imap/pop3 server(s) for the recipient's domain, as well as the recipient's login credentials (which would give you full access to the recipients email account). Basically, this is not possible.
This article gives a nice simple overview of how email gets sent over the internet.
You can, and you do not need the credentials as mentioned in the selected answer.
Lets imagine you are using apache and php + mysql.
You send person x an email,
In the email you have an embedded image (your logo) which resides on your server.
the url of the logo in the email, points to a file on your server:
example.com/logo.png?userRelatedId which is a php file.
with an htaccess (apache) you can state that logo.png gets executed with php and in fact forwards a real image and correct mimetype but before that identifies userRelatedId, and saves in your database with the time the file was accessed,
Meaning the email was read by person x and the time which the logo was accessed (email was looked at).
I'm working on the C# project whom allows the sender to send mail and:
Verify the receiver has read email or not?
Verify the receiver's email is located in Inbox or Spam...
Verify the receiver's email ip
Verify the receiver clicked the link on sender's email
I do not know how to start to deal with these problems :(
Thanks and appreciate you helps!!!
Short answer:
you can't do 1, 2 and 3 reliably/at all without deploying code/software on the receiver's side.
you can do 4 with link redirection.
On the basis that you don't have access to the recipient's computer, here are the long answer versions of patrix' short answer:
Verify the receiver has read email or not?
Unfortunately email has never been designed to let you know when an email has been received, and very few (and certainly no standard mail clients I know of) will report if an mail has been received correctly*, let alone opened. However, you can track emails sometimes by embedding an HTML image tag, and tracking when that image is downloaded from the server. There are a lot of caveats, such as it only working for HTML emails, and only if images are enabled, but that's one of the only 'reliable' methods for tracking email opens, and the most common method used by Mailing List providers (who need to think about this stuff a lot)
[* There is a feature known as 'read receipts' (technically Message Disposition Notifications or MDN) that many clients implement, but I believe few people ever use, which sends an email in response to reading an email. An email can request a read receipt by setting the appropriate header, but it is optional for the recipient to respond.]
Verify the receiver's email is located in Inbox or Spam...
Next to impossible; in the first instance, the concept of a 'spam' folder does not exist universally across all mail clients, and has never been a part of any email specification [to my knowledge]. In the second instance, as I mentioned, very few (if any) email clients report on the state of an email, let alone the folder it has been put into.
Verify the receiver's email ip
Again, not reliably, but you will make some headway in this if you implement image-based tracking as I mentioned in point #1
Verify the receiver clicked the link on sender's email
This is known as 'Clickthrough Tracking'.
This can be done, fairly 'easily'. Instead of providing a link directly to a location, you link to a tracking URL first. E.g. instead of linking to http://www.example.com, you should link to http://mydomain.com/TRACKINGID, which then redirects to http://www.example.com *. Then, on the server side, you can log when http://mydomain.com/TRACKINGID is visited. You can then put a unique tracking ID into every email for every recipient, e.g.
Recipient A receives a link to http://mydomain.com/TRACKIDA, and Recipient B receives a link to http://mydomain.com/TRACKIDB. both /TRACKIDA and /TRACKIDB redirect to example.com but, assuming you're logging HTTP requests, you can see who visited their link, where they visited from, when they visited the link, and how many times they visited.
This is the way all mailing list providers track clickthroughs, and roughly what you will need to do
[* Note that you will obviously require the relevant software to do this, e.g. with a 'simple' PHP page, or by using Apache mod_rewrite - whatever floats your boat, really]
Given there is a "FAILTO=''" option for cfmail, triggering an email to be sent to that email if the email didn't get delivered...
Is there a way to somehow assign an ID or tracking # to an email, store it in a database with that ID... then update the status of that email if it fails?
I'd like to track bouncebacks... preferably WITHOUT sending the FAILTO to a POP3 or IMAP and then checking it with cfimap...
Is there any alternate way of handling this?
Maybe an event gateway that is triggered upon email failure?
UPDATE: I've decided to take a different approach, utilizing the sendgrid API.
I'm hoping that lends me with a few more tools than CF offers.
The short answer to your question is unfortunately no.
A longer version with a possible solution:
The failTo email address populates the return-path in the email header, this then 'should' be used by mail servers for bounce backs (however see - http://www.bennadel.com/blog/1899-GMail-Seems-To-Ignore-The-Return-Path-Header-Defined-By-The-CFMail-FailTo-Attribute.htm for an example where it doesn't)
So you are going to need to monitor an Imap or pop account to see your mails, however you can set up an event gateway to monitor this, with detailed instructions here - http://www.alagad.com/documentation/imapGateway/ImapWatcher%20Gateway%20Documentation.pdf
What you're left with is needing to identify which mail matches which bounceback, when I've done something similar in the past I used unique id's for the failTo email addresses at a domain I owned. If you set that up and then use your listener cfc to look for the id in the return-path.
So your sending code would work along the lines of:
Generate unique id
Send mail
Add row to database with unique id
Your listener.cfc would then need to inspect the email returned and if it finds the unique id update the row with whatever information that you're after.
Hope that that at least helps even if you'll need to set up some other bits.
You could use a directly watcher on the undelivr folder to log the failed emails, only really a solution if its own server and not a shared server though.
As far as I know once it leave the spool and is off to your SMTP server CF assume it's been sent correctly.
The email will trickle down the chain of SMTP servers/relays and if anything happen the only instruction they have is to bounce it back to the from address or failto address if present. CF isn't listening at this point so it can't respond.
We use an external tool called Glock email processor to handle exceptions. It's not free, but works pretty well. You can find it here: http://www.glocksoft.com/email-processor/
You need to configure it to check the failto address and from there you can take many actions. I got it setup as a three strikes system.
Email address bounce, I increment a counter in my email table, at 3 I deactivate that email from the system.
Nothing you can't do yourself with cfpop though.
i want to check to see if a given email say for example (yourname#your_domain.com) most likely that exact email don't exist is there a way to ping the email address or anything along that along that idea?
You can't reliably verify email addresses without human intervention. That's why the most common method is to send the user a 'confirmation' email.
You can use my gem: "email_verifier" that you can find here: https://github.com/kamilc/email_verifier
It gives you validator which connects with given mail server "asking" smtp server if there is given email address.
You can check if the address format is valid, but there is no effective, email-specific "Ping" or lookup that you can do, other then sending a verification e-mail containing a code or link which the users clicks on or enters on your site to verify their address.
At the moment, we are sending an email address verification email each time someone signs up. This email has been causing a number of problems: people don't get it, they just don't click the link in the email or the email gets block by spam or some other method. We are working on resolving the spam issue, although I don't think it's possible to completely resolve it.
I'm wondering what other methods there might be for verifying and email address. Is there any other way to verify an email address without sending an email? Or is there another method of ensuring people aren't signing up with fake information?
I'm not sure if there are other good methods, but sending an email and having them click a link is definitely the simplest and most accurate.
A main feature to sending that email, is for the person to verify that it's actually them that requested it.
The only way to verify someone owns an email address is to have him use it.
As for verifying users don't enter fake information - not even sending an email can help. With so many disposable/temporary email services out there (like GuerrillaMail) , someone can fill up your form with false info, post a temp email address, log to that address and click the link in your email - manually or programatically.
You have to trust your users to come back for your content, and ignore spammers.
strikeiron.com offers a paid web service to verify if an email exists without sending a message to that email. try it out here is the link: strick
http://www.strikeiron.com/Catalog/ProductDetail.aspx?pv=5.0.0&pn=Email+Verification