Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Unable to open file for reading [4.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Unable to open file for reading
    Bonjour à tous,
    Je suis en train de réaliser une application Web avec synfony 4.2.5.
    La seule chose qui ne fonctionne pas en production c est l'envoie d'un fichier PDF par email avec swiftmailer.
    En développement tout se passe très bien mais une fois en production j'ai l erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to open file for reading
    Pourtant les droits du répertoire de destination sont en 777.
    Pourquoi une fois sur mon serveur de test (raspberry pi 3 b+) cela ne fonctionne plus tout d'un coup ?
    Avec vous une piste ?
    Merci

    Vincent

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Indications
    Je souhaiterai juste préciser certains détails qui me semblent important.
    En premier la phase de développement c est faite sur mon pc en local.
    Et pour finir mon serveur de test est une raspberry pi3 b+ (donc petit processeur et peu de ram ,1go).
    Les deux systèmes tournent sous debian respectivement 9 et 10.
    J ai bien une petite hypothèse quand à cette erreur. Je pense que je n'ai peut être pas assez de ressources pour attacher le PDF en mail.
    Cependant, le PDF est bien affiché sur le navigateur que je le demande à mon application.
    Un petit htop (pour voir la conso de ram et des 4 coeurs du processeur) ne montre pas de hausse significative et durable de la consommation des ressources.
    Donc la je suis un peu perdu.
    Merci de votre aide.

    Vincent

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 255
    Points : 428
    Points
    428
    Par défaut
    Salut,

    D'après Internet, ça peut vouloir dire soit que le fichier n'existe pas à l'endroit où tu essayes de le récupérer pour le joindre au main, soit que tu n'utilises pas le chemin absolu : https://stackoverflow.com/a/39614627

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Le même code
    Bonjour _Thomas ravi de vous revoir et merci de m'aider à nouveau,
    Alors le code est le même sur ma machine est sur mon serveur.
    Je comprends bien que le fichier n'est pas trouvé mais je ne sais pas pourquoi car le pdf est bien généré à la volé avec FPDF mais il n'est pas créé avec l'envoi par email.
    Je vous donne le code de mon controller qui gere les pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php
    namespace App\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use App\Entity\Vehicule;
    use App\Repositoty\VehiculeRepository;
    use App\Entity\Reparation;
    use App\Repositoty\ReparationRepository;
    use FPDF;
     
    /**
     * @Route("/profile")
     */
     
    class PdfController extends AbstractController
    {
      /**
        * @Route("/pdf/{id}", name="fiche_vehicule")
        */
        public function historiqueReparations($id)
        {
          $ressourceRepository = $this->getDoctrine()->getRepository(Reparation::class);
          $reparations = $ressourceRepository->findRepByVehicule($id);
          require_once('../FPDF/fpdf.php');
          header('Content-Type: application/pdf');
          $pdf = new FPDF();
          $pdf->AddPage();
          $pdf->SetFont('Arial','B',8);
          $idRep = 1;
          //$pdf->Cell();
          foreach ($reparations as $reparation)
          {
              $pdf->Ln(7);
              $pdf->Cell(40,10, $idRep." : ". utf8_decode($reparation->getAFaire())." : ". $reparation->getEffectuerLe()->format('d-m-Y H:i'));
              $idRep++;
          }
          $pdf->Output();
          ob_end_clean();
          return new Response($pdf->Output(), 200, array('Content-Type' => 'application/pdf'));
        }
     
        /**
          * @Route("/pdfsending/{id}", name="fiche_vehicule_sending")
          */
          public function historiqueReparationsSending($vehicules)
          {
            header('Content-Type: application/pdf');
            $pdf = new FPDF();
            foreach($vehicules as $vehicule)
            {
              $id = $vehicule->getId();
              $immat = $vehicule->getImmatriculation();
              $ressourceRepository = $this->getDoctrine()->getRepository(Reparation::class);
              $reparations = $ressourceRepository->findRepByVehicule($id);
              $pdf->AddPage();
              $pdf->SetFont('Arial','B',8);
              $idRep = 1;
              $pdf->Ln(7);
              $pdf->Cell(40,10, utf8_decode("fiche du véhicule : $immat"));
              foreach ($reparations as $reparation)
              {
                  $pdf->Ln(7);
                  $pdf->Cell(40,10, $idRep." : ". utf8_decode($reparation->getAFaire())." : ". $reparation->getEffectuerLe()->format('d-m-Y H:i'));
                  $idRep++;
              }
            }
     
          $name = "FicheSuiviVehicule.pdf";
          //$CheminFichier = "../fichesVehiculesPdf/";
            //$pdf->Output(, 'F');
          // ob_end_clean();
     
            return new Response ($pdf->Output('F', $name));
          }
    }
    ?>
    Et le code qui géré l'attachement du fichier pdf au mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php
     
    namespace App\Controller;
     
    use App\Entity\Email;
    use App\Entity\Client;
    use App\Form\EmailType;
    use App\Repository\EmailRepository;
    use App\Repository\ClientRepository;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
     
    /**
     * @Route("/email")
     */
    class EmailController extends AbstractController
    {
        /**
         * @Route("/new", name="email_new", methods={"GET","POST"})
         */
        public function new(Request $request, \Swift_Mailer $mailer, ClientRepository $clientRepository): Response
        {
            $email = new Email();
            $form = $this->createForm(EmailType::class, $email);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
              $email->setDateEmission(new \DateTime('now'));
              $sujet = $form->get('sujet')->getData();
              $priorite = strtoupper($form->get('priorite')->getData());
              $emetteur = $form->get('emetteur')->getData();
              $destinataireOrigine = $form->get('destinataire')->getData(); // le DO est en fait une collection au format brute
              //$ressourceRepository = $this->getDoctrine()->getRepository(Client::class);
              $destinataireTab = explode(" ", $destinataireOrigine->first(), 2);
              $destinataire = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getEmail();
              $corps = $form->get('corps')->getData();
     
                if($form->get('EnvoyerFormulaireDuVehicule')->getData())
                {
                  $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody($corps .
                     '<br><br>' .
                     'Ce mail contient les fiches de suivi du vehicule'.
                     '<HR>' .
                     '<br>'.
                     '<small><i>Ce mail vous est envoyé avec l\'application Web FollowCarService, l\'efficacité au service de la simplicité<br>
                     Vous souhaitez vous renseigner sur FollowCarService ? => adresse email <b>|</b> num tel</i></small>',
                        'text/html'
                    )
                    ->setContentType('application/pdf');
                  //  $attachment = \Swift_Attachment::fromPath("../fichesVehiculesPdf/FicheSuiviVehicule_$id.pdf");
                    $vehicules = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getVehicules();
                    $this->forward('App\Controller\PdfController::historiqueReparationsSending',['vehicules'=>$vehicules]);
                    $attachment = \Swift_Attachment::fromPath('FicheSuiviVehicule.pdf', 'application/pdf');
                    $message->attach($attachment);
                }
                else {
                  //$pathDebug = getcwd() . "\n";
                  $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody($corps .
                     '<br><br>' .
                     '<HR>' .
                     '<br>'.
                     '<small><i>Ce mail vous est envoyé avec l\'application Web FollowCarService, l\'efficacité au service de la simplicité<br>
                     Vous souhaitez vous renseigner sur FollowCarService ? => adresse email <b>|</b> num tel</i></small>',
                        'text/html'
                    );
                }
     
            $mailer->send($message);
     
            $this->addFlash(
                  'notice',
                  "Votre message a bien été envoyé à l'adresse : $destinataire"
              );
                if($form->get('EnvoyerFormulaireDuVehicule')->getData()){
                  unlink('FicheSuiviVehicule.pdf');
                }
            }
     
            return $this->render('email/new.html.twig', [
                'email' => $email,
                'form' => $form->createView(),
            ]);
        }
    }
    voila en esperant que cela vous eclairera plus que moi

    Merci de votre aide

    Vincent

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 255
    Points : 428
    Points
    428
    Par défaut
    D'après le lien stackoverflow envoyé dans mon message précédent ou encore dans les exemples de la doc officielle (ICI), il faut passer un chemin absolu pour indiquer où se trouve le fichier à joindre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $attachment = \Swift_Attachment::fromPath('/chemin/absolu/vers/FicheSuiviVehicule.pdf', 'application/pdf');

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut cela ne fonctionne pas
    Bonsoir _Thomas,
    J'i la même erreur avec le chemin absolu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to open file for reading [/var/www/html/public/FicheSuiviVehicule.pdf]
    Je pense que le pdf n'est pas généré. Pour quelle raison ? je ne sais pas.

    Merci de votre aide

    Vincent

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 255
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par agi.v Voir le message
    Je pense que le pdf n'est pas généré.
    Est-ce qu'il y a un fichier généré dans /var/www/html/public ?
    Si oui, vérifie éventuellement les droits d'accès du fichier. Sinon, d'après la doc de FPDF pour sauvegarder le fichier il faut passer des paramètres spécifique à la méthode "Output" (http://www.fpdf.org/fr/doc/output.htm).

    Attention cependant il semblerait que la doc ne soit pas à jour et que l'ordre des paramètres soit plutôt celui-ci dans la dernière version (cf. http://www.fpdf.org/phorum/read.php?f=1&i=59821&t=59821) : $pdf->Output($filename,'F');

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Fichier
    Bonsoir,
    Les droits du répertoire public sont en 777 et dans le dossier public je n ai pas le fichier PDF sur mon serveur de test alors que sur mon pc oui.
    Je suis dans l incompréhension....
    Merci de prendre du temps pour m aider

    Vincent

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 533
    Points : 935
    Points
    935
    Par défaut
    salut,
    ton fichier pdf est situé hors de la racine du serveur Web( le dossier public) il est donc impossible d'y accéder.
    Pour lire ce fichier pdf tu peux utiliser l'url absolue ( http://domaine.com/pdfsending/1 ) ) qui appelle ta méthode de génération de pdf. Brèf ton fichier pdf accessible est http://domaine.com/pdfsending/1 .

    Avec SF, pour générer une url absolue de la route fiche_vehicule_sending:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $idVehicule = 1; //id du véhicule
    $urlPdf = $this->router->generateUrl(
        'fiche_vehicule_sending',
        ['id' =>  $idVehicule ],
        UrlGeneratorInterface::ABSOLUTE_PATH
    );
    //   http://domaine.com/pdfsending/1
    https://symfony.com/doc/4.1/routing....-absolute-urls
    Tu peux maintenant joindre url du pdf généré à ton mail.
    T'as plus besoin de faire un $this->forward('App\Controller\...' ) vers ton action historiqueReparationsSending.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Je ne comprends pas bien
    Bonjour Armel18,
    Je ne comprends pas bien cette méthode, génére-t-elle juste une URL absolue ? Pouvez vous m'en dire plus sur cette action afin que je puisse l'intégrer ?
    et pourquoi cela marche -til sur mon pc et pas sur mon serveur ?
    Mercid e votre aide

    Vincent

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut J'ai finalement compris
    Bonjour Armel18,
    Merci de votre renseignement sur smfony et le generateur d'URL
    Je vais essayer de l'implémenter de suite et je vous tiens au courant.
    Mais supposont que ce ne soit pas le chemin le probleme mais autre chose (je ne sais pas) auriez vous une autre priste ?

    Merci

    Vincent

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Une nouvelle erreur
    Bonjour Armel18 et _Thomas
    Je viens d'essayer la solution proposée par armel18 et malgrè le fait d'avoir mis le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
    j'obtiens malgrès tout cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined property: App\Controller\EmailController::$router
    voici le code de la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
      /**
         * @Route("/new", name="email_new", methods={"GET","POST"})
         */
        public function new(Request $request, \Swift_Mailer $mailer, ClientRepository $clientRepository): Response
        {
            $email = new Email();
            $form = $this->createForm(EmailType::class, $email);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
              $email->setDateEmission(new \DateTime('now'));
              $sujet = $form->get('sujet')->getData();
              $priorite = strtoupper($form->get('priorite')->getData());
              $emetteur = $form->get('emetteur')->getData();
              $destinataireOrigine = $form->get('destinataire')->getData(); // le DO est en fait une collection au format brute
              //$ressourceRepository = $this->getDoctrine()->getRepository(Client::class);
              $destinataireTab = explode(" ", $destinataireOrigine->first(), 2);
              $destinataire = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getEmail();
              $corps = $form->get('corps')->getData();
     
                if($form->get('EnvoyerFormulaireDuVehicule')->getData())
                {
                  $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody($corps .
                     '<br><br>' .
                     'Ce mail contient les fiches de suivi du vehicule'.
                     '<HR>' .
                     '<br>'.
                     '<small><i>Ce mail vous est envoyé avec l\'application Web FollowCarService, l\'efficacité au service de la simplicité<br>
                     Vous souhaitez vous renseigner sur FollowCarService ? => </small>',
                        'text/html'
                    )
                    ->setContentType('application/pdf');
                  //  $attachment = \Swift_Attachment::fromPath("../fichesVehiculesPdf/FicheSuiviVehicule_$id.pdf");
                    $vehicules = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getVehicules();
     
                    $ficheSuiviVehicule = $this->router->generateUrl(
                      'fiche_vehicule_sending',
                      ['vehicules' =>  $vehicules ],
                      UrlGeneratorInterface::ABSOLUTE_PATH
                    );
     
                    $attachment = \Swift_Attachment::fromPath($ficheSuiviVehicule, 'application/pdf');
                    $message->attach($attachment);
                }
                else {
                  //$pathDebug = getcwd() . "\n";
                  $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody($corps .
                     '<br><br>' .
                     '<HR>' .
                     '<br>'.
                     '<small><i>Ce mail vous est envoyé avec l\'application Web FollowCarService, l\'efficacité au service de la simplicité<br>
                     Vous souhaitez vous renseigner sur FollowCarService ? =>  <b>|</b> </i></small>',
                        'text/html'
                    );
                }
     
            $mailer->send($message);
     
            $this->addFlash(
                  'notice',
                  "Votre message a bien été envoyé à l'adresse : $destinataire"
              );
                if($form->get('EnvoyerFormulaireDuVehicule')->getData()){
                  //unlink('FicheSuiviVehicule.pdf');
                }
            }
     
            return $this->render('email/new.html.twig', [
                'email' => $email,
                'form' => $form->createView(),
            ]);
        }
    Je ne comprends pas très bien pourquoi cette erreur survient.
    Merci

    Vincent

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 533
    Points : 935
    Points
    935
    Par défaut
    désolé c'est plutôt $this->generateUrl et pourtant j'ai posté un lien sur la doc SF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $idVehicule = 1; //id du véhicule
    $urlPdf = $this->generateUrl(
        'fiche_vehicule_sending',
        ['id' =>  $idVehicule ],
        UrlGeneratorInterface::ABSOLUTE_PATH
    );
    //   http://domaine.com/pdfsending/1
    Je ne comprends pas bien cette méthode, génére-t-elle juste une URL absolue ? Pouvez vous m'en dire plus sur cette action afin que je puisse l'intégrer ?
    et pourquoi cela marche -til sur mon pc et pas sur mon serveur ?
    sur ton pc as-tu un serveur de mails qui envoie les messages à destination d'une adresse mail?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut ?
    Bonsoir armel18,
    sur mon pc un serveur de mail ? non pas a ma connaissance. en tout cas je n'en ai pas installé (debian 9)
    Je vais regardé plus précisement la doc de symfony que vous m'avez donné.
    Merci beaucoup je vous tiens au courant !

    Vincent

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut cela ne fonctionne pas
    Bonsoir armel18,
    Je suis navré de vous l'ecrire mais votre solution ne fonctionne pas chez moi même en dev sur mon pc. voici l'erreur.
    Unable to open file for reading [/profile/pdfsending/1]
    Je suis sûr que le fichier pdf n'est pas généré.
    Mais merci de votre aide car grace a vous j'ai pu commencer à apprendre les url avec symfony 4
    Une autre piste ?

    Vincent

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 533
    Points : 935
    Points
    935
    Par défaut
    En se basant sur le code qui fonctionnait en local, j'ai factorisé ton code question d'avoir peu de lignes à lire.
    Le chemin vers les fichiers peut être déclaré en tant que paramètre dans config/services.yaml.
    Dans l'exemple suivant le fichier pdf se trouve dans src/Controller( normalement le dossier src n'est censé que contenir les fichiers PHP mais pour ne pas trop se compliquer la tâche on laisse pour l'instant les fichiers pdf dans src/Controller/).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # config/services.yaml
    parameters:
        #chemin du dossier des fichiers pdf( ex: src/Controller )
        dossier_fiches: '%kernel.project_dir%/src/Controller'  # <- ici
    Pour récupérer ce chemin dans un contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $dossierFiches =$this->getParameter("dossier_fiches");
    dump( $dossierFiches );

    Du coup après modification le contrôleur devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    /**
     * @Route("/email")
     */
    class EmailController extends AbstractController
    {
        /**
         * @Route("/new", name="email_new", methods={"GET","POST"})
         */
        public function new(Request $request, \Swift_Mailer $mailer, ClientRepository $clientRepository): Response
        {
     
     
            $email = new Email();
            $form = $this->createForm(EmailType::class, $email);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $email->setDateEmission(new \DateTime('now'));
                $sujet = $form->get('sujet')->getData();
                $priorite = strtoupper($form->get('priorite')->getData());
                $emetteur = $form->get('emetteur')->getData();
                $destinataireOrigine = $form->get('destinataire')->getData(); // le DO est en fait une collection au format brute
                $destinataireTab = explode(" ", $destinataireOrigine->first(), 2);
                $destinataire = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getEmail();
                $corps = $form->get('corps')->getData();
     
                $message = (new \Swift_Message($priorite . ':' . $sujet))
                    ->setFrom($emetteur)
                    ->setTo($destinataire)
                    ->setReplyTo($emetteur)
                    ->setBody(
                        $this->renderView(
                         // templates/emails/envoie_fiche.html.twig
                            'emails/envoie_fiche.html.twig',
                            ['corps' => $corps ] // transmission de la variable corps dans la vue
                        ),
                        'text/html'
                    );
     
                if($form->get('EnvoyerFormulaireDuVehicule')->getData())
                {
                    /*
                     * chemin vers le dossier contenant les fichiers pdf.
                     * Ce chemin est declaré en tant que paramètre dans
                     * config/services.yaml.
                     */
                    $dossierFiches =$this->getParameter("dossier_fiches");
                    $fiche = $dossierFiches . '/FicheSuiviVehicule.pdf';//src/Controller/FicheSuiviVehicule.pdf;
     
                    $vehicules = $clientRepository->findOneBy($critaires = array('nom' => $destinataireTab[0],'prenom' => $destinataireTab[1]))->getVehicules();
                    $this->forward('App\Controller\PdfController::historiqueReparationsSending',['vehicules'=>$vehicules]);
                    $attachment = \Swift_Attachment::fromPath($fiche, 'application/pdf');
                    $message->attach($attachment);
     
                }
     
                $mailer->send($message);
     
                $this->addFlash(
                    'notice',
                    "Votre message a bien été envoyé à l'adresse : $destinataire"
                );
                if($form->get('EnvoyerFormulaireDuVehicule')->getData()){
                    unlink($fiche);
                }
            }
     
            return $this->render('email/new.html.twig', [
                'email' => $email,
                'form' => $form->createView(),
            ]);
        }
     
     
    }
    Pour plus de lisibilité j'ai séparé le texte du message dans un fichier à part(templates/emails/envoie_fiche.html.twig) :
    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    {# templates/emails/envoie_fiche.html.twig #}
     
    {# texte envoyé depuis le formulaire #}
    {{ corps }}
     
     
    <br><br>
    Ce mail contient les fiches de suivi du vehicule.
    <hr>
    <br>
    <small><i>Ce mail vous est envoyé avec l'application Web FollowCarService, l'efficacité au service de la simplicité<br>
    Vous souhaitez vous renseigner sur FollowCarService ? => adresse email <b>|</b> num tel</i></small>

    Si ça ne marche toujours pas , essaie l'envoie de mail avec un fichier pdf de petite taille.

    Pour tester en local tu peux utiliser maildev qui est un vrai serveur SMTP permettant d'intercepter les emails .
    Après il y a également mailtrap, un service en ligne qui permet de capturer tous les emails, les inspecte et les débogue.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Cela fonctionne
    Bonjour armel18,
    Alors premiere bonne nouvelle ! cela fonctionne en local. Je vous tiens au courant pour le serveur de test dans 1h ou 2h.
    Merci grandement a vous armel18

    Vincent

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2014
    Messages : 57
    Points : 21
    Points
    21
    Par défaut Parfait !
    Bonjour à tous !
    Alors excellente nouvelle ! cela fonctionne très bien avec la solution de armel18 !
    Merci beaucoup a vous tous !!!!!

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/07/2010, 15h28
  2. Linker error: unable to open file
    Par pasqual dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/06/2007, 08h22
  3. PB dernière minute : Unable to open file :file.dfm
    Par kurkaine dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/09/2006, 13h40
  4. Erreur: unable to open file "DCLUSR.LIB"
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2006, 20h33
  5. Unable to open file 'DSGNINTF.OBJ'
    Par chamamo dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2006, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo