0

My online contact form submits correctly. However, when someone enters @gmail. as part of their email address, the submitted form does not arrive to me. Puzzling because if @xgmail. or @gmailx. or @gmai. is entered, the submitted form does arrive. And it arrives to a hotmail account or gmail address or business address just the same, directly or via email client, inbox or other. And it's the same whether using Firefox, Chrome or IE. I asked friends to try for me with the same result.

Problem is merely entering @gmail. in the email form field.

How can it be?

contact.html file:

<div>
<form action="contact.php" method="post">
    <div>
        <span>Email: (required)</span>
        <label>
            <input placeholder="Please enter your email address" type="email" name="email" required>
        </label>
    </div>
</form>
</div>

contact.php file:

<?php
if(isset($_POST['email']))
{ 

$email_to = "forms@archiveambition.com.au";
$email_subject = "Message to Archive Ambition"; 

function died($error)
{   

echo "

// error message code

";
die();
}

if( !isset($_POST['first_name']) ||
!isset($_POST['last_name']) ||
!isset($_POST['email']) ||
!isset($_POST['telephone']) ||
!isset($_POST['comments']))
{
died('We are sorry, but there appears to be a problem with the form you submitted.'); 
}
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email_from = $_POST['email'];
$telephone = $_POST['telephone'];
$comments = $_POST['comments'];

$error_message = "";

//EMAIL VALIDATE
$email_exp = "/^[A-Z0-9._-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i";
if(!preg_match($email_exp,$email_from))
{
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';
}

//FIRST NAME
$string_exp = "/^[a-z.']+$/i";
if(!preg_match($string_exp,$first_name))
{
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}

//MESSAGE COMMENTS
if(strlen($comments) < 2)
{
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}

if(strlen($error_message) > 0)
{
died($error_message);
}
$email_message = "\nMessage details: \n\n";

function clean_string($string)
{
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}

$email_message .= "First name: ".clean_string($first_name)."\n";
$email_message .= "Last name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";


// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers); 
?>

Thank you.<br />
Your message has been sent.<br />

<?php
}
?>

Thanks.

Phil P
  • 23
  • 5

1 Answers1

0

Some servers are picky about who they will send mail from. I have experience with go daddy servers not sending mail when trying to use a from address not hosted by them.

instead of making the email from $_POST['email'] make it from no-reply@yourdomainname and include the from email in the body for your reference.

I know this means you can't directly reply to the email, but sometimes that's the way it is.

Bryan
  • 3,449
  • 1
  • 19
  • 23
  • They are quite happy to pass on a normal email from gmail. – Phil P Aug 12 '14 at 07:14
  • If it's quite happy then what is the problem? Did you try my suggestion with the same results? – Bryan Aug 12 '14 at 07:16
  • Thanks Bryan. In a comment below here, can you specify exact code changes that you mean for me? – Phil P Aug 12 '14 at 07:26
  • Sure, change `$headers = 'From: '.$email_from."\r\n".` to `$headers = "From: no-reply@archiveambition.com.au \r\n".` Give that a shot and see if you can input an address from @gmail.com – Bryan Aug 12 '14 at 16:20
  • That's great Bryan. In fact, the email now arrives in the Inbox, another plus. And I do find that 'Reply to email' does so to recipients email address just fine. Seems that we can use any email address there in the 'headers from', except, once again, anything@gmail.com. There is a lot of talk out there about Gmail problems like this actually. But I do take your point that some servers can be finicky, so your solution is probably good insurance if other @names are 'unreliable' too. – Phil P Aug 13 '14 at 02:54
  • Now this is interesting. Using `$headers = 'From: '.$email_to."\r\n".` instead of '_from' also works just fine. Not that I really need to do that now, but is that a bad idea? – Phil P Aug 13 '14 at 02:55
  • The email to works because it is you email, hosted on your server. And yes, you may find other domains that are troublesome to use as the from as well. we always use a from @thecurrentdomain to prevent failures. Feel free to accept this answer if it worked for you. – Bryan Aug 13 '14 at 04:48