2017-10-16 4 views
0

J'ai donc un simple fichier php qui récupère les données d'un formulaire et qui est sensé m'envoyer un email. Cela fonctionne sur mon propre système quand je le testais sur localhost. Mais, quand je l'ai déployé sur ubuntu en utilisant apache2, ça n'a pas marché. le fichier ne peut pas être joli, ma première tentative d'envoyer un courriel avec php, mais j'ai inclus le fichier php ci-dessous. Je sais qu'il arrive à la méthode mail() et échoue, il active le (! $ Mail) conditionnel, mais je ne peux jamais imprimer $ mail ou des erreurs donc je n'ai aucune idée de ce qui ne va pas. des idées? Le groupe d'échos a été ma tentative d'imprimer une sorte de message d'erreur sans aucune chance. En outre, je vous envoie en fait à mon adresse e-mail, je viens de changer pour cet exemplephp mail() ne pas envoyer de mail ou retourner un message d'erreur, travaillé sur mon système (localhost) mais pas sur ubuntu/apache2

<?php 
 

 
if(!isset($_POST['submit'])){ 
 
    
 
    echo "error; you need to submit the form!"; 
 
} 
 

 
$visitor_name = $_POST['name']; 
 
$visitor_message = $_POST['message']; 
 

 
//incase the email isn't provided 
 
if(empty($_POST['email'])){ 
 
    $visitor_email = 'n/a'; 
 
} else { 
 
    $visitor_email = $_POST['email']; 
 
} 
 

 
//incase the phone isn't provided 
 
if(empty($_POST['phone'])){ 
 
    $visitor_phone = 'n/a'; 
 
    } else { 
 
    $visitor_email = $_POST['email']; 
 
    } 
 

 
    //incase the phone isn't provided 
 
    if(empty($_POST['phone'])){ 
 
    $visitor_phone = 'n/a'; 
 
    } else { 
 
    $visitor_phone = $_POST['phone']; 
 
    } 
 

 

 
    if(empty($visitor_name) || empty($visitor_message)) 
 
    { 
 
    echo "Name and message are mandatory!"; 
 
    exit; 
 
    } 
 
    //a function created below for security purposes 
 
if(IsInjected($visitor_email)) 
 
{ 
 
    echo "Bad email value!"; 
 
    exit; 
 
} 
 

 
// **************************** CODE FOR EMAIL BODY BELOW ***************************************** 
 

 
$email_body = '<html><body>'; 
 
$email_body .= "<h2> You've recieved a new message from: $visitor_name, they need a building </h2>"; 
 
$email_body .= '<h4> Here is the message: </h4>'; 
 
$email_body .= "<p> $visitor_message </p>"; 
 
$email_body .= "<h4> Their contact info is below</h4>"; 
 
$email_body .= "<ul> <li> email: $visitor_email </li>"; 
 
$email_body .= "<li> phone: $visitor_phone </li></ul>"; 
 
$email_body .= '</body></html>'; 
 

 

 
// **************************** END OF CODE FOR EMAIL BODY **************************************** 
 

 

 

 
$to = '[email protected]'; 
 
$subject = "Building Form Submission: $visitor_name Needs a building\r\n"; 
 
$headers = "From: [email protected] \r\n"; 
 
$headers .= 'MIME-Version: 1.0' . "\r\n"; 
 

 
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
 

 

 
if($visitor_email != 'n/a'){ 
 
    $headers .= "Reply-To: $visitor_email \r\n"; 
 
} 
 

 

 
$mail = mail($to, $subject, $email_body, $headers); 
 
print_r ($mail); 
 
echo "end test"; 
 
if (!$mail){ 
 
    echo "Message not sent, there was an error. Please contact Jerrod at ....."; 
 
    $errorMessage = error_get_last(); 
 
    echo "There was an error: $errorMessage"; 
 
    echo "Below the error is printed : "; 
 
    print_r(error_get_last()); 
 
} else { 
 
    echo "Message sent"; 
 
    header('Location: end.html'); 
 
} 
 

 

 
// Function to validate against any email injection attempts 
 
function IsInjected($str) 
 
{ 
 
    $injections = array('(\n+)', 
 
       '(\r+)', 
 
       '(\t+)', 
 
       '(%0A+)', 
 
       '(%0D+)', 
 
       '(%08+)', 
 
       '(%09+)' 
 
      ); 
 
    $inject = join('|', $injections); 
 
    $inject = "/$inject/i"; 
 
    if(preg_match($inject,$str)) 
 
    { 
 
    return true; 
 
    } 
 
    else 
 
    { 
 
    return false; 
 
    } 
 
} 
 
?>

Répondre

1

Les e-mails envoyés directement par un script PHP de cette manière généralement obtenir marqué comme indésirable ou spam par le principaux fournisseurs de messagerie. Si vous commencez à les envoyer dans n'importe quelle quantité, votre adresse e-mail (et éventuellement votre domaine) se retrouvera sur Spamhaus et d'autres listes noires.

Si vous avez besoin d'envoyer des courriels personnalisés comme votre exemple ci-dessus, pensez à utiliser un service comme SendGrid ou Amazon Simple Email Service.

+0

le problème est qu'il n'est pas envoyé du tout – Jerrod

+0

Est-ce votre propre serveur (local ou virtuel) ou êtes-vous sur un environnement d'hébergement partagé? –

+0

cela a fonctionné sur mon propre serveur (localhost), mais le problème est sur aws ubuntu avec apache2 – Jerrod