8
votes

PHP Mail () Fonction Renvoyer False, mais sans erreur

J'utilise la fonction Mail () de PHP pour le processus simple d'envoi d'une diffusion d'un formulaire de contact à la personne respective. La chose étrange est que la forme toujours utilisée pour traiter les e-mails, mais un jour tout cela s'est arrêté, la fonction renvoie maintenant false, mais ne donne aucune erreur du tout.

Le site est sur un hôte partagé. Lorsqu'on leur a demandé à ce sujet, ils ont recommandé que j'utilise le relais SMTP xx.xxx.x.xxx

corrigez-moi si je me trompe, mais la fonction Mail () ne fournit pas de dispositions à ce sujet? Certes, il appartient à la machine hôte d'avoir ses relais configurés correctement?

Ma question est la suivante: Cela ressemble-t-il à une erreur avec la configuration hôte ou est-ce mon code? Voici un échantillon du code mail que j'ai utilisé: xxx

Merci beaucoup, Simon

@eisberg - J'utilise un gestionnaire d'erreur personnalisé comme celui-ci: xxx

serait-ce que cela signifierait que je dois changer < Code> set_error_handler ("CustomError", e_all); à set_error_handler ("CustomError", -1); ?


6 Réponses :


7
votes

1 commentaires

Merci pour cette ressource utile. Il semble bien comme une meilleure approche tout autour. Au moins, je peux compter sur les clients les détails du compte SMTP asoppés pour s'appuyer sur un serveur partagé qui est buggy comme l'enfer. Encore merci.



20
votes

mail () fonction renvoyer false, mais sans erreur

Bienvenue sur PHP!

Cela semble-t-il comme une erreur avec la configuration hôte ou est-ce mon code?

Qui sait? mail () est une boîte noire à partir de laquelle vous ne trouverez aucune information utile lorsque quelque chose ne va pas.

Lorsqu'on l'a demandé à ce sujet, ils ont recommandé que j'utilise le relais SMTP ...

En effet, vous devriez probablement. Jetez un bon coup d'œil à SwiftMailer , une excellente bibliothèque de diffusion PHP moderne et complète qui peut parler directement à ce serveur SMTP. Il excelle de construire des messages MIME, comme celui que vous semblez avoir minutieusement mis en place ci-dessus.

Autres options populaires incluent courrier de poire , , et le classique des classiques, phpMailer . < / p>


3 commentaires

+1 Pour recommander SwiftMailer, sans aucun doute la bibliothèque de courrier PHP la plus complète disponible et sous Développement actif!


Boîte noire de la noirceur, haha.


SWIFTMailer est ce que j'ai décidé de courir avec, jetez un coup d'œil à la Lib et à la DOCS, et il est aussi simple d'utiliser que la fonction de courrier () de PHP est de casser!



1
votes

Plus probablement une configuration hôte. Je pense (mais peut être faux) que Mail () utilise la commande de courrier serveur. Donc, si vous n'avez pas de sendmail / postfix / ssmtp ou autre MTA installé sur le serveur, il ne peut pas fonctionner.
S'ils vous ont dit de répondre directement à un serveur SMTP, vous devez utiliser une autre bibliothèque qui implémente le protocole SMTP et une classe de messagerie pour construire un courrier et l'envoyer via SMTP directement (dans les classes PP 6)


0 commentaires

2
votes

Vous devez jeter un coup d'œil aux journaux de messagerie. Ils tiennent la réponse. Vous devez probablement lutter avec votre société d'hébergement pour les journaux.


3 commentaires

N'allons même pas là, ils disent que «ils ne peuvent pas y accéder directement», ce qui signifie qu'ils vendent probablement des espaces d'hébergement qui sont sur un serveur à l'autre bout du monde et qu'ils n'ont aucune idée de ce qu'ils font. Approche SMTP que ce sera.


@WebFac dans cette affaire SMTP va bien :)


Dans mon cas, j'ai trouvé dans dossier \ mail \ dovecot.index.cache l'erreur "Echec du courrier - Aucune adresses de destinataires" (les adresses ont été prises à partir de DB, mais étaient des chaînes vides)



0
votes

Vérifiez si le Web est autorisé à envoyer du courrier en donnant getSebool httpd_can_sendmail du terminal. Si la sortie est xxx

donne https l'autorisation d'envoi de courrier en émettant SetSebool httpd_can_sendmail 1 commande. Vous devez avoir une autorisation de racine pour émettre ces commandes.


0 commentaires

1
votes

J'ai eu un problème similaire et mon site est hébergé par un service d'hébergement partagé. Je pourrais comprendre la question en fixant l'en-tête. Le problème était:

$ en-têtes. = "De: $ fname \ r \ n";

Vous avez utilisé l'e-mail de l'utilisateur dans le champ depuis. Mon hébergement n'accepte que des courriels avec mon nom de domaine pour ce champ. Donc, je l'ai remplacé avec ceci: xxx

et il a corrigé le problème! PHP Mail () fonctionne bien après cela.


0 commentaires