Entwicklung/Mailversand

Version vom 13. Mai 2024, 13:28 Uhr von Fraggle (Diskussion | Beiträge) (Fraggle verschob die Seite Mailversand nach Entwicklung/Mailversand)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Zwei Varianten, mit denen Email in der Testumgebung getestet werden können, sind der MailHog oder die im Symfony eingebaute Emailanzeige.

Mailhog

Um die Mails anzusehen, die innerhalb des Dockers verschickt werden, muss der Mailhog aufgerufen werden:

http://docker.team-opencaching.de:8025/

Aber Achtung! Dieser Dienst kann noch nicht aus dem Docker heraus Emails versenden.

Der Mailhog im mailhog-Docker selbst funktioniert allerdings. Entsprechend der Webseite https://akrabat.com/using-mailhog-via-docker-for-testing-email/ kann eine Testmail an den Mailhog via Telnet wie folgt gesendet werden.

$ telnet localhost 1025
EHLO 19ft.com
MAIL FROM:<from@19ft.com>
RCPT TO:<to@19ft.com>
DATA
Subject: Hello World
Hello World!
.
QUIT


Eine weitere Testmöglichkeit bietet das Programm swaks. Entsprechend [up SMTP mail server using mailhog docker image] ist dazu das Programm zu installieren und der folgende Befehl auszuführen.

swaks --to jerry@eduami.org --server localhost:1025 --body "Hello Jerry!" --header "Subject: Party!"


Im Symfony integrierte Emailanzeige

Im Symfony existiert eine Option, per PHP versendete Emails anzeigen zu lassen. Die folgende Anleitung basiert auf

Vorbereitung

Die Dateien /htdocs_symfony/.env oder /htdocs_symfony/.env.local um folgende Zeile erweitern

MAILER_DSN=sendmail://default

In der Datei /htdocs_symfony/config/packages/dev/web_profiler.php den Eintrag intercept_redirects auf true setzen. Damit werden allerdings alle Redirects unterbrochen, nicht nur die des unten aufgeführten MailerControllers!

$containerConfigurator->extension('web_profiler', [
    'toolbar' => true,
    'intercept_redirects' => true
]);


Controller anlegen

Einen MailerController anlegen

<?php
namespace Oc\Controller\Backend;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
/**
 *
 */
class MailerController extends AbstractController
{
    /**
     * @param MailerInterface $mailer
     * @param LoggerInterface $logger
     *
     * @return Response
     * @throws TransportExceptionInterface
     * @Route("/email", name="email_sendmail")
     *
     * https://symfony.com/doc/4.1/email/dev_environment.html#viewing-from-the-web-debug-toolbar
     */
    public function sendEmail(MailerInterface $mailer, LoggerInterface $logger)
    : Response {
        $email = (new Email())
            ->from('hello@example.com')
            ->to('you@example.com')
            //->cc('cc@example.com')
            //->bcc('bcc@example.com')
            //->replyTo('fabien@example.com')
            //->priority(Email::PRIORITY_HIGH)
            ->subject('Time for Symfony Mailer!')
            ->text('Sending emails is fun again!')
            ->html('<p>See Twig integration for better HTML integration!</p>');
        $mailer->send($email);
        $logger->info('### Email gesendet ### ');
        return $this->redirectToRoute('backend_index_index');
    }
}


Mail senden und anzeigen

Die Route aus dem Controller aufrufen mittels

http://try.docker.team-opencaching.de/backend/email

Die Funktion ‘sendEmail’ wird dadurch aufgerufen, die Mail versendet und der anschließende Redirect nicht ausgeführt. Meldung des unterbrochenen Redirects:

 


In der Symfonystatusleiste erscheint ein Briefsymbol, welches zur versendeten Email weiterleitet.

 


Die sich nun öffnende Seite zeigt alle Details zur empfangenen Email (oder mehreren, falls vorhanden)