script de mail en CGI

steph.a

Membre confirmé
1 Juin 2004
47
1
49
Bonjour,

J'aide une amie à refaire son site et j'y ai rajouté un formulaire de réservations.

http://www.costa-rica-manzanillo.de/reservations/reservationsen.html

Je n'y connais pas grand chose mais j'aimerai qu'il soit envoyé directement à son mail (plutôt que "mailto" comme j'ai fait pour l'instant) et j'ai donc trouvé qu'il fallait un script CGI.

Sur le server de l'hébergeur, il n'y a pas de dossier cgi-bin. Dois-je le créer ou demander à l'hébergeur de le faire ?

Où puis je trouver des modèles de scripts qui pourront m'aider ?

Merci beaucoup

Stephanie.
 
Merci beaucoup, ça m'a beaucoup aidé et ça fonctionne (re-direction vers une page de remerciements ainsi que l'envoi d'un mail)

sauf que .... le mail est vide ... sans sujet ni contenu ... que dois-je ???

Merci encore mille fois

Stephanie
 
Voici une fonction d'envoi de mail efficace, et qui fonctionne bien pour toutes les messageries (encodage caractère, présence des bonnes infos pour l'entête du mail etc)

La fonction :

//FONCTION D'ENVOI EMAIL
function send_mail($to, $body, $subject, $fromaddress, $fromname, $attachments=false)
{
$eol="\n";
$mime_boundary=md5(time());

# Common Headers
$headers .= "From: ".$fromname."<".$fromaddress.">".$eol;
$headers .= "Reply-To: ".$fromname."<".$fromaddress.">".$eol;
$headers .= "Return-Path: ".$fromname."<".$fromaddress.">".$eol; // these two to set reply address
$headers .= "Message-ID: <".time()."-".$fromaddress.">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol; // These two to help avoid spam-filters

# Boundry for marking the split & Multitype Headers
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$mime_boundary."\"".$eol.$eol;

# Open the first part of the mail
$msg = "--".$mime_boundary.$eol;

$htmlalt_mime_boundary = $mime_boundary."_htmlalt"; //we must define a different MIME boundary for this section
# Setup for text OR html -
$msg .= "Content-Type: multipart/alternative; boundary=\"".$htmlalt_mime_boundary."\"".$eol.$eol;

# Text Version
$msg .= "--".$htmlalt_mime_boundary.$eol;
$msg .= "Content-Type: text/plain; charset=utf-8".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$msg .= strip_tags(str_replace("<br>", "\n", substr($body, (strpos($body, "<body>")+6)))).$eol.$eol;

# HTML Version
$msg .= "--".$htmlalt_mime_boundary.$eol;
$msg .= "Content-Type: text/html; charset=utf-8".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$msg .= $body.$eol.$eol;

//close the html/plain text alternate portion
$msg .= "--".$htmlalt_mime_boundary."--".$eol.$eol;

if ($attachments !== false)
{
for($i=0; $i < count($attachments); $i++)
{
if (is_file($attachments[$i]["file"]))
{
# File for Attachment
$file_name = substr($attachments[$i]["file"], (strrpos($attachments[$i]["file"], "/")+1));

$handle=fopen($attachments[$i]["file"], 'rb');
$f_contents=fread($handle, filesize($attachments[$i]["file"]));
$f_contents=chunk_split(base64_encode($f_contents)); //Encode The Data For Transition using base64_encode();
$f_type=filetype($attachments[$i]["file"]);
fclose($handle);

# Attachment
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol; // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-Description: ".$file_name.$eol;
$msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
$msg .= $f_contents.$eol.$eol;
}
}
}


sur ton formulaire, tu l'appelles ensuite simplement avec send_mail(les paramètres à passer c'est à dire les variables récupérées dans ton formulaire : $to, $body, $subject, $fromaddress, $fromname)

Sinon plus simple

$headers ='From: "XXX"<$email>'."\n";
$headers .='Reply-To: $email'."\n";
$headers .='Content-Type: text/html; charset="UTF-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';


if(mail(ton adresse email, $subject, $message, $headers, "-f$email"))
{
// Message de succès, ou redirection vers la page de confirmation
}
else
{
// Message d'erreur
}

Les variables à modifier : $email, $subject, $message qui sont récupérées par ton formulaire

important, dans la fonction d'envoi du mail, le fait d'ajouter le paramètre -f suivi de l'adresse email permet d'indiquer au serveur de messagerie que cette adresse est autorisée pour l'envoi, donc améliore la délivrabilité (evite de perdre un email ou qu'il passe en spam)
 
Dernière édition:
Merci beaucoup mais où dois je mettre cette fonction d'envoi de mail ?

Je la rajoute dans la page formmail.php que j'ai créé suite au premier commentaire laissé sur cette discussion ?

Merci