38 votes

Comment changer l'enveloppe de l'adresse en utilisant PHP mail ?

J'utilise PHP avec Apache sur Linux, avec Sendmail. J'utilise le programme PHP mail fonction. L'email est envoyé, mais l'enveloppe a l'adresse suivante Apache_user@localhostname en MAIL FROM (exemple nobody@conniptin.internal) et certains serveurs de messagerie distants le rejettent parce que le domaine n'existe pas (évidemment). Utilisation de mail je peux le forcer à changer l'enveloppe MAIL FROM ?

EDIT : Si j'ajoute un en-tête dans le quatrième champ de l'élément mail (), qui modifie le From dans les en-têtes du corps du message, et ne modifie PAS l'enveloppe. MAIL FROM .

Je peux le forcer en lançant sendmail avec sendmail -t -odb -oi -frealname@realhost et y envoyer le contenu de l'email. Est-ce une meilleure approche ?

Existe-t-il une meilleure façon, plus simple, plus appropriée à PHP, de faire cela ?

EDIT : Le résultat final est que j'aurais dû RTFM. Merci pour les réponses, le cinquième paramètre fonctionne et tout va bien.

78voto

Lucas Oman Points 9027

Mail() a un 4e et 5e paramètre (facultatif). Le 5ème argument est ce qui doit être passé comme options directement à sendmail. J'utilise ce qui suit :

mail('to@blah.com','subject!','body!','From: from@blah.com','-f from@blah.com');

2voto

Darryl Hein Points 33819

Je vous recommande également de vous renseigner sur PHPMailer . Il permet de créer et d'envoyer des courriers électroniques, ce qui facilite grandement le processus, tout en prenant en charge le protocole SMTP.

1voto

Joe Scylla Points 638

Vous pouvez essayer ceci (je ne suis pas sûr) :

ini_set("sendmail_from", yourmail@example.com);
mail(...);
ini_restore("sendmail_from");

-2voto

warren Points 12172

Oui : voir le page de manuel php mail pour savoir comment modifier l'en-tête.

Le code ci-dessous fonctionne sans erreur

<?php 

$Name = "Da Duder"; //senders name 
$email = "email@adress.com"; //senders e-mail adress 
$recipient = "PersonWhoGetsIt@emailadress.com"; //recipient 
$mail_body = "The text for the mail..."; //mail body 
$subject = "Subject for reviever"; //subject 
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields 

mail($recipient, $subject, $mail_body, $header); //mail command :) 
?>

-3voto

Greg Points 132247

Utilisez le quatrième argument de la fonction mail() - les en-têtes supplémentaires.

Vous pouvez définir quelque chose comme "From: \"My Self\" <me@my.com>\r\nReply-to: me@my.com"

Attention, certains serveurs de messagerie attendent un " \n "

Il y a aussi un 5ème argument :

  The additional_parameters parameter can be used to pass an additional parameter to the program configured to use when sending mail using the sendmail_path configuration setting. For example, this can be used to set the envelope sender address when using sendmail with the -f sendmail option.

    The user that the webserver runs as should be added as a trusted user to the sendmail configuration to prevent a 'X-Warning' header from being added to the message when the envelope sender (-f) is set using this method. For sendmail users, this file is /etc/mail/trusted-users.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X