Ce n'est pas vraiement un sujet passionant, mais cela me prend la tête.
J'essaie deconfigurer mon SMTP pour pouvoir envoyer des mails via ma page contact.
La configuration $default que propose cake php fonctionne correctement. Cela dit, il m'est impossible d'envoyer un mail avec cette configuration SMTP
public $smtp = array(
'transport' => 'Smtp',
'from' => array('postmaster@monsite.fr' => 'Pluriel Communication'),
'host' => 'SSL0.OVH.NET',
'port' => 110,
'timeout' => 30,
'username' => 'contact@monsite.fr',
'password' => 'monMotdeP',
'client' => null,
'log' => false,
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);
Pour les ports, j'ai testé également 587 965 et tout un tas d'autre.
Voici en retour le beau message d'erreur :
SMTP Error: +OK Welcome to OVH Mail server 636
Merci de votre aide, et de l'orientation qu vous me donnerais
Bonjour,
J'utilise une config équivalente pour un simple formulaire de contact. Dans ton cas, si tu veux plus de sécurité je rajouterai juste une routine pour éviter le spam.
Si un jour tu souhaite envoyer des mails à tes membres je te conseille de passer par un serveur SMTP, via un compte gmail par exemple. C'est ce que j'utilise également pour un autre site qui demande des pièces-jointe.
Si je devais te donner une réponse simple, oui tu peux rester comme ça pour un formulaire de contact dont le mail t'es adressé.
Bon courage à toi.
salut,
Sur OVH mutualisé ,j'utilise le port 25
public $smtp = array(
'transport' => 'Smtp',
'from' => array('site@localhost' => 'mon site'),
'host' => 'localhost',
'port' => 25,
'timeout' => 30,
'username' => 'user',
'password' => 'secret',
'client' => null,
'log' => false,
'charset' => 'utf-8',
'headerCharset' => 'utf-8',
);
merci pour ton retour,
Je viens de tester sans résultat positif !!!
Quelle sont les infos que je dois mettre à username (dans ma config j'ai donnée une des adresse configurée chez ovh ?)
Ok ok. Bon je ne peux malheuresement pas tester cela maintenant, mais dès la première heure (vers 11 h quoi ;) )je m en occupe !
Mais que cela foinctionne ou non il me faudra dans tous les cas des explications.
Merci encore et à dems
Bon, à priori j'ai réussi à faire parti quelques mails.
Lorsque j'utilise ta config : "Connection refused" met retourné !
Si j'utilise ma config, le mail part à conditions que l'adresse email rentré par l'internaute dans le champs du formulaire soit valide : c'est à dire que le nom du domaine ou le webmails existent. ( Je sais pas si je suis clair).
Du coup il faut que je fasse une vérifs pour pas que cela parte en erreur, un conseil ??
Merci en tous les cas !
Nobody ?
Un test qui permet de vérifier si l'adresse mail existe bien ? et qu 'il n' y a pas d'erreur sur le nom du domaine ou du webmails ?
Tu ne peux pas savoir si l'adresse email de l'utilisateur existe réellement avant d'avoir essayé d'envoyer le mail, la seule chose que tu peux faire, c'est vérifier si l'envoi s'est bien effectué.
Ok ok, pourtant l'erreur que me renvoi cake est bien :"SMTP Error: 552 sorry, your envelope sender domain must exist " ce qui signifie il me semble que le nom de domaine n'est pas valide est qu il le repère. Cela dit, vérifier si le mail est bien parti est bien plus simple.
Voici le code que j'utilise (suite au tuto)
if($this->request->is('post')){
if($this->Contact->send($this->request->data['Contact']))
{
$this->Session->setFlash('Votre email nous est bien parvenu !','ok');
$this->request->data = array();
}
else
{
$this->Session->setFlash('Une erreur s\'est produite lors de l\'envoie de votre email','error');
}
}
Mais l'erreur s'affiche quant même :
Error: An Internal Error Has Occurred.
=/
Ce n'est pas un envoi de mail que tu montres avec le code.
L'envoi de mail c'est avec le composant Email.
Pff...
Du coup je suis un peu largué là. Je revoie ma config car en suivant le tuto je me retrouve avec mon composant dans le model contact ce qui me semble bancal...
Du coup mon test je doit le faire vers quel niveau ?
public function send($data){
$this->set($data);
if($this->validates()){
App :: uses('CakeEmail','Network/Email');
$mail = new CakeEmail('smtp');
$mail->to('contact@monsite.com');
->from($data['email'])
->subject('Contact / Site')
->emailFormat('html')
->template('contact')->viewVars($data);
return $mail->send();
}else{
return false;
}
}
Merci à vous
Salut, moi je debugerais $data...
voici ma fonction pour une inscription à une newsletter, sur cake2.0
public function index() {
if(!empty($this->request->data)){
$this->Newsletter->create($this->request->data);
if($this->Newsletter->validates()){
$this->Newsletter->create(array(
'email' =>$this->request->data['Newsletter']['email']
));
$this->Newsletter->save();
//envoi du mail
App::uses('CakeEmail','Network/Email');
$CakeEmail = new CakeEmail('');
$CakeEmail->to('mail_d_inscription');
$CakeEmail->subject('Une inscription à la newsletter sur mon.site.fr');
$CakeEmail->from('contact@monsite.fr');
$CakeEmail->emailFormat('html');
$CakeEmail->template('undeplus');
$CakeEmail->send();
$this->Session->setFlash('Merci, à très vite !!!');
}
return $this->redirect('/');
}
}
Un tout petit conseil, pour ce genre d'email, comme pour tous les emails transactionnels (confirmations d'inscription, notification, etc...) , je passe par Mandrill et son API simplissime. Délivrabilité au top de ce qui se fait dans le monde et totalement gratuit jusqu'à 12000 Emails/mois. Les serveurs OVH, bof ... Si tu as besoin d'infos ou de savoir comment je m'y suis pris, pas de souci. En attendant, si tu veux prendre connaissance avec Mandrill => https://mandrill.com/
Merci pour ce retour ptit chef...Toi tu n'as pas besoin de faire de test style : Si mon mail est Send "ok" sinon "error" ?
Et j'ai tjs pas compris pourquoi username et password tu ne les modifie pas.
Bonjour Ptitchef,
ton code n'assure pas la cohérence transactionnelle entre la mise à jour de la base et l'envoi du mail.
Que se passe-t-il si l'insertion en base plante et que le mail part ? (ou vice versa même si dans ce cas ça serait un peu moins génant)
Pour info, InnoDB supporte les transactions (MyISAM non en revanche).
Re,
Voici la fonction index de mon Contactscontroller.
Il me semble que je fais de cette manière le test si mon mail part OK sinon ERROR.
Cela dit mon message OK apparaît bien, par contre, si l'adresse rentré n'est pas un correct, je n'ai pas le message ERROR mais un spécial cake:
"SMTP Error: 552 sorry, your envelope sender domain must exist (#5.7.1)"
Une idéee (avec 3 "e") ?
Merci
function index(){
if(!empty($this->request->data)){
$data = $this->request->data;
App :: uses('CakeEmail','Network/Email');
$CakeEmail = new CakeEmail('smtp');
$CakeEmail->to('contact@monsite.com');
$CakeEmail->from($data['Contact']['email']);
$CakeEmail->subject('Contact / Site');
$CakeEmail->emailFormat('html');
$CakeEmail->template('contact');
$CakeEmail->viewVars(array('name' => $data['Contact']['name'],
'message' => $data['Contact']['message']
));
if ($CakeEmail->send()){
$this->Session->setFlash('Votre email nous est bien parvenu !','ok');
}
else
{
$this->Session->setFlash('Une erreur s\'est produite lors de l\'envoie de votre email','error');
}
}
}
A partir de quel domaine envois-tu l'email ?
Par ailleurs il me semble que tu as inversé le from et le to dans le code.
Par ailleurs il me semble que tu as inversé le from et le to dans le code.
Que la méthode to soit avant la méthode from n'est pas un problème, par contre s'il a inversé les adresses email entre les deux, ça peut à la rigueur poser un problème ou être gênant, en effet. :)
Cela dit mon message OK apparaît bien, par contre, si l'adresse rentré n'est pas un correct, je n'ai pas le message ERROR mais un spécial cake
Il te suffit peut-être tout simplement de baisser le niveau de ton debug afin que CakePHP ne t'affiche pas des erreurs "critiques" le temps que tu testes ta fonction.
Car si tu as ton debug à 2, il est tout à fait possible qu'il t'affiche son message d'erreur au lieu de ton message Flash, étant donné que c'est quand même une erreur importante.
Bonjour et merci de vos commentaires.
@antho07, si j'ai bien compris la config to désigne l'adresse de réception et from l'adresse de l'internaute qui envoi le mail. Ce qui du coup pour moi parraît correspondre à ce que j'écrit dans le component cakeemail, à savoir que je recois les mails sur contact@monsite.com de la part de $data['Contact']['email'] (l'adresse rempli dans le fomruklaire contact).
Ai-je raison de penser cela ?
@Lartak, j'ai baissé mon niveau de débug à 0, et j'ai le message classique
Error: An Internal Error Has Occurred.
L'adresse que je rentre dnas mon formulaire est : aze@azea.com
ARff
Rebonjour,
J'ai communiqué avecOVH pour mes soucis de Mail, malheuresement ils n'interviennent pas sur ce genre de problème. Par contre ils m'ont joint ce message :
"Il n'est par contre pas recommander d'utiliser le serveur SMTP OVH car une limitation de 300 mails par heure est mise en palce sur votre cluster d'hébergement qui est utilisé par plusieurs milliers d'utilisateurs.Je vous invite donc à utiliser la fonction mail de PHP."
Que me conseillez-vous suite à cette nouvelle information ?
Du coup dans mon email config
public $default = array(
'transport' => 'Mail',
'log' => false,
'charset' => 'utf-8',
'headerCharset' => 'utf-8'
);
Et mon contactsController :
function index(){
if(!empty($this->request->data)){
$data = $this->request->data;
App :: uses('CakeEmail','Network/Email');
$CakeEmail = new CakeEmail('default');
$CakeEmail->to('contact@monsite.com');
$CakeEmail->from($data['Contact']['email']);
$CakeEmail->subject('Contact / Site');
$CakeEmail->emailFormat('html');
$CakeEmail->template('contact');
$CakeEmail->viewVars(array('name' => $data['Contact']['name'],
'message' => $data['Contact']['message']
));
if ($CakeEmail->send()){
$this->Session->setFlash('Votre email nous est bien parvenu !','ok');
}
else
{
$this->Session->setFlash('Une erreur s\'est produite lors de l\'envoie de votre email','error');
}
return $this->redirect(array('controller' => 'Contacts'));
}
}
Les mails partent bien et mieux ils arrivent !
Que pensez vous de la configuration générale. Est-ce cela que l'on utilise habituellement ? Y a t il des risques ou des vérifs à rajouter ? ( Je test toutes les entrées du formulaire dans mon model Contact).
Je vous demande cela car c'est la première fois que je met cela en place
et je ne voudrais pas me retrouver avec des Bugs de toutes parts.
En tous les cas merci.
Je suis toujours en attente de renseignements, si quelqu un passe par là...
Merci à vous et bonne journée