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;
}
?>
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
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' –
Merci pour votre info premiso: o) – ade123