SOS mes mails ne partent pas avec Symfony

Ahah, encore un truc que je n’ai pas demandé, mais qui a changé avec Symfony.

Historiquement avec Symfony quand je voulais envoyer un email, par exemple suite à une inscription sur mon site (validation de compte quoi). J’utilise MailerInterface, je peuple mon instance et paf, j’envoie avec la méthode :

$mailer->send();

et zou c’est parti.

Que nenni mon ami, depuis la version 7, il semblerait que ce n’est plus le fonctionnement standard. Il stocke plutôt les messages en BDD via Messenger et les envoie de manière async. Cela part d’une bonne attention, le fait d’éviter les fonctionnements synchrones. En effet, on envoie une notification de création de message, stocké en BDD, puis un worker passe régulièrement pour faire une partie des envois, de manière régulière.

Mais le problème, c’est encore le fonctionnement sur des hébergements mutualisés qui ne nous permettent pas toujours d’avoir accès à ce genre d’outils. (WIP, je vais creuser ça).

Résoudre ça

Pour résoudre ça rapidement, il est possible de faire une rustine ici :

config/package/messager.yaml

au niveau de routing, commentez cette ligne:

# FIXME check for worker in my host
Symfony\Component\Mailer\Messenger\SendEmailMessage: async

Et on n’oublie pas le petit fixme, pour revoir ça plus tard.

Exemple de code pour test

Si vous voulez tester rapidement, vous pouvez créer, si ce n’est déjà fait, un MailController qui va se charger de tout les envoie de mail que je forward sur une route spécifique. C’est ce que je fais dans mes projets afin de séparer les responsabilités.

Dans mon MailController, je crée une route de test (à supprimer en sûr).

   #[Route('/mail_test', name: 'mail_test')]
    public function mailTest(MailerInterface $mailer)
    {
        
        if ($_ENV["APP_ENV"] == 'dev') {

            // create new emailObject
            $email = (new Email())
                ->from('test@test.com')
                ->to("client@client.com")
                ->subject("Mail de test")
                ->text(
                    "Bonjour je suis un mail de test"
                )
                ->html(
                    "<h2>Bonjour je suis un mail de test mais en HTML</h2>"
                );

            // send it via mailerInterface
            $mailer->send($email);
            // dd($email);

        }
        // redirect to home anyway
        return new RedirectResponse("/");
    }

Mise en place de Sphinx pour générer de la doc/Cours

1. Install rst2pdf
    - use your package manager (or)
    - pip install rst2pdf (or)
    - easy_install rst2pdf

2. Add rst2pdf to the list of extensions in conf.py

   

extensions = ['rst2pdf.pdfbuilder']



    This list will be empty if you accepted the defaults when the project was setup. If not, just append 'rst2pdf.pdfbuilder' to the list.


3. Add a pdf_documents variable to conf.py

  pdf_documents = [('index', u'rst2pdf', u'Sample rst2pdf doc', u'Your Name'),]
  # index - master document
  # rst2pdf - name of the generated pdf
  # Sample rst2pdf doc - title of the pdf
  # Your Name - author name in the pdf

4. Generate pdf
  

sphinx-build -b pdf source build/pdf



   The generated pdf will be in the build/pdf directory. 

Déployer son site Symfony sur un serveur Mutualisé

Il y a 2 ou 3 petites choses à faire, mais rien de bien sorcier, par contre la ressource n’est pas facilement trouvable sur le net.

Je vous conseille avant toute chose, de cloner votre projet dans un autre répertoire, il peut y avoir un risque de pétage de projet.

Tout d’abord, il faut faire un dump de votre environnement grâce à la commande :

composer dump-env prod

Une fois fait, vous vous retrouvez avec un fichier env.php qui contient un tableau associatif avec les accès BDD, serveur mail, etc. (ce qui se trouvait dans env.php). Pensez à mettre a jour avec vos identifiants BDD, serveur SMTP

Ensuite, passez en prod et relancez le composer install qui va ne prendre que les dépendances de la prod (pas de web profile, fixtures, etc.)

Une fois fait, vous devez ajouter 2 fichiers .htaccess. Un à la racine du site, le second dans le répertoire public.

Voici le contenu de celui à la racine, qui en gros redirige les requêtes vers le répertoire public en les passant en https.

RewriteEngine on

RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]

Et celui à mettre dans public qui va faire les branchements avec le moteur de Symfony


<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]

   
    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 307 ^/$ /index.php/

    </IfModule>
</IfModule>

