phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   PHP  Mail


Bcc, Cc avec Mail() sous Windows[17-02-2002]
Posté par Yves Fleury

Après avoir éprouvé quelques difficultés à faire des envois avec Mail() en Bcc et en Cc sous Windows, j'ai obtenu de l'aide d'un copain PHP. La solution est toute simple, mais pas du tout documentée. Car la documentation que j'ai trouvée ne fonctionnait jamais pour PHP sous Windows.

Voici donc ma (la) solution (d'un ami).

Pour: Mail($to, $subject, $message , $additional_headers);

--------
Pour faire un envois en Bcc (Blind Carbon Copy, aucun destinataires n'a accès aux autres adresses) placer toutes les adresses Bcc dans la variable $to :

EX: $to="dest1@domaine.com, dest2@domaine.com, destX@domaine.com";

N'essayez pas de placer Bcc: dest2@domaine.com\r\n dans la variable $additional_headers car vous obtiendrez une erreur sous windows ou le message ne sera envoyé qu'a l'adresse de la variable $to.

--------
Pour un envoi en Cc (Carbon Copy, tous les destinataires ont accès a toutes les adresses) placer une adresse dans la variable $to, la vôtre pour avoir une copie.

Dans la variable $additional_headers ajoutez toutes les adresses des destinataires de cette facon:

$additional_headers="To: dest1@domaine.com\r\n";
$additional_headers.="To: dest2@domaine.com\r\n";
$additional_headers.="To: dest3@domaine.com\r\n";
$additional_headers.="To: destX@domaine.com\r\n";

Ajoutez l'adresse de provenance
$additional_headers.="From: mon@adresse.com\r\n";

Notez que les autres choses qui sont documentées pour $additional_headers fonctionnent bien sauf pour Bcc: et Cc:

Allez voir aussi cette page pour recevoir tous les messages d'erreur (courrier non livré) à une adresse émail de votre choix.

[1 commentaire]

Mail() avec Windows[20-01-2002]
Posté par Yves Fleury

J'utilise PHP sur un serveur Windows. L'utilisation de la fonction mail() se fait sans problème sauf que j'avais un petit détail qui m'agaçait. En effet, si un utilisateur entre son adresse email et commet une erreur, normalement on reçoit une erreur du genre (user unknown). Sauf que la fonction mail() demande de renvoyer les erreurs à l'adresse mail de la variable "sendmail_from" qui est dans le fichier php.ini Cette variable est normalement = me@localhost.com

Pour contourner ce problème, il suffit de mettre dans votre script cette ligne:

ini_set("sendmail_from","webmaster@votre_serveur.com");
avant le mail().

Comme vous le remarquez, ceci permet de modifier la variable sendmail_from uniquement pour la durée de votre script. Ainsi, vous obtiendrez les messages d'erreur liés à vos envois de mails à l'adresse email de votre choix.

[1 commentaire]

Return-path de la fonction mail() avec sendmail[06-01-2002]
Posté par Chris

Après avoir galéré pas mal de temps sur le return-path de la fonction mail() voici comment gérer le return-path avec sendmail. Il suffit de passer un 5ième argument à la fonction mail() :

<?
mail
($to, $subject, $message, $entete, "-fvotre_email@site.com");
?>

Cette fonctionalité fonctionne à partir de la version PHP 4.0.5 et permet de gérer les erreurs de mails.

Envoyer un mail au format HTML avec Online[29-04-2001]
Posté par Rami

Online a développé un fonction email() qui remplace la fonction mail() normale. Voici comment envoyer un mail au format HTML :

<?
if (!email("From qui", "toadresse@domaine.com",
           
$sujet, $corpsdumessage, "replyto", "Content-Type: text/html;"))
{
    echo
"<br>Votre mail n'a pas été envoyé suite à une erreur.";
}
else
{
    echo
"<br>Le mail a été envoyé!";
}
?>


Mail en HTML (et en texte pour les anciens navigateurs)[11-04-2001]
Posté par François

Ce script trouvé sur le site http://dev.nexen.net/ et légèrement modifié par mes soins, permet d'envoyer des mails en HTML.

Dans le cas de certaines messageries consultables sur le Web ou d'anciens logiciels qui ne prennent pas en compte le format HTML, le mail est reçu au format texte.

<?
function mail_html($destinataire, $sujet , $messtxt, $messhtml , $from)
{
$limite = "_parties_".md5 (uniqid (rand()));

$entete = "Reply-to: $from\n";
$entete .= "From:$from\n";
$entete .= "Date: ".date("l j F Y, G:i")."\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "Content-Type: multipart/alternative;\n";
$entete .= " boundary=\"----=$limite\"\n\n";

//Le message en texte simple pour les navigateurs qui
//n'acceptent pas le HTML
$texte_simple = "This is a multi-part message in MIME format.\n";
$texte_simple .= "Ceci est un message est au format MIME.\n";
$texte_simple .= "------=$limite\n";
$texte_simple .= "Content-Type: text/plain; charset=\"US-ASCII\"\n";
$texte_simple .= "Content-Transfer-Encoding: 7bit\n\n";
$texte_simple .= $messtxt;
$texte_simple .= "\n\n";

//le message en html original
$texte_html = "------=$limite\n";
$texte_html .= "Content-Type: text/html; charset=\"US-ASCII\"\n";
$texte_html .= "Content-Transfer-Encoding: 7bit\n\n";
$texte_html .= $messhtml;
$texte_html .= "\n\n\n------=$limite\n";

return
mail($destinataire, $sujet, $texte_simple.$texte_html, $entete);
}
?>


[2 commentaires]

Tester véritablement si une adresse email est valide[27-12-2000]
Posté par Vincent Courcelle

On peut aisément vérifier avec les regex si une adresse email contient les bons "signes", @, ., etc ..., mais cela ne garantit pas que l'adresse saisie existe réellement. On pourra la valider définitivement avec ce script :

<?
  
list($user, $domaine) = split("@", $email, 2);
  
$mail_ok = checkdnsrr($domaine, "MX");
?>

Qui vérifie que le serveur possède bien une entrée "MX" permettant de recevoir des mails.

[4 commentaires]

Envoyer un mail en spécifiant le serveur[19-10-2000]
Posté par Shino

En reprenant l'astuce 'Envoyer autre chose que du HTML', j'ai essayé un truc pour envoyer un mail en spécifiant le serveur (ce qui n'est pas permis avec la commande mail). On utilise en fait la fonction fsockopen.

<?
function mailto($ip_serveur,$nom_serveur,$exp,$to,$subject,$msg) {

  
// construction du message a envoyer
  
  
$message = "HELO ".$nom_serveur."\n"; // salut
  
$message.= "EHLO ".$nom_serveur."\n"; // reponse au salut
  
$message.= "MAIL FROM: <".$exp.">\n"; // expediteur
  
$message.= "RCPT TO: <".$to.">\n";    // destinataire
  
$message.= "DATA\n";                  // debut des donnees
  
$message.= "SUBJECT: ".$subject."\n"; //sujet
  
$message.= "hashinutile ";            // necessaire au traitement
  
$message.= $msg;                      // message
  
$message.= "\n.\n";                   // fin du message
  
$message.= "QUIT\n";                  // deconnexion

  
$fd = fsockopen($ip_serveur,25);
  
fputs($fd, $message);
}
?>


[1 commentaire]

Synseo