Bonjour,

j'ai un probleme avec le plugin SwiftMailer je l'ai installer sur mon site et quand j'essaye d'envoyer un mail j'ai cette erreur qui apparait

le lien du plugin https://swiftmailer.symfony.com

Warning: require(Swift_SmtpTransport.php): failed to open stream: No such file or directory in C:\xampp\htdocs\application\model\class\autoload.php on line 8 Fatal error: require(): Failed opening required 'Swift_SmtpTransport.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\application\model\class\autoload.php on line 8

Le code de ma page autoload.php

<?php 

    spl_autoload_register('autoload');

        function autoload($class) {

            require "$class.php";

        }

Le code me permettent d'envoier des mails

require_once('vendor/autoload.php');

            // Create the Transport
            $transport = (new Swift_SmtpTransport('smtp.mailtrap.io', 2525))
              ->setUsername('261b85981ae93b')
              ->setPassword('4b0c9d5367d1ce');

            // Create the Mailer using your created Transport
            $mailer = new Swift_Mailer($transport);

            // Create a message
            $message = (new Swift_Message('Wonderful Subject'))
              ->setContentType("text/html")
              ->setFrom(['john@doe.com' => 'John Doe'])
              ->setTo(['receiver@domain.org' => 'A name'])
              ->setBody('sd');

            // Send the message
            $result = $mailer->send($message);

            var_dump($result);

5 réponses


Utilise composer :

composer require "swiftmailer/swiftmailer:^6.0"

ensuite

require_once 'vendor/autoload.php';

C'est carrément plus simple et SwiftMailer est prévu pour être installé via composer...
Attention, il faut disposer de php > 7 pour SwiftMailer.

Motel
Auteur

Bonjour Digivia

c'est ce que j'ai fait j'ai installé SwiftMailer avec composeur. Vu que j'utilise un autre autoloader pour mes pages je sais pas si c'est en conflit avec l'autoload de composer ?

Motel
Auteur

je viens de voir qu'on fait quand je fais un appel de la class Swift_SmtpTransport ça recherche la classe dans mon autoload que j'ai créé et non dans l'autoload de composer pourtant dans mon code j'ai bien ajouter require_once('vendor/autoload.php'); ?

Je te conseille, si cela ne marche vraiment pas, d'installer postfix où d'ailleur Grafikart a fait un super tuto sur ce sujet ([https://www.youtube.com/watch?v=FmNX9YVNJ-w]())

@Agafra, il utilise le serveur smtp.mailtrap.io, donc le problème vien pas du faite qu'il n'as pas de serveur mail, il en utilise un distant. Même si je peux recommander maildev qui selon moi est plus pratique.
@Motel, ton erreur parle d'un problème d'autoload, il n'arrive pas à charger Swift_SmtpTransport.php, en cherchant un peu sur internet, le chemin que génère ton autoload fait maison ne récupère pas le bon chemin de Swift_SmtpTransport.php.

Si tu veux un conseil à propos de l'autoload, tu peux utiliser l'autoload de composer pour gérer t'es namespaces pour ton site vu que c'est du MVC.
Comme par exemple ajouter ceci dans composer.json :

"autoload": {
    "psr-4": {
      "App\\": "app/src/",
    }
},

Ici je défini le namespace App pour le dossier app/src par exemple, hésite pas à checker la doc, si jamais grafikart en parle brièvement sur sa vidéo de slim 3.
Mon framework favori au passage ;)