{"id":17569,"date":"2026-08-17T15:25:50","date_gmt":"2026-08-17T15:25:50","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/"},"modified":"2026-08-28T08:25:52","modified_gmt":"2026-08-28T08:25:52","slug":"criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/","title":{"rendered":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">J\u00e1 recebeu um e-mail de notifica\u00e7\u00e3o instant\u00e2nea ao comprar algo online? Isso \u00e9 essencialmente o que \u00e9 uma <a href=\"https:\/\/www.mailgun.com\/blog\/email\/what-is-transactional-email-basics\/\">mensagem transacional<\/a> \u00e9. As mensagens transacionais s\u00e3o e-mails ou notifica\u00e7\u00f5es automatizados que voc\u00ea recebe ao se inscrever em um servi\u00e7o, fazer uma compra ou redefinir uma senha. Elas tamb\u00e9m incluem alertas de fraude, lembretes de carrinho abandonado e atualiza\u00e7\u00f5es de entrega e banc\u00e1rias. Ao contr\u00e1rio dos e-mails de marketing, elas confirmam a\u00e7\u00f5es e mant\u00eam voc\u00ea informado, construindo confian\u00e7a e melhorando o engajamento do usu\u00e1rio.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neste artigo, voc\u00ea aprender\u00e1 a automatizar mensagens transacionais do seu aplicativo usando fluxos de trabalho de API para melhorar a experi\u00eancia do cliente.\u00a0<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-2342\"><p class=\"h5 m-0\" id=\"toc-title-2342\">Table of contents<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#por-que-o-e-mail-transacional-e-importante-para-a-experiencia-do-cliente\">Por que o e-mail transacional \u00e9 importante para a experi\u00eancia do cliente?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#como-construir-um-fluxo-de-trabalho-de-api-para-automatizar-e-mails-transacionais\">Como construir um fluxo de trabalho de API para automatizar e-mails transacionais?<\/a><a class=\"scrollme link-body-color\" href=\"#configure-um-novo-projeto-em-python\">Configure um novo projeto em Python<\/a><a class=\"scrollme link-body-color\" href=\"#obtenha-uma-chave-de-api\">Obtenha uma chave de API<\/a><a class=\"scrollme link-body-color\" href=\"#importar-modulos-e-inicializar\">Importar m\u00f3dulos e inicializar<\/a><a class=\"scrollme link-body-color\" href=\"#enviar-um-e-mail-usando-a-api-do-mailgun\">Enviar um e-mail usando a API do Mailgun<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#pratica-recomendada-automatizar-e-mails-de-registro-de-conta\">Pr\u00e1tica recomendada: Automatizar e-mails de registro de conta<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#pratica-recomendada-automatizar-e-mails-de-confirmacao-de-duplo-opt-in\">Pr\u00e1tica recomendada: Automatizar e-mails de confirma\u00e7\u00e3o de duplo opt-in<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#pratica-recomendada-automatizar-e-mails-de-redefinicao-de-senha\">Pr\u00e1tica recomendada: Automatizar e-mails de redefini\u00e7\u00e3o de senha<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#o-que-vem-a-seguir-depois-de-implementar-esses-fluxos-de-trabalho\">O que vem a seguir depois de implementar esses fluxos de trabalho?<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Por que o e-mail transacional \u00e9 importante para a experi\u00eancia do cliente?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Em contraste com envios em massa <a href=\"https:\/\/www.mailgun.com\/blog\/deliverability\/transactional-emails-vs-marketing-emails\/\" target=\"_tabs\" rel=\"noopener noreferrer\">e-mails de marketing<\/a>, as mensagens transacionais s\u00e3o personalizadas, oportunas e aguardadas, pois s\u00e3o altamente relevantes para a atividade do usu\u00e1rio. Essas mensagens s\u00e3o individuais e cont\u00eam informa\u00e7\u00f5es diretamente relacionadas \u00e0s atividades do usu\u00e1rio. <\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> Voc\u00ea sabia? 74% dos consumidores preferem receber mensagens transacionais por e-mail e 71% verificariam at\u00e9 a pasta de spam se n\u00e3o as recebessem.<a href=\"https:\/\/www.mailgun.com\/pt\/resources\/research\/e-mail-experiencia-do-cliente\/\"> Saiba mais em nosso relat\u00f3rio sobre e-mail e a experi\u00eancia do cliente.<\/a>\u00a0\u00a0<\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Mensagens transacionais oportunas \u2013 como confirma\u00e7\u00f5es de pedido e alertas de conta \u2013 <a href=\"https:\/\/www.mailgun.com\/pt\/blog\/email\/e-mail-transacional-heroi-anonimo\/\" target=\"_tabs\" rel=\"noopener noreferrer\">aumentar a satisfa\u00e7\u00e3o do cliente<\/a>, aumentam a transpar\u00eancia e fortalecem a confian\u00e7a ao lidar de forma eficiente com as intera\u00e7\u00f5es dos clientes e poss\u00edveis fraudes. Elas tamb\u00e9m ajudam os clientes ao oferecer op\u00e7\u00f5es de autoatendimento e reduzir a carga sobre o suporte ao cliente. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Ao contr\u00e1rio de e-mails promocionais que costumam passar despercebidos, os e-mails transacionais s\u00e3o muito aguardados e frequentemente abertos instantaneamente; os usu\u00e1rios at\u00e9 fazem uma ca\u00e7a ao tesouro em suas pastas de spam para localiz\u00e1-los. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como construir um fluxo de trabalho de API para automatizar e-mails transacionais?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Neste tutorial, voc\u00ea aprender\u00e1 a enviar e-mails transacionais do seu aplicativo configurando fluxos de trabalho simples com <a href=\"https:\/\/www.mailgun.com\/pt\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>APIs do Mailgun<\/u><\/a>. O Mailgun \u00e9 uma plataforma de envio de e-mails que permite enviar e rastrear e-mails. Ele simplifica a automa\u00e7\u00e3o de e-mail transacional com APIs confi\u00e1veis e f\u00e1ceis de usar.\u00a0\u00a0Voc\u00ea usar\u00e1 o Mailgun para automatizar mensagens transacionais com Python nos seguintes cen\u00e1rios:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inscri\u00e7\u00e3o de conta de usu\u00e1rio\u00a0<\/li>\n\n\n\n<li>Duplo opt-in para assinaturas de newsletter\u00a0<\/li>\n\n\n\n<li>Redefini\u00e7\u00e3o de senha\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de come\u00e7ar, certifique-se de ter o seguinte:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.python.org\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>Python<\/u><\/a> 3.9 ou superior\u00a0<\/li>\n\n\n\n<li>Uma conta do Mailgun (o <a href=\"https:\/\/signup.mailgun.com\/new\/signup\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>teste gratuito de 30 dias<\/u><\/a> \u00e9 suficiente para este tutorial)\u00a0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Configure um novo projeto em Python<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para come\u00e7ar, crie um diret\u00f3rio para o seu projeto em Python e adicione um arquivo .env vazio dentro dele.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de prosseguir, \u00e9 uma boa pr\u00e1tica criar e ativar um novo <a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>ambiente virtual<\/u><\/a> para isolar seu projeto e evitar conflitos de depend\u00eancias.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o seu ambiente virtual estiver ativo, instale as bibliotecas necess\u00e1rias (requests e python-dotenv) executando o seguinte:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\npip install requests python-dotenv \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A biblioteca requests permite fazer chamadas de API, e o python-dotenv ajuda a armazenar sua chave de API com seguran\u00e7a fora do seu c\u00f3digo.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Obtenha uma chave de API<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para fazer chamadas de API para o Mailgun, voc\u00ea precisa de uma <a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/203380100-Where-can-I-find-my-API-keys-and-SMTP-credentials\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>chave de API<\/u><\/a> da sua conta do Mailgun.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fa\u00e7a login na sua conta do Mailgun e navegue at\u00e9 a <a href=\"https:\/\/app.mailgun.com\/settings\/api_security\" target=\"_tabs\" rel=\"noopener noreferrer\"><b><u>Seguran\u00e7a da API<\/u><\/b><\/a> p\u00e1gina. Voc\u00ea pode encontrar isso no menu suspenso abaixo do seu nome, no canto superior direito:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crie uma chave de API e copie-a:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Armazene-a com seguran\u00e7a colando a chave no arquivo .env do seu projeto:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\nMAILGUN_API_KEY=&quot;Your API Key Here&quot; \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Ao usar o Mailgun, anote os seus <b>dom\u00ednios de envio<\/b> na <a href=\"https:\/\/app.mailgun.com\/mg\/dashboard\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>painel<\/u><\/a>:\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea estiver em um plano gratuito, ver\u00e1 um dom\u00ednio de sandbox, que usar\u00e1 no endpoint da API e como o endere\u00e7o de e-mail de remetente (\u201cfrom\u201d) ao enviar e-mails por meio das APIs do Mailgun. O dom\u00ednio de sandbox normalmente se parece com isto: <code>.mailgun.org<\/code>.<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> Se voc\u00ea quiser enviar e-mails usando um dom\u00ednio personalizado, precisar\u00e1 fazer o upgrade para um plano pago. O plano gratuito limita voc\u00ea ao dom\u00ednio de sandbox e permite enviar e-mails para at\u00e9 cinco endere\u00e7os verificados, o que \u00e9 \u00fatil quando se trata de testes e desenvolvimento ao integrar a API do Mailgun ao seu sistema. Voc\u00ea pode adicionar esses endere\u00e7os de e-mail a <a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\"><b>Destinat\u00e1rios autorizados<\/b><\/a> nas configura\u00e7\u00f5es da conta.\u00a0<\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">Importar m\u00f3dulos e inicializar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para automatizar e-mails transacionais, comece criando um arquivo main.py no diret\u00f3rio do seu projeto e adicionando o seguinte c\u00f3digo:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\nimport requests \r\n\r\nimport logging \r\n\r\nimport os \r\n\r\nfrom dotenv import load_dotenv \r\n\r\nlogging.basicConfig(level=logging.INFO)\u202f # Set log level \r\n\r\nload_dotenv()\u202f # For reading the API key from the `.env` file \r\n\r\n# Sandbox API URL format: https:\/\/api.mailgun.net\/v3\/sandbox.mailgun.org\/messages \r\n\r\nMAILGUN_API_URL = &quot;https:\/\/api.mailgun.net\/v3\/YOUR_DOMAIN_NAME\/messages&quot; \r\n\r\nFROM_EMAIL_ADDRESS = &quot;Sender Name &quot; \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A <code>fun\u00e7\u00e3o load_dotenv()<\/code>, da biblioteca <code>python-dotenv <\/code>, carrega as vari\u00e1veis de ambiente do seu arquivo .env para o seu c\u00f3digo Python. Essa \u00e9 uma pr\u00e1tica recomendada para armazenar e acessar com seguran\u00e7a informa\u00e7\u00f5es confidenciais, como credenciais e chaves de API.\u00a0\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A MAILGUN_API_URL define a URL da API para o seu script Python, enquanto FROM_EMAIL_ADDRESS especifica o endere\u00e7o de e-mail do remetente (ambos devem usar o seu dom\u00ednio de envio de e-mails ou o dom\u00ednio de sandbox mencionado anteriormente).\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enviar um e-mail usando a API do Mailgun<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O c\u00f3digo a seguir mostra como enviar um e-mail para um \u00fanico endere\u00e7o usando a API do Mailgun. Voc\u00ea deve adicionar este c\u00f3digo ao arquivo main.py criado anteriormente, abaixo da inicializa\u00e7\u00e3o:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    \r\n```python \r\ndef _send_email(to_address: str, subject: str, message: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fSend single email to the given email address using Mailgun API. \r\n\r\n\u202f\u202f\u202f\u202f:param to_address: \r\n\r\n\u202f\u202f\u202f\u202f:param subject: \r\n\r\n\u202f\u202f\u202f\u202f:param message: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202ftry: \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202fapi_key = os.getenv(&quot;MAILGUN_API_KEY&quot;)\u202f # Get API key from the `.env` file \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202fresp = requests.post(MAILGUN_API_URL, auth=(&quot;api&quot;, api_key), \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202fdata={&quot;from&quot;: FROM_EMAIL_ADDRESS, \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f&quot;to&quot;: to_address, &quot;subject&quot;: subject, &quot;html&quot;: message}) \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202fif resp.status_code == 200:\u202f # Success \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202flogging.info(f&quot;Successfully sent an email to &#039;{to_address}&#039; via Mailgun API.&quot;) \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202felse: \u202f # Error \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202flogging.error(f&quot;Could not send the email, reason: {resp.text}&quot;) \r\n\r\n\u202f\u202f\u202f\u202fexcept Exception as ex: \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202flogging.exception(f&quot;Mailgun error: {ex}&quot;) \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o <code>_send_email()<\/code> recebe tr\u00eas argumentos: <code>to_address<\/code>, <code>subject<\/code> e <code>message<\/code>. <code>to_address<\/code> \u00e9 o e-mail do destinat\u00e1rio, enquanto subject e message definem o assunto e o conte\u00fado do e-mail, respectivamente. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o l\u00ea a chave de API do Mailgun do arquivo .env, que \u00e9 ent\u00e3o usada para autenticar a chamada da API para a MAILGUN_API_URL especificada. Essa chave identifica sua conta de forma exclusiva, permitindo que o Mailgun verifique sua solicita\u00e7\u00e3o. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para garantir que o e-mail seja enviado corretamente, voc\u00ea deve usar a sua chave de API exclusiva; o endere\u00e7o de e-mail de remetente (\u201cfrom\u201d) deve estar associado ao seu dom\u00ednio v\u00e1lido ou ao dom\u00ednio de sandbox do Mailgun. Caso contr\u00e1rio, a chamada da API falhar\u00e1 e retornar\u00e1 um erro. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os dados do e-mail s\u00e3o enviados usando o m\u00e9todo HTTP POST por meio da chamada requests.post(). Se a chamada da API for bem-sucedida, o e-mail ser\u00e1 enfileirado para entrega, e a API retornar\u00e1 o status HTTP 200 OK. Se ocorrer um erro, a API fornece uma mensagem de erro junto com um c\u00f3digo de status HTTP apropriado. Ambos os cen\u00e1rios s\u00e3o registrados por essa fun\u00e7\u00e3o para sua refer\u00eancia. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todas as automa\u00e7\u00f5es de e-mail transacional nas se\u00e7\u00f5es a seguir dependem da fun\u00e7\u00e3o <code>_send_email() <\/code> para enviar e-mails por meio da API do Mailgun. <\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> A chamada da API do Mailgun retorna imediatamente ap\u00f3s receber sua solicita\u00e7\u00e3o HTTP, indicando que o e-mail foi enfileirado para entrega.\u00a0<\/div><div class=\"content-body mt-3\">Com essa configura\u00e7\u00e3o, voc\u00ea j\u00e1 est\u00e1 pronto para automatizar seus e-mails transacionais para v\u00e1rios cen\u00e1rios.\u00a0<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e1tica recomendada: Automatizar e-mails de registro de conta<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O registro de conta de usu\u00e1rio \u00e9 um dos casos de uso mais importantes para e-mails transacionais, pois serve como o ponto de entrada do usu\u00e1rio no seu sistema. As primeiras impress\u00f5es s\u00e3o importantes, e essa intera\u00e7\u00e3o inicial \u00e9 uma oportunidade para construir confian\u00e7a e estabelecer uma rela\u00e7\u00e3o positiva com o usu\u00e1rio. Um e-mail de felicita\u00e7\u00e3o oportuno ap\u00f3s o registro n\u00e3o apenas confirma o sucesso do processo, mas tamb\u00e9m tranquiliza o usu\u00e1rio de que sua conta est\u00e1 pronta para uso.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para conseguir isso, o seu sistema deve enviar imediatamente um e-mail de confirma\u00e7\u00e3o automatizado para informar ao usu\u00e1rio que o registro foi bem-sucedido.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui est\u00e1 um exemplo de como implementar isso:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\ndef _notify_registration(user_name: str, user_email: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fNotify user on successful registration using `_send_email` \r\n\r\n\u202f\u202f\u202f\u202f:param user_name: \r\n\r\n\u202f\u202f\u202f\u202f:param user_email: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202f# Use your own formatted HTML message here, with an appropriate link \r\n\r\n\u202f\u202f\u202f\u202fregistration_msg = f&#039;Dear {user_name},&lt;br \/&gt;&lt;br \/&gt; You have successfully registered on our site.&#039; \r\n\r\n\u202f\u202f\u202f\u202f_send_email(user_email, &quot;Registration successful&quot;, registration_msg) \r\n\r\ndef register_user(user_name: str, user_email: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fRegister the user and notify the user on successful registration. \r\n\r\n\u202f\u202f\u202f\u202f:param user_name: \r\n\r\n\u202f\u202f\u202f\u202f:param user_email: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202f# Actual code to register the user \r\n\r\n\u202f\u202f\u202f\u202flogging.info(f&quot;Sending registration email to the user: {user_name}...&quot;) \r\n\r\n\u202f\u202f\u202f\u202f_notify_registration(user_name, user_email) \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A primeira fun\u00e7\u00e3o, <code>_notify_registration()<\/code>, \u00e9 respons\u00e1vel por enviar uma notifica\u00e7\u00e3o por e-mail a um usu\u00e1rio que acabou de se registrar. Ela recebe dois par\u00e2metros: user_name e user_email. Dentro dessa fun\u00e7\u00e3o, uma mensagem HTML simples \u00e9 constru\u00edda usando uma <a href=\"https:\/\/docs.python.org\/3\/tutorial\/inputoutput.html#formatted-string-literals\" target=\"_tabs\" rel=\"noopener noreferrer\"><u>f-string<\/u><\/a>, que permite a inser\u00e7\u00e3o f\u00e1cil do nome do usu\u00e1rio na mensagem. Essa fun\u00e7\u00e3o ent\u00e3o chama a fun\u00e7\u00e3o discutida anteriormente, <code>_send_email()<\/code>, para enviar o e-mail.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a0A segunda fun\u00e7\u00e3o stub, <code>register_user()<\/code>, sugere o principal ponto de entrada para o processo de registro de usu\u00e1rio dentro do seu sistema. Ela tamb\u00e9m recebe <code>user_name<\/code> e <code>user_email<\/code> como par\u00e2metros. Na vida real, ela normalmente teria mais par\u00e2metros ou objetos &#8216;usu\u00e1rio&#8217; com mais detalhes. Essa fun\u00e7\u00e3o \u00e9 respons\u00e1vel por lidar com o processo de registro. Como mostrado aqui, ela registra o envio do e-mail e chama a fun\u00e7\u00e3o<code> _notify_registration()<\/code> para iniciar o e-mail de confirma\u00e7\u00e3o automatizado ap\u00f3s concluir o registro do usu\u00e1rio.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O registro do usu\u00e1rio atua como um evento de gatilho para esse e-mail transacional, e voc\u00ea pode automatiz\u00e1-lo usando o fluxo de trabalho da API mostrado acima. Tamb\u00e9m \u00e9 uma \u00f3tima chance de informar os usu\u00e1rios sobre os seus servi\u00e7os e principais recursos.\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> A API do Mailgun permite que voc\u00ea crie e personalize <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#templates\">modelos HTML<\/a>, dando-lhe a flexibilidade para projetar e-mails transacionais visualmente atraentes com conte\u00fado rico.\u00a0<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e1tica recomendada: Automatizar e-mails de confirma\u00e7\u00e3o de duplo opt-in<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando um usu\u00e1rio assina a sua newsletter, em vez de adicion\u00e1-lo imediatamente \u00e0 sua lista de assinantes, voc\u00ea pode enviar um e-mail pedindo que ele confirme a sua assinatura. Esse processo, chamado de confirma\u00e7\u00e3o de duplo opt-in, \u00e9 exigido legalmente em alguns pa\u00edses para conformidade regulat\u00f3ria.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui, a assinatura do usu\u00e1rio atua como o gatilho, e voc\u00ea pode automatizar a confirma\u00e7\u00e3o de duplo opt-in com o seguinte c\u00f3digo:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\ndef _notify_subscription(user_name: str, user_email: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fDouble opt-in confirmation for user subscription. \r\n\r\n\u202f\u202f\u202f\u202f:param user_name: \r\n\r\n\u202f\u202f\u202f\u202f:param user_email: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202f# Use your own formatted HTML message here, with an appropriate link \r\n\r\n\u202f\u202f\u202f\u202fsubscription_msg = f&#039;Dear {user_name},&lt;br \/&gt;&lt;br \/&gt; Please confirm your subscription to our newsletter by clicking &#039; \\ \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202ff&#039;this link: &lt;a href=&quot;https:\/\/example.com\/confirm-subscription?id=abcdef1234567xyz&quot;&gt;&#039; \\ \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202ff&#039;https:\/\/example.com\/confirm-subscription?id=abcdef1234567xyz&lt;\/a&gt;&#039; \r\n\r\n\u202f\u202f\u202f\u202f_send_email(user_email, &quot;Confirm subscription&quot;, subscription_msg) \r\n\r\ndef subscribe_user(user_name: str, user_email: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fSubscribe user and send opt-in confirmation message. \r\n\r\n\u202f\u202f\u202f\u202f:param user_name: \r\n\r\n\u202f\u202f\u202f\u202f:param user_email: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202f# Code to subscribe user with pending confirmation \r\n\r\n\u202f\u202f\u202f\u202flogging.info(f&quot;Sending subscription confirmation email to the user: {user_name}...&quot;) \r\n\r\n\u202f\u202f\u202f\u202f_notify_subscription(user_name, user_email) \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A primeira fun\u00e7\u00e3o, <code>_notify_subscription()<\/code>, \u00e9 respons\u00e1vel por enviar um e-mail de confirma\u00e7\u00e3o de duplo opt-in a um usu\u00e1rio que solicitou assinar uma newsletter. Ela recebe dois par\u00e2metros: user_name e user_email. Dentro dessa fun\u00e7\u00e3o, uma mensagem HTML \u00e9 constru\u00edda usando uma f-string, que inclui o nome do usu\u00e1rio e um link de confirma\u00e7\u00e3o fict\u00edcio. Novamente, essa fun\u00e7\u00e3o ent\u00e3o chama a fun\u00e7\u00e3o <code>_send_email()<\/code> para enviar o e-mail.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A segunda fun\u00e7\u00e3o stub, <code>subscribe_user()<\/code>, \u00e9 o principal ponto de entrada para o processo de assinatura do usu\u00e1rio. Ela tamb\u00e9m recebe user_name e user_email como par\u00e2metros. Essa fun\u00e7\u00e3o normalmente lida com o processo inicial de assinatura, provavelmente armazenando as informa\u00e7\u00f5es do usu\u00e1rio com um status de &#8216;pendente&#8217;. No final, ela registra o envio do e-mail e chama a fun\u00e7\u00e3o <code>_notify_subscription()<\/code> para criar e enviar o e-mail de confirma\u00e7\u00e3o de duplo opt-in.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e1tica recomendada: Automatizar e-mails de redefini\u00e7\u00e3o de senha<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea j\u00e1 precisou fazer login, mas percebeu que esqueceu a senha e teve que clicar no link &#8216;esqueci a senha&#8217;? Clicar nesse link dispara um e-mail que voc\u00ea est\u00e1 aguardando ansiosamente.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui est\u00e1 um exemplo de c\u00f3digo que demonstra como automatizar esse tipo de e-mail transacional:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\ndef _notify_password_reset(user_name: str, user_email: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fSend password reset email to the user \r\n\r\n\u202f\u202f\u202f\u202f:param user_name: \r\n\r\n\u202f\u202f\u202f\u202f:param user_email: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202f# Use your own formatted HTML message here \r\n\r\n\u202f\u202f\u202f\u202fregistration_msg = f&#039;Dear {user_name},&lt;br \/&gt;&lt;br \/&gt; Please use the following link to reset your password: &#039; \\ \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202ff&#039;&lt;a href=&quot;https:\/\/example.com\/password-reset?token=lmnopqr7654321abc&quot;&gt;&#039; \\ \r\n\r\n\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202f\u202ff&#039;https:\/\/example.com\/password-reset?token=lmnopqr7654321abc&lt;\/a&gt;&#039; \r\n\r\n\u202f\u202f\u202f\u202f_send_email(user_email, &quot;Reset password&quot;, registration_msg) \r\n\r\ndef reset_user_password(user_name: str, user_email: str): \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202fInitiate password-reset and notify user \r\n\r\n\u202f\u202f\u202f\u202f:param user_name: \r\n\r\n\u202f\u202f\u202f\u202f:param user_email: \r\n\r\n\u202f\u202f\u202f\u202f&quot;&quot;&quot; \r\n\r\n\u202f\u202f\u202f\u202f# Password reset code for the user \r\n\r\n\u202f\u202f\u202f\u202flogging.info(f&quot;Sending password reset email to the user: {user_name}...&quot;) \r\n\r\n\u202f\u202f\u202f\u202f_notify_password_reset(user_name, user_email) \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A <code>fun\u00e7\u00e3o _notify_password_reset()<\/code> \u00e9 respons\u00e1vel por criar e enviar um e-mail de redefini\u00e7\u00e3o de senha para o usu\u00e1rio. Ela recebe o nome e o endere\u00e7o de e-mail do usu\u00e1rio como entradas. Dentro da fun\u00e7\u00e3o, uma mensagem HTML \u00e9 criada usando uma f-string, que inclui o nome do usu\u00e1rio e uma URL exclusiva de redefini\u00e7\u00e3o de senha. A fun\u00e7\u00e3o ent\u00e3o usa a fun\u00e7\u00e3o <code>_send_email()<\/code> para entregar essa mensagem \u00e0 caixa de entrada do usu\u00e1rio.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o <code>reset_user_password()<\/code> trabalha em conjunto com ela como o ponto de partida quando um usu\u00e1rio deseja redefinir sua senha. Ela tamb\u00e9m requer o nome e o e-mail do usu\u00e1rio como entradas. Normalmente, essa fun\u00e7\u00e3o faria algum trabalho nos bastidores para configurar a redefini\u00e7\u00e3o de senha (n\u00e3o mostrado neste c\u00f3digo). Em seguida, ela registra o envio do e-mail e chama <code>_notify_password_reset()<\/code> para enviar as instru\u00e7\u00f5es de redefini\u00e7\u00e3o.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Semelhante aos dois casos de uso anteriores, esse par de fun\u00e7\u00f5es demonstra uma abordagem modular para lidar com redefini\u00e7\u00f5es de senha. Ao manter os processos de notifica\u00e7\u00e3o e acionamento separados, esse design torna o sistema mais f\u00e1cil de manter e permite melhorias futuras no fluxo de trabalho de redefini\u00e7\u00e3o de senha.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode chamar essas fun\u00e7\u00f5es da fun\u00e7\u00e3o main para demonstra\u00e7\u00e3o, desta forma:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copy to clipboard\" data-clipboard-success-label=\"Copied!\" data-clipboard-error-label=\"Unable to copy\" data-tooltip=\"Copy to clipboard\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copy to clipboard\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python \r\n# Demo of automated transactional emails \r\n\r\nif __name__ == &quot;__main__&quot;: \r\n\r\n\u202f\u202f\u202f\u202fregister_user(&quot;Kirstin&quot;,\u202f &quot;Kirstin &quot;) \r\n\r\n\u202f\u202f\u202f\u202fsubscribe_user(&quot;Jakkie&quot;,\u202f &quot;Jakkie &quot;) \r\n\r\n\u202f\u202f\u202f\u202freset_user_password(&quot;Manish&quot;,\u202f &quot;Manish &quot;) \r\n``` \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Esses tr\u00eas exemplos mostram como automatizar e-mails transacionais no seu sistema. Cada um segue um padr\u00e3o semelhante:\u00a0<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Uma fun\u00e7\u00e3o espec\u00edfica \u00e9 criada para um tipo particular de notifica\u00e7\u00e3o (registro, assinatura ou redefini\u00e7\u00e3o de senha), que \u00e9 acionada pelo evento ou fluxo de trabalho correspondente.\u00a0<\/li>\n\n\n\n<li>A fun\u00e7\u00e3o prepara uma mensagem de e-mail relevante.\u00a0<\/li>\n\n\n\n<li>Uma fun\u00e7\u00e3o de utilidade separada (usando a API do Mailgun) \u00e9 chamada para realmente enviar o e-mail.\u00a0<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Essa abordagem garante que e-mails transacionais sejam enviados automaticamente em momentos-chave, como quando um usu\u00e1rio se registra, assina ou solicita uma redefini\u00e7\u00e3o de senha.\u00a0\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> Voc\u00ea pode encontrar todo o c\u00f3digo para este tutorial <a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/tree\/master\/python\/mailgun-transactional-emails\">neste reposit\u00f3rio do GitHub<\/a>. Para obter ainda mais informa\u00e7\u00f5es, confira <a href=\"https:\/\/www.mailgun.com\/blog\/email\/the-benefits-of-email-automation\/\">os oito benef\u00edcios da automa\u00e7\u00e3o de e-mail para aprimorar sua experi\u00eancia do cliente.<\/a>\u00a0<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">O que vem a seguir depois de implementar esses fluxos de trabalho?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Neste artigo, detalhamos o poder dos e-mails transacionais na comunica\u00e7\u00e3o com o usu\u00e1rio. Ao contr\u00e1rio dos e-mails de marketing, essas mensagens s\u00e3o acionadas por a\u00e7\u00f5es espec\u00edficas \u2014 como uma compra ou redefini\u00e7\u00e3o de senha \u2014 e entregam informa\u00e7\u00f5es cruciais e sens\u00edveis ao tempo que mant\u00eam os usu\u00e1rios engajados e informados.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tamb\u00e9m mostramos como automatizar esses e-mails usando fluxos de trabalho de API, orientando voc\u00ea na configura\u00e7\u00e3o de fun\u00e7\u00f5es para coisas como e-mails de boas-vindas, confirma\u00e7\u00f5es de assinatura e redefini\u00e7\u00f5es de senha. Essa automa\u00e7\u00e3o garante que os seus e-mails cheguem \u00e0s caixas de entrada exatamente quando os seus usu\u00e1rios precisam deles.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pronto para otimizar os seus e-mails transacionais? Com as APIs robustas e as ferramentas de rastreamento do Mailgun, voc\u00ea pode automatizar mensagens facilmente e aprimorar a experi\u00eancia do usu\u00e1rio do in\u00edcio ao fim, mas n\u00e3o acredite apenas na nossa palavra, confira voc\u00ea mesmo.\u00a0<\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_a4ab180526a72d7a01e20a76d7758843\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Cadastre-se            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_a4ab180526a72d7a01e20a76d7758843\">\r\n                \u00c9 f\u00e1cil come\u00e7ar. E \u00e9 gr\u00e1tis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Veja o que voc\u00ea pode alcan\u00e7ar com a melhor plataforma de entrega de e-mail do mundo.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Mantenha os clientes informados com e-mails transacionais que geram confian\u00e7a. Aprenda a potencializar sua automa\u00e7\u00e3o de e-mail com os fluxos de trabalho de API do Mailgun para uma experi\u00eancia do cliente perfeita.\u00a0<\/p>\n","protected":false},"author":11,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"blog_category":[19],"class_list":["post-17569","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-dev-life"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores, com exemplos de c\u00f3digo - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores: configura\u00e7\u00e3o segura de API, tratamento de erros e c\u00f3digo Python para fluxos de trabalho de registro, opt-in e redefini\u00e7\u00e3o de senha.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores, com exemplos de c\u00f3digo - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores: configura\u00e7\u00e3o segura de API, tratamento de erros e c\u00f3digo Python para fluxos de trabalho de registro, opt-in e redefini\u00e7\u00e3o de senha.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-28T08:25:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/\",\"name\":\"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores, com exemplos de c\u00f3digo - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2026-08-17T15:25:50+00:00\",\"dateModified\":\"2026-08-28T08:25:52+00:00\",\"description\":\"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores: configura\u00e7\u00e3o segura de API, tratamento de erros e c\u00f3digo Python para fluxos de trabalho de registro, opt-in e redefini\u00e7\u00e3o de senha.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores, com exemplos de c\u00f3digo - Transactional Email API Service For Developers | Mailgun","description":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores: configura\u00e7\u00e3o segura de API, tratamento de erros e c\u00f3digo Python para fluxos de trabalho de registro, opt-in e redefini\u00e7\u00e3o de senha.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/","og_locale":"pt_BR","og_type":"article","og_title":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores, com exemplos de c\u00f3digo - Transactional Email API Service For Developers | Mailgun","og_description":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores: configura\u00e7\u00e3o segura de API, tratamento de erros e c\u00f3digo Python para fluxos de trabalho de registro, opt-in e redefini\u00e7\u00e3o de senha.","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-08-28T08:25:52+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/","name":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores, com exemplos de c\u00f3digo - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2026-08-17T15:25:50+00:00","dateModified":"2026-08-28T08:25:52+00:00","description":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores: configura\u00e7\u00e3o segura de API, tratamento de erros e c\u00f3digo Python para fluxos de trabalho de registro, opt-in e redefini\u00e7\u00e3o de senha.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/criar-fluxos-de-trabalho-de-api-para-e-mails-transacionais\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Pr\u00e1ticas recomendadas de e-mail transacional para desenvolvedores"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/17569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/11"}],"version-history":[{"count":2,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/17569\/revisions"}],"predecessor-version":[{"id":17586,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/17569\/revisions\/17586"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=17569"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=17569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}