Login to bookmark this video
20.

Demoing our Webhook via a Wormhole

|

Share this awesome video!

|

Time to test-drive the Mailtrap webhook!

First, we need to switch our development environment to send in production again. In .env.local, switch to your production Mailtrap MAILER_DSN and in config/services.yaml, make sure the global_from_email's domain is the one you configured with Mailtrap.

Create a Webhook on Mailtrap

Over in Mailtrap, go to "Settings" > "Webhooks" and click "Create New Webhook". First thing we need is a Webhook URL. Hmm, this needs to be /webhook/mailtrap but it needs to be an absolute URL. In production, this wouldn't be a problem: it would be your production domain. In development, it's a bit trickier. We can't just use the URL the Symfony CLI server gives us...

ngrok

Somehow we need to expose our local Symfony server to the public. And there's a neat tool that does exactly this: ngrok. Create a free account, log in, and follow the instructions to configure the ngrok CLI client.

Over in the terminal, restart with Symfony webserver:

symfony server:stop

Oh, it isn't running. Start it with:

symfony serve -d

Expose the Local Server

This is the URL we need to expose, copy it and run:

ngrok http <paste-url>

Paste the URL, and hit enter. Wormhole open!

This crazy looking "Forwarding" URL is the public URL. Copy and paste it into your browser. This warning just lets you know you're running through a tunnel. Click "Visit Site" to see your app. Cool!

Mailtrap Webhook URL

Back in Mailtrap, paste this URL and add /webhook/mailtrap to the end. For "Select Stream", choose "Transactional". For "Select Domain", choose your configured Mailtrap domain. Go nuts and select all events, then "Save".

Go back into the new webhook and click "Run Test".

Webhook URL test completed successfully

That's a good sign!

Dump Server

Remember in our EmailEventConsumer, we're just dumping the event? Since hitting the webhook happens behind the scenes, we can't see the dump... or can we? In a new terminal run:

symfony console server:dump

This hooks into our app and any dumps will be output here live. Clever!

In your browser, book a trip, remember to use a real email address (but not mine!)

MailerDeliveryEvent

Moment of truth! Back in the terminal running the dump server, wait a bit... Alright! We have a dump! Scroll up a bit... This is a MailerDeliveryEvent for delivered. We see the internal ID Mailtrap assigned, the raw payload, date, recipient email, even our custom metadata and tag.

MailerEngagementEvent

Let's try an engagement event! In your email client, open the email.

Back in the dump server terminal, wait a bit... and boom! Another event! This time, it's a MailerEngagementEvent for open. This is cool!

Alright space cadets, that's it for this course! We managed to cover almost all of Symfony Mailer features without SPAM'ing our users. Win!

'Til next time, happy coding!