Fonction mail de PHP ne fonctionne pas sur le serveur Centos
J'utilise centos Serveur et d'avoir à envoyer l'e-mail de l'utilisateur, donc j'ai copié le code en cours d'exécution de la mine à partir d'un serveur et utilisé ici, mais il n'est pas l'envoi de mails.
Code est :
$to = $email; //writing mail to the user
$subject = "Hii";
$message = "<table>
<tr><td> Hello ".$email.",</td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
</table>" ;
$from = "[email protected]";
//To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
//Additional headers
$headers .= 'From: Team <[email protected]>' . "\r\n";
if(mail($to,$subject,$message,$headers))
{
echo "0";//mail sent Successfully.
}
else
{
echo "1";
}
Il a toujours l'impression 1. Même code fonctionne bien sur d'autres projets. Merci de me guider sur ce que je peux faire pour l'activer ici aussi?
Toute aide sera très appréciée!
est 'sendmail' installé sur ur de la boîte?
comment puis-je vérifier ?
rechercher dans google, vous trouverez beaucoup d'aide dans la configuration.
Dans le cas où vous ne souhaitez pas installer sendmail à la fois (comme la plupart des réponses ici pour une raison suggèrent), vous pouvez essayer de "/etc/init.d/sendmail statut" ou "/etc/init.d/postfix statut" et "cat /var/log/maillog"
comment puis-je vérifier ?
yum install sendmail
devrait def aider, parce que si vous n'avez pas encore installé, les chances sont que ses pas là dans le système.rechercher dans google, vous trouverez beaucoup d'aide dans la configuration.
Dans le cas où vous ne souhaitez pas installer sendmail à la fois (comme la plupart des réponses ici pour une raison suggèrent), vous pouvez essayer de "/etc/init.d/sendmail statut" ou "/etc/init.d/postfix statut" et "cat /var/log/maillog"
OriginalL'auteur Astha | 2011-12-01
Vous devez vous connecter pour publier un commentaire.
Après l'installation de sendmail* et en exécutant les commandes suivantes:
J'ai encore eu le même problème. J'ai vérifié mon
/var/log/maillog
et vu une erreur:Après plus de recherche, j'ai changé
/etc/hosts
à partir de::
et maintenant, la fonction mail est maintenant fonctionne bien.
postfix est-ce à la sortie de la boîte
J'ai utilisé ces instructions pour configurer sendmail pour CentOS dans un conteneur Docker. Je n'ai cependant n'ont qu'à faire yum install sendmail pour utiliser mail(). La configuration du fichier hosts comme ci-dessus s'est avérée cruciale afin de rendre la fonction mail envoyer un courriel en temps opportun. Merci!!!!
OriginalL'auteur Astha
Je sais que cela a été répondu, mais j'ai eu un problème similaire.
Dans le cas où quelqu'un d'autre....
/var/log/maillog m'a montré un Postfix problème d'autorisation.
La traque de l'erreur que j'ai trouvé la solution à la politique SELinux sur CentOS (j'utilise la version 6).
Réponse rapide:
setsebool httpd_can_sendmail 1
Vous utilisez l'option-P pour rendre la modification permanente; j'ai juste besoin de réinitialisation de mot de passe e-mail, donc pas besoin pour mon cas.
De crédit: http://www.spidersoft.com.au/2011/posftix-permission-denied-problem/?ModPagespeed=noscript
EDIT: j'aurais commenté mais je n'ai pas assez de réputation encore.
setsebool: SELinux is disabled
Semble comme SELinux n'est pas votre problème, alors. Avez-vous besoin d'aide ?
OriginalL'auteur preOtep
J'ai eu le même problème. J'ai un serveur de développement, à la maison et de la prod de serveur à serveur externe, maison des mails entrants et aller à l'autre serveur. PHP:s
mail()
fonctionne très bien dans le serveur de la maison, mais pas à la maison.J'ai testé un peu et l'ai eu à travailler à la maison de la même manière que dans le serveur de la maison. La différence entre les méthodes du serveur à la maison et la maison est la configuration de sendmail. Serveur maison, je n'avais qu'à installer sendmail et c'était très bien, mais à la maison, j'ai également installer sendmail-cf et l'utiliser pour ajouter le serveur de courrier sortant d'adresse.
Supposons que vous avez Centos, Apache et PHP au serveur à la maison et que vous voulez envoyer des e-mails à l'aide de PHP:s fonction mail ().
1) Définir le nom d'hôte sur le serveur à la maison en deux endroits: dans /etc/sysconfig/network et /proc/sys/kernel/hostname de cette façon:
2) Installer sendmail et sendmail-cf:
3) Ajouter la ligne suivante dans /etc/mail/sendmail.mc, où vous avez votre fournisseur d'accès internet:s serveur de courrier sortant:
4) mise à Jour de sendmail.cf:
5) Redémarrez sendmail et apache:
6) Boot pour mettre à jour le nom d'hôte:
Que c'est. Maintenant, les travaux suivants:
Vous pouvez sauter -f:
auquel cas le nom de l'expéditeur deviennent automatiquement d'utilisateur@nom d'hôte, par exemple. [email protected].
Quelques notes de nom d'hôte
La sélection de nom de domaine est essentiel. La valeur par défaut dans Centos6 est
localhost.localdomain
, maismail()
n'est pas de travailler avec elle si vous ignorez votre propre adresse de l'expéditeur (par exemple.'[email protected]'
) lors de l'appel de mail(). Si vous êtes sûr, que vous appelez toujours mail() en utilisant votre véritable adresse comme adresse de l'expéditeur, le nom d'hôte peut être que ce soit, mais si vous avez des appels en cours de mail() qui ne possède pas l'adresse de l'expéditeur (j'ai des centaines de cela comme des appels à des fins de test), alors vous devez avoir un vrai nom de domaine en tant que nom d'hôte, parce que votre nom d'hôte du serveur est utilisé comme un expéditeur de l'adresse de domaine dans ces cas. Vrai dans le sens que le domaine doit avoir au moins DNS enregistrement (pour une raison de mon fournisseur d'accès ne nécessite pas de NS-enregistrement de l'adresse de l'expéditeur, seulement Un record, mais de tester et de vérifier avec votre fournisseur de services internet). L'inconvénient de l'utilisation non-email-domaine comme adresse d'expéditeur est que des réponses et des avis de livraison vont à peu du ciel, mais si vous laissez tomber l'adresse de l'expéditeur dans votre code, cela signifie habituellement que vous de tester et de déboguer quelque chose et n'ont pas besoin de la fonctionnalité de réponse. Le domaine peut être par exemple. celui que vous obtenez à partir de serveur dns dynamique, par exemple.mydns157.dlinkddns.com
, qui peut pointer à votre routeur (mais pas obligé). Vous pouvez obtenir de l'enregistrement DNS en PHP à l'aide dedns_get_record("mydns157.dlinkddns.com")
, qui retourne un tableau comme ceci:Si
type
au-dessus de DNS-enregistrement estNS
, le domaine comporte comme un domaine de messagerie, ce qui est OK pour le nom d'hôte de serveur, mais l'effet est un peu différent. Si vous définissez en tant que nom d'hôte existant de domaine de messagerie par exemple.myexistingemaildomain.com
, et envoyer un message à[email protected]
par exemple à des fins de débogage, sendmail pense que le message doit être livré à la messagerie dossier de l'utilisateurme
sur ce serveur. Sime
utilisateur n'existe pas, l'envoi échoue et si l'utilisateur existe, alors le message est envoyé à/var/mail/me
. Cela peut être ce que vous voulez, mais (comme moi), vous pourriez voulez que tous les messages sont délivrés à l'extérieur au lieu de les dossiers du serveur.Votre nom de domaine (DNS record) n'a pas besoin de pointer vers votre serveur réel d'IP externe pour faire de mail() de travail en l'absence de l'expéditeur de l'adresse de cas, mais il n'y a pas de mal. La chose principale est que le nom d'hôte de la validité d'Un record et que le domaine vous appartient. Si le domaine ne vous appartient pas, alors il y a peut naître un trou de sécurité. Si vous définissez en tant que nom d'hôte certaines de domaine de messagerie par exemple.
microsoft.com
(pour quelque raison que ce soit) et d'envoyer un message à quelqu'un sans l'ajout de votre propre adresse de l'expéditeur lors de l'appel de mail() (eg.'[email protected]'
), l'adresse de l'expéditeur sera automatiquement[email protected]
. Si vous êtes connecté en tant que root, l'adresse de l'expéditeur sera[email protected]
. Des réponses et des notifications d'échec de livraisons aller ensuite à[email protected]
et c'est peut-être pas votre intention.service sendmail restart
im obtenir une erreurStarting sendmail: 554 5.0.0 No local mailer defined 554 5.0.0 QueueDirectory (Q) option must be set
OriginalL'auteur Timo Kähkönen
Je vous recommande d'utiliser SwiftMailer simplement beaucoup de ce.
OriginalL'auteur Eamorr
peut que cela vous aide à
OriginalL'auteur Sonal Khunt
Je viens d'avoir ce problème, deux choses.
Mes e-mails allaient spam, certainement vérifier. Sans doute parce que mon serveur n'a pas la bonne PTR et des enregistrements SPF.
Mais aussi, je l'ai trouvé beaucoup plus facile à tester de sendmail avec ceci:
OriginalL'auteur Phil LaNasa
Vérifiez toujours votre maillog dans /var/log/maillog pour en connaître la cause du problème.
J'ai eu un problème similaire une fois après l'avoir correctement configuré postfix. J'ai eu un message d'erreur indiquant
fatal: setrlimit: Permission denied
. Solution de contournement est de vérifier si le httpd peut envoyer des messages est activé ou non pargetsebool httpd_can_sendmail
de commande. Si httpd peut envoyer des messages est hors tension, puis de l'activer par la commande:setsebool -P httpd_can_sendmail 1
. Espérons que cette aide.OriginalL'auteur Ratul Doley