une fois fait, envoyez ça sur votre hébergement et normalement ça marche. En cas de problème, pensez à virer le cache, le plus facile c’est d’aller dans var et de renommer le répertoire prod en prod_ (c’est plus rapide, car il contient des centaines de fichiers)

Fichier robots.txt et autre ads avec Symfony

Comme vous le savez, une bonne pratique est d’ajouter un fichier robots.txt pour indiquer vos préférences en terme de crawler (enfin quand c’est pris en compte) idem si vous utilisez une régie de pub (ads.txt).

Pour qu’il soit visible dans un projet Symfony, il faut les placer dans le dossier public.

CKEDITOR avec FOSCkE ne fonctionne plus

Alors il semblerais que cela fasse partie de la nouvelle stratégie de CKEditor (pour faire acheter + de licence) et c’est un peu moche. C’est que des que l’ont va vouloir passer à l’installe de la derniere versio de FOSCKEditor pour Symfony, le message suivant d’affiche dans la console :

[CKEDITOR] Error code: invalid-lts-license-key.

La solution est trivial, mais pas top, il suffit de passer CKEditor à une version ultérieure, mais bon, c’est moins sécure.

php bin/console ckeditor:install --tag=4.22.1

Il vous demande si vous voulez garder l’install(keep) ou recommencer(drop). Vous dropper, puis relancer la commande install:

php bin/console assets:install public

En esperant qu’une solution soit trouver, sinon il faudra trouver un éditeur WYSIWYG alternatif. J’ai testé des trucs (editorJS), je documenterais ici une fois maitrisé.

Ajouter une variable d’environnement sous Windows 10

Sous windows 10 (mais c’est à peu près la même chose sur les autres windows), cliquez sur le bouton démarrer ou la touche win et tapez « variable ».

Cliquez dessus sur le lien

Puis variable d’environnement en bas

Double cliquez sur Path ou une fois selection cliquez sur « Modifier ».

Selectionner la variable à ajouter, dans mon cas c’est PHP.

Donc « Nouveau » puis entrez l’URI du fichier, le plus simple c’est de le copier depuis l’explorateur Windows

Coller ici

Une fois ajouté, valider toute les fenetres (ok, ok,ok ), puis redemarer votre terminal, si tout c’est bien passé, vous devrez pouvoir appeler votre programme directement.

Raccourcie Windows

Ctrl + Backspace Supprime le mot entier situé à gauche du curseur

Ctrl + C Copie un texte, une image, un fichier sélectionné dans le presse-papier (Copier).

Ctrl + D Permet de supprimer un document, un élément.

Ctrl + F Rechercher dans le fichier, dans une page web

Ctrl + Delete Supprime un mot à la droite du curseur

Ctrl + ou (droite ou gauche) Permet de déplacer le curseur en sautant un mot à la fois.

Ctrl + N Permet d’ouvrir une nouvelle fenêtre ou de créer un nouveau fichier (Nouveau).

Permet de déplacer le curseur en sautant un mot à la fois.Ctrl + O Permet d’ouvrir la fenêtre d’ouverture de fichier (Ouvrir).

Ctrl + P Permet d’ouvrir la fenêtre d’impression.

Ctrl + Q Permet de quitter l’application (Quitter).

Ctrl + S Permet de sauvegarder un document qui a déjà été sauvegardé (Sauvegarder).

Ctrl + shift + S Permet de sauvegarder sous un document, ouvre la dialogue box.

Ctrl + V Colle un texte, une image, un fichier présent dans le presse-papier.

Ctrl + W Permet de fermer une fenêtre ou un document.

Ctrl + o Permet d’ouvrir un fichier (dialogue box)

Ctrl + A Selection tout (dans un doc, l’explorateur Windows)

Ctrl + X Coupe un texte, une image, un fichier sélectionné : copie dans le presse-papier et suppression.

Ctrl + Z Annuler l’action précédente, ou annuler la frappe d’un texte, marche aussi en cas d’erreur de déplacement ou de suppression de fichier.

F2 Permet de renommer un fichier

Connexion entre MySQL et Pentaho

Pour utiliser Pentaho, qui est d’ailleurs en super logiciel, avec une base de données MySQL, il suffit d’aller chercher sur le site de l’éditeur le driver qui va bien.

Une fois sur le site de l’éditeur, sélectionnez connector/j

Puis Plateform independant

On dézippe le fichier télécharger et on repère celui qui s’appelle mysql-connector-java-8.X.XX (XX pour la version, sera sûrement différent pour vous)