2010-09-08 8 views
2

J'ai récemment eu quelque chose d'étrange avec le script PHP que j'utilise pour envoyer des emails à partir d'un formulaire de contact en ligne et je me demandais si quelqu'un pouvait jeter un peu de lumière sur le problème. J'ai eu un script PHP que j'utilise sur plusieurs sites Web et il a toujours bien fonctionné, mais pour une raison étrange, j'ai essayé d'utiliser sur un site et cela ne fonctionnait pas.Problème avec l'envoi d'un email via un script PHP?

J'ai essayé fiddleing avec elle et a finalement réalisé qu'il avait quelque chose à voir avec la section suivante du code:

c'est la section originale du code qui fonctionne généralement bien, mais ne fonctionnait pas pour une raison:

$to = 'My Name <[email protected]>'; 

Je retire ensuite le bit de nom, de sorte que le code ressemblait à ceci:

$to = '[email protected]'; 

et maintenant il envoie l'e-mail par ok. Comme je l'ai dit, le code du haut fonctionne généralement bien, donc des idées pourquoi cette fois j'ai dû modifier le code pour le faire fonctionner?

Toutes les explications possibles serait génial: o)

Voici le code complet:

<?php 

require("is_email.php"); // email validation function 

//Retrieve form data. 
//GET - user submitted data using AJAX 
//POST - in case user does not support javascript, we'll use POST instead 
$name = ($_GET['name']) ?$_GET['name'] : $_POST['name']; 
$email = ($_GET['email']) ?$_GET['email'] : $_POST['email']; 
$telephone = ($_GET['telephone']) ?$_GET['telephone'] : $_POST['telephone']; 
$address = ($_GET['address']) ?$_GET['address'] : $_POST['address']; 
$enquiry = ($_GET['enquiry']) ?$_GET['enquiry'] : $_POST['enquiry']; 
$calculation = ($_GET['calculation']) ?$_GET['calculation'] : $_POST['calculation']; 

//flag to indicate which method it uses. If POST set it to 1 
if ($_POST) $post=1; 

//Server side validation for POST data 
if (!$name) $errors[count($errors)] = 'Please click back and enter your name.'; 
if (!$email) $errors[count($errors)] = 'Please click back and enter your email.'; 
else if (!is_email($email)) $errors[count($errors)] = 'Please click back as you may have entered an invalid email address.'; 
if (!$telephone) $errors[count($errors)] = 'Please click back and enter your telephone number.'; 
if (!$address) $errors[count($errors)] = 'Please click back and enter your address.'; 
if (!$enquiry) $errors[count($errors)] = 'Please click back and enter your enquiry.'; 
if ($calculation != '14') $errors[count($errors)] = 'Please click back and check you have correctly answered the simple calculation (in number format).'; 

//if the errors array is empty, send the mail 
if (!$errors) { 

    //recipient - change this to your name and email 
    $to = '[email protected]';  
    //sender 
    $from = $name . ' <' . $email . '>'; 

    //subject and the html message 
    $subject = 'Website Enquiry: ' . $name; 
    $email_body = ' 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head></head> 
    <body> 
    <table cellpadding="5" style="color:#757575;"> 
     <tr><td style="color:#3b5998;">Name: </td><td>' . $name . '</td></tr> 
     <tr><td style="color:#3b5998;">Email: </td><td>' . $email . '</td></tr> 
     <tr><td style="color:#3b5998;">Telephone: </td><td>' . $telephone . '</td></tr> 
     <tr valign="top"><td style="color:#3b5998;">Address: </td><td>' . nl2br($address) . '</td></tr> 
     <tr valign="top"><td style="color:#3b5998;">Enquiry: </td><td>' . nl2br($enquiry) . '</td></tr> 
    </table> 
    </body> 
    </html>'; 

    //send the mail 
    $result = sendmail($to, $subject, $email_body, $from); 

    //if POST was used, display the message straight away 
    if ($_POST) { 
     if ($result) echo 'Thank you! We have received your message.<br /><br /><a href="../enquiry_form.html">OK</a>'; 
     else echo 'Sorry, unexpected error. Please try again later'; 

     //else if GET was used, return the boolean value so that 
     //ajax script can react accordingly 
     //1 means success, 0 means failed 
     } else { 
      echo $result;  
     } 

//if the errors array has values 
} else { 

    //display the errors message 
    for ($i=0; $i<count($errors); $i++) echo $errors[$i] . '<br />';  
    exit; 
} 

//Simple mail function with HTML header 
function sendmail($to, $subject, $email_body, $from) { 
    $headers = "MIME-Version: 1.0" . "\r\n"; 
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
    $headers .= 'From: ' . $from . "\r\n"; 

    $result = mail($to,$subject,$email_body,$headers); 

    if ($result) return 1; 
    else return 0; 
} 
?> 

Répondre

0

J'ai effectué ma première question d'expliquer comment j'ai surmonté le problème.

0

Les hôtes peuvent varier en fonction de leurs besoins pour sendmail et en fonction de ce que sendmail logiciel qu'ils utilisent. Vous pouvez en discuter avec votre société d'hébergement et voir s'il y a des mises en garde à faire fonctionner ou si elles connaissent un meilleur format.

+0

Ok merci, y a-t-il un avantage à avoir le nom et l'adresse e-mail suivant le $ to =? c'est juste que je ne peux pas penser tout de suite pourquoi c'est un avantage. Merci encore pour toute contribution: o) – ade123

+0

La seule raison à laquelle je peux penser est juste des préférences d'affichage lorsque le client ouvre un email. Il montrerait de 'My Name' avec la ligne supérieure, avec le fond, il montrerait de la' info @ domain.com' –

+0

Merci pour votre info premiso: o) – ade123

0

Utilisez ceci:

$mailFrom = '"My Name" <[email protected]>'; 

l'étiquette est le double de DE et un espace cité et <email>

+0

Merci Stewie, mais cela ne semblait pas fonctionner – ade123

+0

Comment envoyez-vous votre courrier? en utilisant la fonction mail() OU en ouvrant une connexion SMTP via un script? – Stewie

+0

Salut Stewie, j'ai ajouté le code complet sous mon article original. Je ne suis pas si haut sur php vraiment. – ade123