Here is the scenario. I am using PHP and I want to check whether an email address is valid and deliverable. Here are the steps I take:
Validate email address via regex
Validate email address via php filter_var
Finally use SMTP to check whether the recipient exists
This thing works perfectly except that using an SMTP way is too slow and takes anywhere between 10 seconds to 40 seconds to validate. Sometimes the SMTP check is blocked by the recipient server and my server ip was blacklisted which made all the emails to that server as invalid.
There are professional services out there which do this for you but I don't want to use them for this particular project I am doing. Due to restrictions I cannot actually send an email to that email address.
Is there anyother way or faster way to validate the email addresses? How do these professional email validating companies do the validations so fast and cheaply?
I apologise if the question is not right for this forum. Please tell me and I will promptly delete this. I am new to stackoverflow.
P.S: I checked the other questions but they all pointed to using SMTP as the solution which I am already doing.
Related
I'm setting up my Laravel website, and now comes the part where I configure Mailgun to send and receive emails.
I followed different guides to do that, yet I don't feel I'm doing it right. I'm now stuck with this error:
Failed: postmaster#syrianafood.dk → ibrahim_hasan_eng#hotmail.com 'New Order from Ibrahim Hasan' Not delivering to previously bounced address
i.e. Mailgun is not able to deliver my emails. Could you please guide me through this? Thank you!
If mail was sent and rejected by the provider (bad content, headers, etc), Mailgun will automatically blacklist that address from being sent to in the future.
This is to prevent blacklisting yourself from many of the different MX providers out there.
If you think you've solved that problem, you can perform a DELETE request through the Mailgun API in the format of DELETE /<domain>/bounces/<address> before sending the mail, and then you'll be able to send to that address again.
You can check if a bounce has happened previously by performing a POST request to POST /<domain>/bounces. Furthermore, you will receive a JSON object back with a REASON as to why the bounce occurred, giving you the ability to respond in kind to this.
If a domain is not working correctly and it's not in the blacklist, then it's possible that the MX Provider its self is not accepting the emails and is responding unfavorably in a way that Mailgun cannot handle.
You can also delete the mail directly from the Mailgun UI if you have the login credentials. Please see the comment below and give it an upvote.
I did a lot of research through internet but I didn't found the solution. I'm trying to send a confirmation email using Mail::send() in laravel 5.1, I don't want to use any third party like mailgun or mandrill because they are not free sometimes limited of usage. The problem with this is all of the confirmation of the users is in their spam folder in gmail, and trash folder in outlook. Sometimes they didn't receive the confirmation. Why is that? Do you have any idea with this? My website is also registered to https so I don't think this is the problem.
.env
MAIL_DRIVER=smtp
MAIL_HOST=mail.mywebsite.com
MAIL_PORT=587
MAIL_USERNAME=email#mywebsite.com
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls
Landing of an email into Spam is nothing to do with Laravel.
Either you have to change the TXT record of your domain.
You can check it on mail-tester which values need to be changed.
https://www.mail-tester.com/
You might wanna try testing at Mail Tester. This can reveal a lot of information on why your emails are ending up in spam. I also recommend checking SPF and DKIM checking at SPF & DKIM checking at the same site.
Also are you hosting your emails with your hosting provider or some other third-parties like GSuite or Microsoft Exchange? These providers can influence the mail quality and spam checking greatly.
The spam classification of emails is to the discretion of the receiving mail server. There are a couple of best pratices to follow, when trying to avoid being marked as spam:
Make sure the sending server (smtp server) is allowed through
SPF
DKIM
DMARC
MX records
Further, the recipient server may check for bulk content with decentralized solutions like razor, pyzor or DCC. So, try to personalize the messages and not send bulk content. Its hard to evaluate your situation without specifics. Another problem may be the sending webserver if its in or from a country with "bad reputation" (like Russia, China). Since mail server also check the Original-IP of the email and potentially flag them as well.
SPF:
https://mxtoolbox.com/SPFRecordGenerator.aspx
DKIM:
https://dkimcore.org/tools/keys.html
DMARC:
https://mxtoolbox.com/DMARCRecordGenerator.aspx
To check your settings, it helps to use mail testing solutions visualizing those mentioned factors as mentioned by other answers.
Current email deliverability professional here. If you are willing to share the domain you are sending from, and the IP address initiating the sends I'm happy to check for any obvious problems.
I also heartily recommend mail-tester.com as I use it almost daily. If you want to share the link to the report I'm happy to help interpret.
The other thing to be aware of is, that IP addresses have a sender reputation that is tracked in the Email ecosystem at large. If it's a new sending IP address it has to get warmed up. Just like you cannot get a credit card with no limit as soon as you turn 21, Inbox Providers like Gmail and Hotmail are not just going to deliver everything a new sending IP starts trying to deliver to their recipients. They will essentially do some A/B testing by delivering some to the Inbox and some to the Spam/Promotions folder, and see how their recipients interact with your mailings. Gmail and thus other inbox providers are primarily concerned with how recipients interact with your mailings. Do they open, do they click links, do they add you to safe senders, etc.
-LB
From what I've been reading the SPF can be used to validate email addresses by sending commands (rather than an actual email) such as HELO. I've managed to pick up a basic grasp of the policy but I can't get my head around how I'd go about solving the following problem:
I've got a number of email addresses attached to contacts in a CRM system and I'd like to find out if the email addresses are valid and still in use.
Currently we're using a REST Web Service (http://emailinspector.co.uk/) which returns "Ok" (if its ok... duh), "Bad" (if its not valid or not in use) or "Unknown". For Unknown, you are also provided some notes on why it came back with that, i.e. you are told if the Mailbox is full or if its a well known DEA.
I'd like to be able to program a script that can replicate this functionality and from what I've worked out it should use the Sender Policy Framework to do this? The problem is I don't know how I'd go about returning such precise information for "Unknown" email addresses.
Ideas and thoughts?
Actually SPF is just a text record, with some "hints" to let you know if an IP address or mail server is "allowed/Authorized" to send email for that domain. It doesn't tell you anything about an individual email address in that domain..
for example
[doon#qix:~] host -t txt labratsoftware.com
labratsoftware.com descriptive text "v=spf1 a -all"
The SPF record for one of my domains says that only the a record for the domain is authorized to send email for labratsoftware.com, and that if it doesn't come from that IP then it should be rejected (-all).
So the best you can do with SPF is tell that a received email came from an authorized host, and then use that information to help decide if you want to reject it or not.
The best way To test the validity of an email address you have, is to email it, and see if it bounces. You can use options like VERP (http://en.wikipedia.org/wiki/Variable_envelope_return_path) to automate the bounce handling. You can also try and connect to the MX records listed for the domain and try to deliver a message that way. Some Mail servers support verify (But most admins disable this to prevent information leakage). You can use RCPT TO to see if the server accepts it, but even if it does , you have no way of knowing if it will actually make it to their INBOX. My guess is that is what the API you are currently using is doing. And unknown are just ones that either don't answer, greylist, etc.
Here's something I couldn't find an answer to. Say you have a form and on that form you have a field for someone to enter their e-mail address. Now after the e-mail address is entered, is there a way after using RegEx to verify that it follows the syntax of an e-mail address, to then verify that it is a valid e-mail that can receive messages?
I looked all over the net and found a deprecated way to do it that has since been stopped by patches, so I was wondering if there wasn't a way to do it on the server maybe polling the smtp server or something.
If you're looking to verify that the user hasn't made a mistake (or is giving you a bogus address because they aren't interested in your messages), you should probably do what every other system does: don't activate the account (or whatever) until you get some verification that the user has gotten the email by clicking a link or entering a code that the email contains.
You need to do this because you might never get an indication that an email address is invalid - some servers are configured to throw away some (or all) invalid email addresses or dump them in a spam bin. Just because the email appears to have been successfully sent doesn't mean it's valid or that it's getting to the right person.
help out a noob with a simple web development question??
I want to create a Contact-Me form on my website, but I'd like it to not go through the email client that's installed on the user's machine, in case they're at a public terminal. I don't mind if the email comes from "me" to "me", as long as nobody can use it to spam me! Is there a way to get it to safely use the SMTP server it uses when I myself send an email? (This is a Yahoo-hosted website, and I have a Yahoo email account associated with it.)
Sure. You want a simple contact form that posts to some .php/.asp/.whatever script. That script should be able to use the SMTP server from your host (Yahoo!). You may end up sending from a different email than your personal #yahoo.com one, but just look up the info for your host.
I Googled "yahoo hosting send email" and the first result looks very relevant: http://help.yahoo.com/l/us/yahoo/smallbusiness/webhosting/php/php-17.html
As for wanting to stop spam from coming in through the form, just implement a captcha. I'd recommend using reCAPTCHA - it's free and has sample code that you can basically just plug in.