I use a very basic and simple mail() php function to automatically send email to the new users so that they can activate their account, which looks like this:
$body = "Thank you for your registering at ". BASE_URL. ". To activate your account, please click on this link:\n\n";
$body .= BASE_URL . 'activate.php?e=' . urlencode($e) . "&a=$a";
mail($trimmed['email'], 'Registration Confirmation', $body, 'From: admin#hiteachers.com');
In which the $trimmed['email'] is the email the new user uses to enter the website registration form after validation, and the admin#hiteachers.com is my REAL email address, which I use with Google apps (I followed the link https://support.google.com/a/answer/33353?hl=en (#2,3 and 4) to edit the MX records in my domain manager).
Note :
- I bought the domain and a shared linux server at Godaddy.
I also consulted PHP mail() function cannot send to hotmail?, and some other related links, but it didn't help.
I also followed the link https://mail.live.com/mail/troubleshooting.aspx to troubleshoot the SMTP Non-Delivery Report by adding hiteachers.com IN TXT "v=spf1 -all" into the TXT records and waited for 48 hours, but no luck!
I also added the TXT value v=spf1 a mx -all into my domain TXT records as per other stackoverflow users' suggestions, and waited for 48 hours, but no luck!
I also added the from email address to the safe contact list of the recipient addresses at #hotmail.com, and #outlook.com, which i used for testing, but no luck!
No email has been sent to #hotmail or #outlook inbox, even in the junk folder, and no bouce-back email either (because the recipient accounts are real).
It works well with real gmail and yahoo email recipient addresses.
I tried sending email directly from admin#hiteachers.com to the real recipient email address at outlook.com, it stayed there in the inbox (means that it accepts my admin#hiteachers.com address). However, when I viewed the message source, it says This sender failed our fraud detection checks and may not be who they appear to be.
Do you know what was wrong with it, or have you ever been in the same situation as mine? And the important part of my question is what I should do to eliminate the whole issue, please?
UPDATED
After adding the SPF and other required records, which you can take a look at here http://mxtoolbox.com/ for the domain hiteachers.com, I received the report from <email>noreply-dmarc-support#google.com</email> like this, and all my testing auto-email to #yahoo.com and #gmail.com are going to spam folders, but not the inbox before:
<?xml version="1.0" encoding="UTF-8" ?>
<feedback>
<report_metadata>
<org_name>google.com</org_name>
<email>noreply-dmarc-support#google.com</email>
<extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
<report_id>10844434555482221094</report_id>
<date_range>
<begin>1458172800</begin>
<end>1458259199</end>
</date_range>
</report_metadata>
<policy_published>
<domain>hiteachers.com</domain>
<adkim>r</adkim>
<aspf>r</aspf>
<p>quarantine</p>
<sp>quarantine</sp>
<pct>100</pct>
</policy_published>
<record>
<row>
<count>1</count>
<policy_evaluated>
<disposition>quarantine</disposition>
<dkim>fail</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>hiteachers.com</header_from>
</identifiers>
<auth_results>
<spf>
<domain>xxxxxxxxx.xxx.xxx.xxxx.secureserver.net</domain>
<result>none</result>
</spf>
</auth_results>
</record>
</feedback>
Related
TL;DR: Mails sent from shared hosting (such as a cheap domain from Unoeuro or One.com) end up in spam. How to fix?
I made a mail-system, that first generated a PDF-file (using FPDF), whereafter it sent the PDF-file as an attachment with PHP's Swiftmailer. This email was sent out to 130 people (as a 'one-of' invoice). But it landed in the spam-filter for almost everybody. I tried adjusting SwiftMailers header-settings, but without any luck. Even mails that I haven't sent to before (thoroughly tested). This was my initial setup:
function sendMailEt($toEmail, $toName, $invoiceNumber){
require_once('includes/lib/swift_required.php');
$transport = Swift_SmtpTransport::newInstance('mailout.one.com', 25)
->setUsername('EMAIL-ACCOUNT1#THE-DOMAIN.DK')
->setPassword('THE-PASSWORD')
;
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('FROM COMPANY')
->setSubject('Thanks for signing up - COMPANY')
->setFrom(array('EMAIL-ACCOUNT1#THE-DOMAIN.DK' => 'Company name'))
->setTo(array($toEmail => $toName))
->setBody('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)')
->addPart('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)', 'text/html')
->attach(Swift_Attachment::fromPath('/URL-TO-THE-PDF-FILE.pdf'))
;
$result = $mailer->send($message);
}
I also tried sending out the emails with PHP's native mail()-function, and then simply link to the invoice ( http://www.company-domain-name.dk/invoice/base64_encoded-name.pdf )... Same result (spam).
I tried writing the entire header myself. I've read a numerous amount of forums about what headers should include, but they all wrote different things. So I tried a few different things (both emails I had sent to previously and emails I hadn't)... Same result (spam).
Then I tried writing the header exactly as MailChimps does, in their header. That led me to this:
$headers = "Reply-To: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN#DOMAIN-NAME.DK>\r\n";
$headers .= "Return-Path: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN#DOMAIN-NAME.DK>\r\n";
$headers .= "From: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN#DOMAIN-NAME.DK>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Sender: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN#DOMAIN-NAME.DK>\r\n";
$headers .= "Content-type: text/plain; charset=\"utf-8\"; \r\n";
$headers .= "X-Mailer: PHP". phpversion() ."\r\n";
And then I send the mail like this:
mail($toName . '<'.$toEmail.'>', utf8_decode('Faktura på depositumet'), utf8_decode($someMessage), $headers);
... Same result (spam).
The webspace is with One.com, so I can't use PHPmailer (since that has to be installed, and that can't be done on one.com's servers). And I can't define a SPF with One.com.
All I want, is to be able to send emails that doesn't go to spam.
Here are my questions:
Is it because my header is off, or is it something 'deeper down'?
Does the Gmail-spam filter ban single email accounts (such as
this#example.com) or does it ban entire domains (such as
#example.com)?
Can one get a blacklisted email whitelisted
somehow?
* Addition 1 *
Ok... I have now tried a number of things:
I tried adding LoneWolfPR's returnpath, like recommended, and it didn't help.
I contacted One.com (the hosting company), and confirmed with them, that it isn't possible to set a SPF-record or a DKIM-record. It still isn't.
I considered setting up an 'unsubscribe'-link, with a link to a website with a form, but I didn't believe that approach. I mean - invoices are sent all the time, with e-mails. And why should you be able to unsubscribe an invoice?! Since that made so far from sense in my head, then I only tried it for about 20 minutes (obviously, without results).
Here is my current email header (gotten from Gmail, by clicking the 'View original'):
Delivered-To: NEWLY-CREATED-GMAIL-ACCOUNT#gmail.com
Received: by 10.76.75.104 with SMTP id b8csp48728oaw;
Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
X-Received: by 10.152.116.45 with SMTP id jt13mr7897860lab.0.1363480376067;
Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
Return-Path: <XXX111#DOMAIN-NAME.dk>
Received: from mail-out2.b-one.net (mail-out2.one.com. [91.198.169.19])
by mx.google.com with ESMTP id p10si4637427lbb.120.2013.03.16.17.32.55;
Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Received-SPF: neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111#DOMAIN-NAME.dk) client-ip=91.198.169.19;
Authentication-Results: mx.google.com;
spf=neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111#DOMAIN-NAME.dk) smtp.mail=XXX111#DOMAIN-NAME.dk
Date: Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING#mx.google.com>
Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
for <NEWLY-CREATED-GMAIL-ACCOUNT#gmail.com>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)
Received: from 85.218.159.219 by www.DOMAIN-NAME.dk via URL_TO_THE_SCRIPT.php with HTTP; Sun, 17 Mar 2013 00:32:53 +0000
To: RECIEVERS_NAME <NEWLY-CREATED-GMAIL-ACCOUNT#gmail.com>
Subject: EMAIL-SUBJECT
X-PHP-Originating-Script: 87486:NAME-OF-THE-SCRIPT-THE-E-MAIL-WAS-SENT-FROM.php
Reply-To: COMPANY NAME <XXX111#DOMAIN-NAME.dk>
From: Besked fra COMPANY NAME <XXX111#DOMAIN-NAME.dk>
MIME-Version: 1.0
Sender: Besked fra COMPANY NAME <XXX111#DOMAIN-NAME.dk>
Content-type: text/plain; charset="utf-8";
X-Mailer: PHP5.3.21
1) Normally an email address won't go easily into a blacklist, it takes time and/or a lot of people to tag you as spammer to actually get that address into a blacklist.
2) Yes. A whole domain name can be blacklisted, because spammers normally generate random email addresses like f4j3ifl#something.com.
3) It doesn't matter how many times it went to the spambox, basically, the spam filters nowadays are strong, because spammers try to improve their ways to get around day by day, so the filters gets more strict every day. If it goes into spam folder first time, and the user didn't actually put it into the spam box, it will continue going unless users unmark it, or you fix the troubles.
How to avoid spambox?
Basically you need some signatures, and a lot of access to your DNS records, because there is where we are going to do most of the setups.
Reverse DNS Lookup: On dedicated servers or even on some VPS you are able to set up a reverse dns record, sometimes you just open a ticket and the IT's set it up for you. If you can't have it, change your hosting or keep being tagged as spammer xD. This is to preven header forgeries, as you could set on your headers that your email comes from gmail.com but it doesn't this is the way the email servers check it.
SPF is a must have as well, if you can't set a SPF then don't even try any further, consider changing your hosting, and you can almost stop reading by here xD.
DKIM/Domain Key: preferably DKIM, is a encrypted signature, you set the public key on the DNS, and store a private key in your email server, when a server receives an email, it has the private key attached in the headers (you need a mailserver software which manages DKIM, for windows for example it worked for me hmailserver) and the mail service (gmail for example) will check your dns record to see if the public key matches. This is almost a must have as well
Those three were the basics, if you Set up DMARC and ADSP it will get you better score for the SpamAssassins. To get a even better score search for some spam keywords lists on google and try to avoid them, some stuff like starting an email with "Dear xxx" are harmful for your score, Set up the unsuscribe system(even if it's crappy, as long as you provide a clear link) will help you a bit as well.
Also:
Avoid sloppy html and white text over (any) backgrounds, some spammers use it to fit in hidden text, those filters are smarter than you think.
Read the specific recommendations. Most email services have a FAQ or something in their website with some tips to help you sending emails and not going into the junk. on Some of them you can even apply for getting into a white list ( at least some years ago, on some services like gmail they don't do it anymore)
If you are sending in bulk, watch the time! If you have X emails per second sent into somewhere, you are likely to get into blacklist, set up a script or something to get a 1sec delay or so, the delay might depend on the destinatary to get into the blacklist or not.
Hope those tips help you, I had to deal with some spam filters recently and it's a pain in the ass, that's why I know all that info, that's all my research xD Even after all the signatures and things I have set up, some of the emails are still going into spambox(a smaller percentage but it still hurts me) The only reliable way is to get the users adding you to the contacts list (while having the signatures and headers correctly), so remind them to do so if possible.
One thing to bear in mind, I had trouble with emails being blocked by Gmail and Yahoo! mail from php because the Return-Path header didn't match the from. On a lot of servers if you explicitly set the Return-Path in the headers PHP Mail will ignore that and set the return path to the machine name. You have to force it in the 'additional parameters' section of the mail function using the '-f' flag. Now I've never used Swift Mailer so I don't know the equivalent to PHP's native mail() function, but here's what it would look like using mail();
mail($to,$subject,$message,$headers,'-f returnpath#example.com')
If you can find out the equivalent to this in swift mailer it might solve your problem.
Edit:
It looks like you're not actually setting the Return-Path at all. I know GMail really doesn't like that to be left out. Try setting it explicitly to your Swift_Mailer message (and make sure it matches your From):
$message->setReturnPath('from#example.com');
Solution: Use Mailgun (not tested) or Sendgrid (tested and works wonders!). There is a price-difference between the two, - but in short: Mailgun is good if you're small; Sendgrid is good if you're big.
Either that, - or send mails using MailChimps API or something. It's can't be fixed on shared hosts (most likely). The reason is below.
Explanation: I've later learned more about how shared hosts work. Imagine that several different sites are located on the same server (such as domain-1.org, domain-2.org and domain-3.org). That means that if domain-3.org sends a bunch of crap-emails, then Gmail (and other spam-filters) mark that IP-address as spam. So if domain-2.org then send out stuff, then that'll (probably) come from the some IP-address and therefore end up in spam. Shared hosts can't really do anything about it (and don't care, since so few people have this problem). And that is why it's so cheap.
Sendgrid and Mailguns IP-addresses are marked as 'fine' by all the spam-filters, and that's the service that you're paying for with them. They keep it that way, by monitoring how many emails you send out are being marked as 'spam'. If it's something like 5%-10% or something crazy low, then Sendgrid/Mailgun will block your account until you fix it (going through a long process, where you have to contact their customer service and do 1.000 hail-Mary's and all kinds of wierd stuff).
I heard that if you get your own server (which is way more expensive), and set up your own mail-server, then you have to be really careful, not to be marked as spam. Cause spam-filter are really tough nowadays...
Make sure the email address you are using as the FROM is actually an email address. I have had the same issue been resolved by going into my account management from the host (one.com for you) and adding the account that I want the email to be from. I added an account called "mailer" and through the panel I was able to setup an auto-responder that said, "Sorry. This email address is reserved for server functions".
in the from header you would then use (mailer#yourdomain.com)
having that actual email address and auto-reponder did the trick. I think gmail is just smart enough to know that an email adress that has never been used before is spam. Also, the email address must come from the domain that the script lives on so that when it says it is FROM there it is not lying.
here is the code that I use when I want to send email from my shared host (justhost.com) , It does not go to spam (this is using post data from a web form):
<?php
// Contact subject
$subject = $_POST["subject"];
// Details
$message=$_POST["detail"];
// Email of sender
$mail_from=$_POST["customer_mail"];
//Name of sender
$name=$_POST["name"];
putenv("TZ=America/Phoenix");
$now = date("F j, Y, g:i a T");
$header="Reply-To: $name <$mail_from>";
$header .= "From: MyDomainName.com <mailer#mydomainname.com>";
$header .= "\r\n";
$header .= "Reply-To: $name <$mail_from>";
$introMSG= "Message From:".$name." <".$mail_from.">"."\r\n"
."Sent On:".$now."\r\n"."From a web form on MyDomaiNname.com"."\r\n"."-----------
-----------------------"."\r\n"."\r\n";
$to ='me#mydomainname.com'; // Domain Owners Email Address
$send_contact=mail($to,$subject,$introMSG.$message,$header);
$send_copy=mail($mail_from,"Copy Of:".$subject,$introMSG.$message,$header);
// Check if message sent
if($send_contact){
echo "<strong>Thanks! Your message has been sent to me.</strong>";
}
else {
echo "<strong>There was an error sending your message </strong>";
}
if($send_copy){
echo "<strong><br>A copy of this message was sent to your email.<br>If you do not
receive a copy please check your spam folder</strong>";
}
else{
echo "<strong> There was an error sending a copy of this message to your email
</strong>";
}
$send_reminder=mail("5555555555#txt.att.net","","You Have a new contact message from
".$name.", remember to check your spam folder.",$header);
if($send_reminder){
echo ".";
}
else {
echo "<br><strong>TXT Error</strong>";
}
?>
There are at least two "spammy" looking things that jump out of your email headers:
Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING#mx.google.com>
Notice the SMTPIN_ADDED_MISSING section? You aren't behaving like a proper mailer and generating a unique Message-ID. You might find reading RFC 5322 to be instructional.
Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
for <NEWLY-CREATED-GMAIL-ACCOUNT#gmail.com>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)
That initial received header has an illegal HELO hostname (localhost.localdomain). Your mailer app should provide a way for you to set that to a valid value. It might even be as easy as configuring the hostname of the machine running PHP. See RFC 1035 (hostname validity), RFC 2821 (SMTP) and RFC 5321 (SMTP).
I have a code in PHP that sends emails to users and its working as expected. I need help in figuring out as how to send email to a group defined in lotus notes. So basically there is a group existing with some name as DEV TEAM and if I type this directly, PHP throws 501 Syntax error, parameters in command..... So, is there a way to figure out as how to retrieve the email address format for this group or any other way to send emails.
I know with all you gurus here, I will get some solution definitely:).
Thanks for any help in advance.
Please let me know if I can provide any other details.
Code through which I am able to send emails to users but not to a group in lotus notes.
<?php
$to = "testuserto#domain.com";
$subject = "TEST EMAIL";
$message = "Hello! Its is test email.";
$from = "testuser#domain.com";
$headers = "From:" . $from . "\r\n";;
$headers .= "Content-Type: text/html";
mail($to,$subject,$message,$headers);
?>
See my comment on your question. If my assumptions are correct, then the administrator of your Domino server must check the following:
DEV TEAM is a valid group in the Domino Directory, with type "Mail Only" or "Multi-Purpose".
There is no readers field on the DEV TEAM group that would restrict anonymous users from sending to it.
There are no mail rules or restrictions in the server's config document that prevent messages from being sent to the group.
The Internet Address field in the DEV TEAM group document in the Domino Directory has been configured. This should be a valid RFC-821 address, such as DEV_TEAM#yourDomain.com (This is probably optional, but it makes it easier to document the solution.)
Once you have confirmed the above configuration information, your code should use the value that was configured in Internet Address field of the DEV TEAM group in the Domino Directory. (I.e., DEV_TEAM#yourDomain.com)
My guess is that is has got very little to do with the fact that it's a Domino server. I assume the address(es) in $from or $to are malformed. See also http://www-01.ibm.com/support/docview.wss?uid=swg21105288, concerning strict RFC821 format, where '<' and '>' are required.
In any case, mail to "dev team#domain.com" won't work, the address is invalid.
For some reason the php mail() function is not working properly on a site I am building. I tried to troubleshoot the issue down to its simplest form, and came up with this file:
<?php
mail('myEmail#gmail.com', 'the subject', 'the message', 'From: webmaster#example.com', '-fwebmaster#example.com');
?>
when myEmail is a Gmail account, I never receive the message. However when I use a non-gmail account, I do receive the message. I am at a loss and have tried everything to figure this out. I am starting to think it is an obscure host/server issue. You can see the server specs here: http://aopmfg.com/php.php
Any ideas?
EDIT - let me also add that this was all working fine a few weeks ago, the last time I tested it. No significant code changes since then at all.
EDIT 2 - After reading a similar post I tried adding From and Reply-To headers... still no luck. New code:
<?
$headers = 'From: <some#email.com>' . "\r\n" .
'Reply-To: <some#email.com>';
mail('<myEmail#gmail.com>', 'the subject', 'the message', $headers,
'-fwebmaster#example.com');
?>
It turns out that Google blocked my server because another site on the same server was hacked and used for spam.
To test and ensure that it was a problem with the server, I created a simple PHP file that would send an email to my email address on page refresh. It worked when I sent to my exchange-based email address, but not to any Google-related accounts.
Code:
$headers = 'From: <test#test.com>' . "\r\n" .
'Reply-To: <test#test.com>';
mail('<myEmail#gmail.com>', 'the subject', 'the message', $headers,
'-fwebmaster#example.com');
?>
Thanks for the help all.
Try putting <> around the From and Reply to addresses. I had that same problem with work emails.
I had a similar problem with gmail. However my subject title was "See if you have won". When I changed this to something less marketing/spammy, it came through. So it's not always the PHP code who is causing this, but it can be the subject title as well which is blacklisted.
I was having the same problem. But when I checked my C:\xampp\mailoutput folder, the mail sent was received in this folder. Now please check and do the needful. It was sent in my testing local server. If it is sent on the real server, that may be on your hosting server and you have to check through site hoster
I have found that adding SPF and DKIM records to DNS solved the problem. I can use the phpmail() function to send to a list of Gmail subscribers.
The domain in the email used in the -f option in the php.ini sendmail parameter or in the mail() extra parameters field, needs to have a valid SPF record for the domain.
You should also use a domain key or DKIM. The trick here is that the domain key/DKIM is case sensitive!
After updating the records the mails get delivered to Gmail, Yahoo and AOL addresses.
Read the source here. Comments by ABOMB
https://www.php.net/manual/en/function.mail.php#107321
I had the same problem. I was using a BCC email address to record the messages sent. This is an advantage as if gmail or hotmail blocked the mail then the BCC was also blocked.
I created an SPF record and that did not help on its own though is probably a good idea.
What did seem to help me was putting the email addresses in <> and adding a reply to entry in the header.
$headers = 'From: <test#test.com>' . "\r\n" .
'BCC: <fred#test.com>' . "\r\n" .
'Reply-To: <test#test.com>';
mail('<myEmail#gmail.com>', 'the subject', 'the message', $headers);
gmail canceled the less secure app option .
so now you need to generate a powerfull gmail password that gives who use this password to enter your account without any problem . follow my steps .
1.First go to your google account management and go to security.
2.Make sure your 2-step verification are enabled To your phone or whatever.
3.Then go to search in the gmail manager then search for : app passwords.
4. Select other in the select app dropdown menu, and named whatever you like.
5 then click generate, google will give you a password. make sure you copy it and save it somewhere else.
instead using your real google account password in PHPMailer or laragon etc.. setting, use the password you just generate.
The problem is the BCC option, remove the BCC or -f email, and that's all.
I try to send a mail via php to an yahoo recipient.
Every time I connect to yahoo I get a 250 status code for the recipient address, even if it doesn't exist. I found a script which get the correct status code from yahoo, but I cannot find the differences or mistakes I did in my script. I tried to send different commands and run the script on several servers, but I always get a 250 response for the RCPT-TO-command.
Why do I don't get the correct response? I want to stop my script when a recipient doesn't exist!
Log of verify-email.org which gets the correct response:
MX record about yahoo.com exists.
Connection succeeded to g.mx.mail.yahoo.com SMTP.
=220 mta1062.mail.sp2.yahoo.com ESMTP YSmtp service ready
> HELO verify-email.org
=250 mta1062.mail.sp2.yahoo.com
> MAIL FROM: <check#verify-email.org>
=250 sender <check#verify-email.org> ok
> RCPT TO: <sdjrfvn3r#yahoo.com>
=554 delivery error: dd This user doesn't have a yahoo.com account (sdjrfvn3r#yahoo.com) [0] - mta1062.mail.sp2.yahoo.com
Log of my script which gets the wrong response:
C Connect to h.mx.mail.yahoo.com
S 220 mta1144.mail.mud.yahoo.com ESMTP YSmtp service ready
C HELO my-domain.com
S 250 mta1144.mail.mud.yahoo.com (152.70 ms)
C MAIL FROM: <existing-address#my-domain.com>
S 250 sender <existing-address#my-domain.com> ok (723.29 ms)
C RCPT TO: <sdjrfvn3r#yahoo.com>
S 250 recipient <sdjrfvn3r#yahoo.com> ok (152.67 ms)
C Close socket connection
S Connection closed gracefully
You can find the script which works properly here: http://verify-email.org
My script:
while(preg_match('/^\d\d\d-/', $r = fgets($sock))) {
$response .= $r;
}
$response .= $r;
return $response;
}
$mxRecord = "a.mx.mail.yahoo.com";
$domain = 'example.com';
$mailFrom = 'mailfrom#example.com';
$rcptTo = 'doesntexist2011#yahoo.com';
$commands = array(
"HELO ".$domain."\r\n",
"MAIL FROM: <".$mailFrom.">\r\n",
"RCPT TO: <".$rcptTo.">\r\n",
// "DATA\r\n",
// ... email subject and content
// ".\r\n",
"QUIT\r\n"
);
if($sock = fsockopen($mxRecord, 25, $errno, $errstr, 30)) {
foreach($array as $cmd) {
echo htmlentities($cmd);
echo '<br />';
fwrite($sock, $cmd);
echo htmlentities(getResponse($sock));
echo '<hr />';
}
fclose($sock);
}
else {
echo 'no connection';
}
?>
Some information:
I used my own domain (not example.com)
The script is located on the server where my domain refers to
The server isn't on any blacklist like spamhaus.org
The used mail address in "Mail From" does exist
I use getmxrr() to get the mx entries of yahoo.com
I tried HELO and EHLO -> always the same response
Do NOT waste your money on verify-email.org. I had written a class that works quite well at verifying email addresses, but had been having problems for days trying to return anything from Yahoo other than a 250 Recipient OK message. I finally came up with a work around which I would share here by unfortunately after hitting their servers about 10 times or so they blocked me for 12 hours. I then moved the class from my dev server to a live server with a good domain name, rDNS configured and everything that would allow me to send emails without getting blacklisted minus domain keys. Again, I got nothing but 250 responses with SMTP and again I got my IP blocked with my work around. I finally decided to break down and buy the script to "see what they're doing different". The answer: They aren't doing anything different. In fact, the script was garbage and almost identical to any rudimentary script you can find online. I loaded it on 2 different server and with two different configurations, followed the directions of the script to the letter ( it was only 1 or 2 instructions) and yet, got the same 250 response for the exact same email address that I received a 554 on the site. Digging a little deeper I found that it was potentially an email marketing company selling the script. They either have a relationship with Yahoo and others or its calling some other backend system, i dont know but I do know the sccript does not work. Furthermore, an emails sent to the seller and SWREG (a digital river company) have gone unanswered as well as a request for a refund. I sent screenshots of my results versus what they display on the site. I am now filing a dispute with my Credit Card company. Point being, DO NOT BUY from verify-email.org. Its a scam. That is unless you feel like pissing away $45.
My only advice is to form business relationships with the majors or go through a company like ReturnPath (very very expensive.) Or, send confirmation emails to each subscriber. I unfortunately work for a marketing company that can't send confirmation emails based on rules they have with their affiliate partners so I have to use a third party service (expensive) or come up with another solution. Good luck.
Did you read the FAQ of verify-email.org? "For some domains you can't verify whether the address is good or not, because their mail servers don't cooperate. For example: yahoo.com"
This is because these mail servers don't want spammers harvesting known-good email addresses.
I'm wondering how i would go about making the following application:
a user signs up, say with the username "johny-jones".
Lets say for example that my domain is www.example.com
if anyone emails johny-jones#example.com this email is redirected to johny-jones REAL email address
The simplest option is to tell your smtp server to forward all ingoing mails to an external program (your php script). For example, for qmail this will be like | php myphpscript.php in .qmail file. Your script will read email from stdin and resend it to the real address.
You're basically describing a mail transfer agent AKA mail server. So all you need to do is a server to run it on, the required MX DNS records, and an API that allows you to configure forward addresses. Look through the documentation of the servers
listed here to see which ones offer the latter.
Just pipe all orphan email (specific to that domain) to ur PHP script and use something like this to extract the email content:
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
then extract the "to" field and if it belongs to a user .. forward the email to him.If you have cPanel .. this is even easier. goto mail > default address > set default address and instead of putting an email address there put something like this
"|php -q /home/whatever/public_html/pipe.php" .. ofcourse without the quotes