• Docker
  • Envoi de mails par SMTP externe

Hello mondédié !

J'ai une colle pour vous, après m'être pris la tête sans avoir résolu le soucis (peut-être que j'ai trop la tête dans le guidon pour trouver une solution simple), je vous la colle aussi. Dès fois que ça serve à quelqu'un (mais aussi à moi je l'avoue) si on trouve la réponse.

En gros, j'ai une solution php maison, qui envoie des mails lorsque certaines conditions sont remplies. Tout va bien en local, hein
Par contre, dès que j'emballe le tout dans un Docker minimaliste (base ubuntu avec seulement php7 et les modules dont j'ai besoin), le tout lié à un docker-compose classique (avec un nginx-proxy en frontal), tout fonctionne bien, sauf l'envoi des mails.
Je précise que pour envoyer les mails j'utilise "el famoso" phpmailer, mais également un smtp externe (google/gmail pour ne pas le citer, port 587 en suivant la doc et tout et tout)
Je suis incapable de trouver pourquoi les mails ne partent pas sachant que j'utilise (et veut utiliser) un smtp externe (donc l'idée c'est de ne pas installer un smtp bidon en local...)

Voili voilou, en espérant que quelqu'un ait déjà eu ce genre de soucis 😃
A vot' bon coeur 😃

Salut,

à tout hasard, est-ce que ton docker sait résoudre le nom de domaine ?
Tu peux le tester en rentrant dans le docker :

docker exec -it <nom de ton container> /bin/sh (ou /bin/bash si ça ne marche pas)

Puis tu tente un ping sur l'adresse, ou bien un curl http://adresse, et tu vois si il résoud bien le dns.

    Merrick Salut ,
    Alors pour pour ça pas de problème, de ce container je récupère déjà avec curl mon petit zip quotidien (distant) sur lequel je fait un traitement quotidien.
    J'ai vérifié quand même avec le "smtp.gmail.com" à partir du container et oui, c'est bon.

    Est-ce que le contenu d'installation de mon dockerfile pourrait aider au diagnostic ?

    Ce qui aiderait surtout c'est la configuration de ton phpmailer. Essaye de faire un test avec openssl sur le port 587 depuis ton conteneur, pour voir si ça bloque à ce niveau là.

    # mail.txt
    
    ehlo mailserver
    auth plain AHNhcmFoLmNvbm5vckBkb21haW4udGxkAHRlc3RwYXNzd2QxMg==
    mail from: <ton_adresse@gmail.com>
    rcpt to: <destinataire@domain.tld>
    data
    From: Tintwo <ton_adresse@gmail.com>
    To: Destinataire <destinataire@domain.tld>
    Date: Sat, 18 May 2018 10:00:00 +0200
    Subject: Test mail
    This is a test mail.
    
    .
    quit

    Remplace la chaine base64 (AUTH PLAIN) par la sortie de cette commande :

    echo -ne '\000ton_adresse@gmail.com\000ton_mot_de_passe' | openssl base64

    Et pour établir la connexion avec STARTTLS sur le port 587 :

    openssl s_client -ign_eof -connect smtp.gmail.com:587 -starttls smtp -crlf < mail.txt

    J'ai testé avec mon compte gmail, ça fonctionne bien. Si tu utilises une auth double facteur, il faut te générer un mot de passe unique pour ton application :

    https://security.google.com/settings/security/apppasswords

      Problème de NAT au niveau de ta box internet ?

      Hardware Salut,

      Alors j'ai testé comme tu me l'as conseillé (et bien changé les paramètres qui devaient être changés 🙂), mais ça ne fonctionne ni sur mon poste en local, ni sur mon dédié (@Ikoula pas ma box internet, c'est sur un dédié OVH), et donc ni dans le container.
      Le retour de la connexion est correct, incluant la session TLS, mais juste après j'ai :

      ---
      250 SMTPUTF8
      451 4.5.0 SMTP protocol violation, see RFC 2821 g192-v6sm16109049wmd.36 - gsmtp
      read:errno=0

      J'avoue que je suis décontenancé (sachant que mes mails partent bien en local à partir de mon script).
      Évidemment pour les comptes gmail testé je précise que je n'utilise pas la double auth.
      Je précise également que je n'utilise pas de parefeu sur ce dédié de test (donc pas la faute à fail2ban ou iptables)
      C'est le même cas chez mon pote (qui est sur un MacBookPro lui), moi étant sous Debian.
      Je cherche comme un dingue pour trouver un cas similaire concernant l'utilisation directe du smtp google/gmail pour l'envoie de mail à partir d'un container, mais chou blanc pour l'instant.

      Merci par avance pour l'aide.

        Tintwo Je cherche comme un dingue pour trouver un cas similaire concernant l'utilisation directe du smtp google/gmail pour l'envoie de mail à partir d'un container, mais chou blanc pour l'instant.

        Pourtant c'est le cas le plus simple. C'est ce qu'on utilise pour flarum justement. Sauf que c'est pas gmail mais notre serveur de mail, ce qui revient au même.

        Tintwo 51 4.5.0 SMTP protocol violation, see RFC 2821 g192-v6sm16109049wmd.36 - gsmtp

        Tu as fait une erreur dans la saisie des paramètres, le moindre changement par rapport à ce que j'ai écris peut provoquer une violation, donc faut mettre exactement ce que j'ai mis, jusqu'aux espaces entre les caractères. Genre <ton_adresse@gmail.com>, c'est pas juste ton_adresse@gmail.com ou < ton_adresse@gmail.com> ou < ton_adresse@gmail.com >

        Encore une fois, sans ta configuration phpmailer on peut pas t'aider du tout.

          Hardware Hello,
          Oui j'ai bien vu pour la saisie des paramètres et suivi ta marche à suivre, mais non, j'ai bien fait gaffe à tout même résultat.

          Voici ma config phpmailer. J'ai testé en TLS ou SSL (465) mais résultat identique.

              $mail = new PHPMailer();
              $mail->isSMTP();
              $mail->Host       = _SMTP_HOST_;
              $mail->SMTPAuth   = true;
              $mail->Username   = _SMTP_USER_;
              $mail->Password   = _SMTP_PASSWORD_;
              $mail->Port       = 587;
              $mail->SMTPSecure = 'tls';
              $mail->CharSet    = 'UTF-8';
              $mail->From       = 'mon_adresse@gmail.com';
              $mail->FromName   = 'Robot';

          cf l'url de la page google qui donne les params (qui fonctionnent en local) : https://support.google.com/a/answer/176600?hl=fr

          Tintwo (@Ikoula pas ma box internet, c'est sur un dédié OVH)

          L'utilisation du terme "local" dans ton message initial à plusieurs reprises m' a induit en erreur :/

          Alors j'en doute mais peux tu consulter les logs du smtp distant ? (histoire de restreindre le cadre de la problématique à ton serveur).

            Bon, je viens de résoudre mon soucis...
            Et comme d'habitude, c'était tellement évident que c'en est risible (ouais marrez-vous dans l'fond, y'a de quoi 😃)

            Ikoula Ça va être difficile sachant que c'est le SMTP de Google/Gmail.

            @Hardware du coup ça fonctionne bien avec un autre SMTP, et pour celui de google c'était bien la configuration propre au compte gmail qui posait problème. Rien à toucher donc au niveau du code de phpmailer.

            Je pose ça là, dès fois que ça serve.
            Solution en tant que telle :
            Rendez-vous sur ce tutoriel pour plus d'indices : https://www.hostinger.fr/tutoriels/utiliser-serveur-smtp-gmail/
            Notamment l'étape 1 (surtout la partie "activer IMAP").
            Du coup, avec à peu près n'importe quel autre SMTP je n'aurais jamais eu de soucis avec cette config, mais dans le cas de Gmail il aura fallu paramétrer le compte en lui-même pour autoriser (1) les applications "moins" sécurisées ainsi que (2) IMAP.

            Merci beaucoup pour votre temps !

            Comment ça se fait qu'en local ça marchait ? Quand tu dis en local, ça voulait bien dire sur la boucle local, lo / 127.0.0.1 vers gmail ?

              Hardware Salut,
              et je me rends compte que je n'ai pas encore été assez explicite (désolé).
              "en local" voulait dire dans ce contexte : sur mon poste local (de développement).
              Mais ça n'explique pas pourquoi ça fonctionnait en effet, hormis le point de l'IP externe qui était suffisamment vérifiée pour google pour ne pas la bloquer (hypothèse bien sûr).

              Répondre…