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 p>
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? P>
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é: p> Merci beaucoup,
Simon P> @eisberg strong> - J'utilise un gestionnaire d'erreur personnalisé comme celui-ci: p> serait-ce que cela signifierait que je dois changer < Code> set_error_handler ("CustomError", e_all); code> à set_error_handler ("CustomError", -1); Code>? P> P> P>
6 Réponses :
sonne comme votre hôte désactivé mail () code>, vous devez rechercher avec SMTP pour envoyer un courrier, une bonne classe de messagerie PHP telle que
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.
mail () fonction renvoyer false, mais sans erreur p> blockQuote>
Bienvenue sur PHP! P>
Cela semble-t-il comme une erreur avec la configuration hôte ou est-ce mon code? P> blockQuote>
Qui sait?
mail () code> est une boîte noire à partir de laquelle vous ne trouverez aucune information utile lorsque quelque chose ne va pas. P>Lorsqu'on l'a demandé à ce sujet, ils ont recommandé que j'utilise le relais SMTP ... P> blockQuote>
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. P>
Autres options populaires incluent courrier de poire , , et le classique des classiques, phpMailer . < / p>
+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!
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) P >
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. P>
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)
Vérifiez si le Web est autorisé à envoyer du courrier en donnant
donne https l'autorisation d'envoi de courrier en émettant getSebool httpd_can_sendmail code> du terminal. Si la sortie est SetSebool httpd_can_sendmail 1
code> commande. Vous devez avoir une autorisation de racine pour émettre ces commandes. P> p>
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"; p>
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: p> et il a corrigé le problème! PHP Mail () fonctionne bien après cela. P> p>
Essayez Error_Reporting (-1); B> au-dessus de votre code. J'espère que vous obtenez un message utilisable. Source: PHP.net/Manual/fr/function.error-rorting.php < / a>
@Eisberg - J'ai une fonction d'erreur personnalisée à enregistrer toutes les erreurs (e_all) à déposer, et toujours rien! Il récupère les erreurs les plus fineuses, mais rien de courrier ().
e_all code> n'est pas-1 code> dans toutes les versions PHP :-)@Eisberg - Voir ma réponse à la gestion des erreurs dans ma question ci-dessus, je devais formater le code, l'a donc ajouté à la question.
Je viens de dire que
-1 code> vous donnera le contrôle sur chaque erreur dans chaque version PHP. Si vous ne recevez pas d'erreur avec-1 code> Il y a une bonne chance que quelque chose ne va pas avec votre configuration.