web-dev-qa-db-fra.com

PHP problème de courrier avec www-data

J'essaie d'appeler sendmail via la fonction mail de PHP à l'aide du code suivant:

$to      = '[email protected]';
    $subject = 'test';
    $message = 'test';
    $headers = 'From: [email protected]' . "\r\n" .
               'Reply-To: [email protected]' . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);

Cependant, dans mon mail.log, je reçois un message indiquant que l'adresse de l'expéditeur n'est pas l'adresse spécifiée dans l'en-tête:

<www-data@Name>: Sender address rejected: Domain not found

Pourquoi est-ce?? J'utilise le fast-cgi de PHP sur Ubuntu Pourquoi sendmail n'utilise-t-il pas l'en-tête que j'ai spécifié via le code PHP?

21
aherlambang

Il semble que www-data@Name soit votre adresse "de" enveloppe. L'enveloppe "De" adresse est différent de l'adresse qui apparaît dans votre "De:" en-tête de l'e-mail. C'est ce que sendmail utilise dans son échange "MAIL FROM/RCPT TO" avec le serveur de messagerie destinataire. La principale raison pour laquelle on l'appelle une adresse "enveloppe" est celle qui apparaît extérieur de l'en-tête et du corps du message, à l'état brut Echange SMTP entre serveurs de messagerie.

L’enveloppe par défaut "de" sur unix dépend de l’implémentation de sendmail que vous utilisez. Mais généralement, il sera défini sur le nom d'utilisateur du processus en cours suivi de "@" et sur le nom d'hôte de la machine. Dans une configuration typique, cela ressemblera à quelque chose comme [email protected].

Si vos e-mails sont rejetés par les serveurs de messagerie de destination ou si vous devez modifier l'adresse d'envoi des e-mails renvoyés, vous pouvez modifier l'adresse "de" de l'enveloppe pour résoudre vos problèmes.

Pour changer l'enveloppe "de" adresse sur unix, vous spécifiez une option "-r" à votre binaire sendmail. Vous pouvez le faire globalement dans php.ini en ajoutant l'option "-r" à la ligne de commande "sendmail_path". Vous pouvez également le faire par programme à partir de PHP en passant -r [email protected] en tant que additional parameter argument à la fonction mail () (le cinquième argument). Si vous spécifiez une adresse aux deux endroits, le binaire sendmail sera appelé avec deux options "-r", qui peuvent avoir un comportement indéfini selon votre implémentation de sendmail. Avec le MTA de Postfix, les options "-r" ultérieures remplacent les options précédentes de manière silencieuse, ce qui permet de définir un paramètre global par défaut tout en conservant un comportement judicieux lorsque vous essayez de le remplacer localement.

MODIFIER

A propos des indicateurs facultatifs pouvant être passés à sendmail:-f définira l'adresse de l'expéditeur, -r remplacera le chemin de retour par défaut généré par sendmail (généralement, l'adresse de l'expéditeur est utilisée). Si vous souhaitez que vos retours soient renvoyés à une adresse différente de l'adresse d'origine, essayez d'utiliser les deux indicateurs à la fois: -f [email protected] -r [email protected]

mon php.ini

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log =
24
anubhava

Bien que ce soit une vieille question, j'ajoute cette réponse au cas où cela pourrait aider quelqu'un:

J'ai eu le même problème avec l'en-tête From: qui a été ré-écrit dans www-data@Host.... J'ai fini par le localiser jusqu'au service de passerelle ssmtp qui dirigeait le courrier de notre serveur Web vers notre serveur de courrier. J'ai ajouté la ligne FromLineOverride=YES dans le fichier /etc/ssmtp/ssmtp.conf et le problème a disparu.

7
David G

Dans mon cas, j'ai un serveur hébergé alors j'ai eu besoin de modifier ce fichier: 

/etc/ssmtp/ssmtp.conf

Puis décommentez cette ligne:

FromLineOverride = YES

Une fois cela fait, les en-têtes de contacts fonctionnent.

5
DependencyHell

Cela a fonctionné pour moi: 

$mail->Sendmail = $mail->Sendmail.' -f '.$mail_errorsto; 
0
Martin

J'avais un problème similaire avec www-data lorsque tous mes mails ont été envoyés et reçus avec cet en-tête:

From: www-data <[email protected]>

J'ai utilisé l'indicateur -f [email protected] comme 5ème argument avec la fonction email () PHP (comme mentionné dans la réponse acceptée), mais je recevais toujours mes emails en tant que:

From: www-data <[email protected]>

J'ai donc ajouté un drapeau -f [email protected] -F info pour définir le nom complet de l'e-mail. Enfin, je recevais les e-mails que je voulais:

From: info <[email protected]>

Je poste cette réponse parce que personne ne la mentionne ici et je suis un peu coincé dessus.

0
Mirous