Problème envois de mail avec un Job

Par Baptiste Contreras, il y a 7 ans


Bonjour,

Voila j'ai développé un site avec Laravel 5.5.
Dessus j'ai une page qui permet de lire un fichier CSV et d'envoyer un mail aux personnes dedans, j'ai voulu mettre cette partie dans un Job. en localhost pas de soucis, le fichier est upload, un coup de "php artisan queue:work" et le job est traité sans erreur, les email sont bien envoyé.
J'ai ensuite décidé de mettre mon site en production sur un mutualisé d'OVH :
l'email pour le mot de passe perdu marche, aucun soucis, mais lorsque je me rend sur ma page qui s'occupe du CSV, le fichier s'upload, le Job est traité sans erreur mais aucun email .

Ce que j'ai fait

pour essayer de comprendre le problème j'ai essayé de nombreuses choses comme :

Voici ma config dans le .env

QUEUE_DRIVER=database MAIL_DRIVER=mail MAIL_HOST=smtp.mydomain MAIL_PORT=587 MAIL_USERNAME=username@mydomain MAIL_PASWWORD = **** MAIL_ENCRYPTION=false pretend=false

Ma ligne dans le Controller qui crée le Job

$this->dispatch(new LinkUsers($ELO_task)); //* new job here

La partie dans le Job qui envois les email

Mail::getSwiftMailer()->registerPlugin(new \Swift_Plugins_AntiFloodPlugin(50, 61)); if ($BOOL_new1){ Mail::to($ELO_usr1->email)->send(new InvitationMail($ELO_usr1->name,$ELO_usr1->fname,$ELO_usr1->id)); }else{ Mail::to($ELO_usr1->email)->send(new RequestParticipationMail($ELO_usr1->name,$ELO_usr1->fname)); } if ($BOOL_new2){ Mail::to($ELO_usr2->email)->send(new InvitationMail($ELO_usr2->name,$ELO_usr2->fname,$ELO_usr2->id)); }else{ Mail::to($ELO_usr2->email)->send(new RequestParticipationMail($ELO_usr2->name,$ELO_usr2->fname)); }

Le fichier RequestParticipationMail.php

<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class InvitationMail extends Mailable { use Queueable, SerializesModels; /** * @var */ public $name; /** * @var */ public $fname; public $id; /** * Create a new message instance. * * @return void */ public function __construct($name, $fname,$i) { // $this->name = $name; $this->fname = $fname; $this->id = $i; } /** * Build the message. * * @return $this */ public function build() { return $this ->from("noreply@mydomain") ->markdown('mail.invitation'); } }

Le fichier InvitationMail.php

<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class RequestParticipationMail extends Mailable { use Queueable, SerializesModels; /** * @var */ public $name; /** * @var */ public $fname; /** * Create a new message instance. * * @return void */ public function __construct($name, $fname) { $this->name = $name; $this->fname = $fname; } /** * Build the message. * * @return $this */ public function build() { return $this ->from("noreply@mydomain") ->markdown('mail.notificationNewEvaluation');

Ce que je veux

Je voudrai pouvoir envoyer des email dans le Job

Voila, merci a ceux qui prendront le temps de m'aider !

4 réponses

Grafikart, il y a 7 ans

Peut être la configuration du mode ligne de commande de PHP est différente de la version web. Tu arrive à envoyer un email via smtp en ligne de commande depuis OVH (avec un script php simple) ?

Baptiste Contreras, il y a 7 ans

Bonsoir et merci de m'avoir répondu !

Pour tester ca je fais un petit script qui appele la fonction mail de php et je le lance en ligne de commande ?

Grafikart, il y a 7 ans

Utilise plutôt swiftmailer si tu veux utiliser un serveur SMTP mais c'est l'idée oui

Baptiste Contreras, il y a 7 ans

Je viens de tester le script suivant :

<?php require_once "swift_required.php"; //* J'ai télécharger la lib SwiftMailer et j'ai mis mon script dans le dossier $aMailsDest = array("monadresse@gmail.com"=>"test"); // SMTP $transport = Swift_SmtpTransport::newInstance("smtp.mydomain.com", 587) ->setUsername("noreply@mydomain.com") ->setPassword("****"); $mailer = Swift_Mailer::newInstance($transport); $message = Swift_Message::newInstance() ->setSubject("test mail") ->setFrom(array("noreply@mydomain.com" => "Nom de l expediteur")) ->setTo($aMailsDest) ->setBody("<h1>test email</h1>"); $type = $message->getHeaders()->get("Content-Type"); $type->setValue("text/html"); $type->setParameter("charset", "utf-8"); $result = $mailer->send($message); echo $result;

Je l'ai testé sur mon ordinateur, le mail a bien été envoyé sur mon adresse mail, mais lorsque je l'ai testé sur le serveur OVH, je n'ai recu aucun mail et je n'ai eu aucune erreur, et le "echo $result;" n'affiche rien.