{"id":24832,"date":"2026-09-16T17:52:09","date_gmt":"2026-09-16T17:52:09","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/"},"modified":"2026-09-16T17:52:09","modified_gmt":"2026-09-16T17:52:09","slug":"criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/","title":{"rendered":"Como criar uma abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Este blog foi escrito por\u00a0<\/i><a href=\"http:\/\/twitter.com\/poiyzy\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>Roy Young<\/i><\/a><i>. Roy atua com desenvolvimento Ruby e est\u00e1 aprimorando suas skills na\u00a0<\/i><a href=\"http:\/\/www.gotealeaf.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>Tealeaf Academy<\/i><\/a><i>.<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ah, a tabela &#8220;<i>users&#8221;<\/i>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel dizer que esse \u00e9 um dos ativos mais importantes de uma startup. As mentes mais c\u00ednicas n\u00e3o acreditam que o\u00a0<a href=\"http:\/\/instagram.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Instagram<\/a>\u00a0(um aplicativo de compartilhamento de fotos!) tenha sido comprado por\u00a0<a href=\"http:\/\/thenextweb.com\/facebook\/2012\/10\/24\/final-cost-to-facebook-to-purchase-instagram-715-million\/\" target=\"_tabs\" rel=\"noopener noreferrer\">US$\u00a0715 milh\u00f5es pelo Facebook<\/a>\u00a0ou que, segundo rumores, o Mailbox, um cliente de e-mail m\u00f3vel para Gmail (e ainda na vers\u00e3o beta em muitos aspectos), tenha sido\u00a0<a href=\"http:\/\/techcrunch.com\/2013\/03\/15\/mailbox-cost-dropbox-around-100-million\/\" target=\"_tabs\" rel=\"noopener noreferrer\">comprado por at\u00e9 US$\u00a0100 milh\u00f5es pelo Dropbox<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essa vis\u00e3o c\u00ednica costuma resultar de um foco m\u00edope apenas no produto ou na tecnologia, o que torna f\u00e1cil descartar essas avalia\u00e7\u00f5es como absurdas. No entanto, o que tamb\u00e9m precisa ser considerado \u00e9 o valor de toda a base de usu\u00e1rios e o crescimento dessa base. Essas avalia\u00e7\u00f5es astron\u00f4micas est\u00e3o sempre associadas a um produto que tem uma base de usu\u00e1rios grande e em r\u00e1pido crescimento. Faz sentido, ent\u00e3o, que manter sua tabela da base de usu\u00e1rios atualizada com informa\u00e7\u00f5es de contato corretas seja um bom investimento para a sua empresa. \u00c9 claro que a parte dif\u00edcil \u00e9 criar esse crescimento\u2026 ent\u00e3o voc\u00ea ter\u00e1 que\u00a0<a href=\"http:\/\/www.kalzumeus.com\/2012\/12\/21\/i-wrote-a-book-on-conversion-optimization-for-software-companies\/\" target=\"_tabs\" rel=\"noopener noreferrer\">pagar por essas informa\u00e7\u00f5es<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas este conselho sobre a &#8220;parte f\u00e1cil&#8221; \u00e9 gratuito. Nesta publica\u00e7\u00e3o, falarei sobre uma boa metodologia para manter os e-mails da sua base de usu\u00e1rios atualizados em uma \u00e9poca em que muitas pessoas t\u00eam v\u00e1rios endere\u00e7os de e-mail e e-mails descart\u00e1veis para muitos dos seus servi\u00e7os.<\/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-9981\"><p class=\"h5 m-0\" id=\"toc-title-9981\">\u00cdndice<\/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=\"#logica-do-aplicativo-para-solicitar-a-atualizacao-do-endereco-de-e-mail\">L\u00f3gica do aplicativo para solicitar a atualiza\u00e7\u00e3o do endere\u00e7o de e-mail<\/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=\"#envio-de-e-mails-de-faturas-mensais-usando-o-heroku-scheduler\">Envio de e-mails de faturas mensais usando o Heroku Scheduler<\/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=\"#recebimento-de-notificacao-de-e-mails-com-devolucao\">Recebimento de notifica\u00e7\u00e3o de e-mails com devolu\u00e7\u00e3o<\/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=\"#exibicao-da-tela-em-flash-para-que-a-pessoa-atualize-o-e-mail\">Exibi\u00e7\u00e3o da tela em flash para que a pessoa atualize o e-mail<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">L\u00f3gica do aplicativo para solicitar a atualiza\u00e7\u00e3o do endere\u00e7o de e-mail<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando voc\u00ea envia um e-mail para um endere\u00e7o de e-mail que n\u00e3o existe mais, a parte receptora (por exemplo, Gmail ou Yahoo) far\u00e1 a devolu\u00e7\u00e3o do e-mail para voc\u00ea. Se voc\u00ea monitorar essas devolu\u00e7\u00f5es, o seu aplicativo poder\u00e1 reagir de forma adequada, criando uma \u00f3tima experi\u00eancia de uso, al\u00e9m de manter o seu banco de dados de clientes atualizado. Este blog descreve um aplicativo de exemplo criado no Heroku que usa o Mailgun para monitorar esses e-mails com devolu\u00e7\u00e3o para que as pessoas com endere\u00e7os de e-mail inv\u00e1lidos possam continuar a receber e-mails mensais com a fatura. No entanto, a mesma l\u00f3gica pode ser aplicada a qualquer um dos seus e-mails, para garantir que o seu p\u00fablico permane\u00e7a engajado e atualizado sobre a sua empresa por e-mail.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"450\" height=\"750\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image.png\" alt=\"Fluxo de trabalho para manter os contatos atualizados: um processo de 7 etapas para lidar com e-mails devolvidos e solicitar atualiza\u00e7\u00f5es de usu\u00e1rios\" class=\"wp-image-11470\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image.png 450w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-180x300.png 180w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Criei um site de demonstra\u00e7\u00e3o para este artigo e disponibilizei o c\u00f3digo-fonte no\u00a0<a href=\"https:\/\/github.com\/poiyzy\/mailgun_example\" target=\"_tabs\" rel=\"noopener noreferrer\">GitHub<\/a>. Esta demonstra\u00e7\u00e3o orienta iniciantes em todo o processo de configura\u00e7\u00e3o dessa funcionalidade. Clique\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/api-bounces.html\" target=\"_tabs\" rel=\"noopener noreferrer\">aqui<\/a>\u00a0se voc\u00ea quiser pular diretamente para a integra\u00e7\u00e3o de webhooks de devolu\u00e7\u00e3o em seu aplicativo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Envio de e-mails de faturas mensais usando o Heroku Scheduler<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para enviar faturas mensais \u00e0 sua base de usu\u00e1rios, voc\u00ea precisar\u00e1 programar para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enviar e-mails de faturas personalizados para centenas, milhares ou milh\u00f5es de clientes.<\/li>\n\n\n\n<li>De fato agendar o envio desses e-mails.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos analisar cada um deles em detalhes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Envio de e-mails de faturas personalizados<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para os fins deste tutorial, presumo que voc\u00ea j\u00e1 tem uma conta do Mailgun. A partir da\u00ed, voc\u00ea vai querer enviar sua lista de clientes para o Mailgun, com as vari\u00e1veis que quiser inserir de forma din\u00e2mica nos e-mails, como um arquivo JSON, e o HTML ou corpo de texto do e-mail. Aqui est\u00e1 o c\u00f3digo.<\/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                                PHP                            <\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    class MailgunGateway include Rails.application.routes.url_helpers def send_batch_message(users) RestClient.post(messaging_api_end_point, from: &quot;Mailgun Demo &quot;, to: users.map(&amp;:email).join(&quot;, &quot;), subject: &quot;Monthly Billing Info&quot;, html: billing_info_text, :&quot;h:Reply-To&quot; =&gt; &quot;billing@#{ENV[&quot;mailgun_domain_name&quot;]}&quot;, :&quot;recipient-variables&quot; =&gt; recipient_variables(billing_recipients) ) end private def api_key @api_key ||= ENV[&quot;mailgun_api_key&quot;] end def messaging_api_end_point @messaging_api_end_piont ||= &quot;https:\/\/api:#{api_key}@api.mailgun.net\/v2\/#{ENV[&quot;mailgun_domain_name&quot;]}\/messages&quot; end def billing_recipients @users ||= User.where(locked: false) end def recipient_variables(recipients) vars = recipients.map do |recipient| &quot;&quot;#{recipient.email}&quot;: {&quot;name&quot;:&quot;#{recipient.fullname}&quot;}&quot; end &quot;{#{vars.join(&#039;, &#039;)}}&quot; end def billing_info_text &lt;&lt;-EMAIL  Hi %recipient.name%, &lt;p&gt; Your bill for the current month is now available, please click on &lt;br \/&gt; #{billing_url} &lt;br \/&gt; to see details. &lt;\/p&gt; &lt;p&gt;Reply to this email directly&lt;\/p&gt;  EMAIL end end\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\">Vamos analisar o que fizemos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No m\u00e9todo\u00a0<i>sendbatchmessages<\/i>, usamos as vari\u00e1veis de destinat\u00e1rio para que possamos definir vari\u00e1veis para personalizar cada e-mail. Voc\u00ea notar\u00e1 que estamos inserindo o primeiro nome da pessoa no e-mail. Voc\u00ea pode redigir um e-mail de fatura que inclua detalhes como n\u00famero da conta, conta da fatura ou qualquer outra coisa que quiser, mas eu prefiro manter a simplicidade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Envio autom\u00e1tico de e-mails de faturamento mensais com o Heroku Scheduler<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Assim que definirmos o m\u00e9todo de cria\u00e7\u00e3o e envio de e-mails via Mailgun, precisamos criar um c\u00f3digo para acionar esse m\u00e9todo como gatilho automaticamente. Escolhi implantar esse aplicativo no Heroku e estou usando o Heroku Scheduler porque ele d\u00e1 conta do recado, \u00e9 um complemento gratuito e f\u00e1cil de integrar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Heroku Scheduler vai executar uma tarefa Rake especificada em um hor\u00e1rio especificado. Ent\u00e3o, aqui precisamos compilar uma tarefa Rake para enviar e-mails de faturamento usando o Mailgun em\u00a0<i>lib\/tasks\/scheduler.rake<\/i>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiro, quando enviamos faturas de faturamento para nossa base de usu\u00e1rios, precisamos encontrar os endere\u00e7os de e-mail do cliente para o qual enviaremos a fatura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No esquema de banco de dados muito simples deste aplicativo de exemplo, temos um atributo\u00a0<i>:locked<\/i>\u00a0que \u00e9 definido como True quando houve devolu\u00e7\u00e3o de um e-mail antes (mais sobre isso abaixo). Portanto, nossa consulta simplesmente extrai toda a nossa base de usu\u00e1rios na qual esse campo \u00e9 False.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para realmente enviar o e-mail, estou usando o Mailgun\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/user_manual.html?highlight=batch%20sending#batch-sending\" target=\"_tabs\" rel=\"noopener noreferrer\">Envio em lote<\/a>. Como o n\u00famero m\u00e1ximo de destinat\u00e1rios permitidos por chamada de API \u00e9 de 1 000, usamos o\u00a0<i>findinbatches<\/i>\u00a0para enviar e-mails de faturamento ao Mailgun em lotes de 1 000 destinat\u00e1rios.<\/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                                PHP                            <\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    desc &quot;This task is called by the Heroku scheduler add-on&quot;\r\ntask :send_billing_info =&gt; :environment do\r\n  if DateTime.now.mday == 1\r\n    User.where(locked: false).find_in_batches(batch_size: 1000) do |group|\r\n      MailgunGateway.new.send_batch_message(group)\r\n    end\r\n  end\r\nend\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\">Como a configura\u00e7\u00e3o de \u201cFREQUENCY\u201d (Frequ\u00eancia) do Heroku Scheduler tem apenas tr\u00eas seletores \u2014 \u201cdaily\u201d (diariamente), \u201chourly\u201d (por hora) e \u201cevery 10 mins\u201d (a cada 10 min) \u2014, precisamos verificar se o dia atual \u00e9 o primeiro dia do m\u00eas usando\u00a0<code>if DateTime.now.mday == 1.<\/code>\u00a0Se for, o e-mail ser\u00e1 enviado. Se n\u00e3o, nenhum e-mail ser\u00e1 enviado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recebimento de notifica\u00e7\u00e3o de e-mails com devolu\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando houver devolu\u00e7\u00e3o de um e-mail, o Mailgun enviar\u00e1 um POST por meio do webhook de devolu\u00e7\u00e3o ao nosso aplicativo. Voc\u00ea precisa definir a URL de callback em \u201cBounces\u201d no Painel de Controle do Mailgun. Nesta demonstra\u00e7\u00e3o, a minha URL de callback \u00e9\u00a0<code>\"http:\/\/mailgun-demo.herokuapp.com\/api\/bounced_mails\"<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o aplicativo receber a notifica\u00e7\u00e3o de devolu\u00e7\u00e3o, ele encontrar\u00e1 o endere\u00e7o de e-mail no banco de dados do cliente e definir\u00e1 o status da pessoa como bloqueado, de modo que o aplicativo n\u00e3o enviar\u00e1 e-mails de faturamento para ela at\u00e9 que ela atualize o seu endere\u00e7o de e-mail.<\/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                                PHP                            <\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    class Api::BouncedMailsController &lt; ApplicationController\r\n  skip_before_filter :verify_authenticity_token\r\n  def create\r\n    if verify(ENV[&quot;mailgun_api_key&quot;], params[:token], params[:timestamp], params[:signature])\r\n      user = User.find_by_email(params[:recipient])\r\n      if user &amp;&amp; params[:event] == &quot;bounced&quot;\r\n        user.lock!\r\n      end\r\n      head(200)\r\n    end\r\n  end\r\n  private\r\n  def verify(api_key, token, timestamp, signature)\r\n    signature == OpenSSL::HMAC.hexdigest(\r\n      OpenSSL::Digest::Digest.new(&#039;sha256&#039;),\r\n      api_key,\r\n      &#039;%s%s&#039; % [timestamp, token])\r\n  end\r\nend\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\">O\u00a0<i>user.lock!<\/i>\u00a0serve para definir o status como bloqueado, para que nossa tarefa Rake nunca envie e-mails para essa pessoa. Esse m\u00e9todo \u00e9 definido no modelo User.<\/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                                PHP                            <\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    class User &lt; ActiveRecord::Base\r\n  \u2026\r\n  def lock!\r\n    self.locked = true\r\n    save(validate: false)\r\n  end\r\nend\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\">O m\u00e9todo\u00a0<i>verify<\/i>\u00a0serve para verificar se o webhook \u00e9 origin\u00e1rio do Mailgun; caso contr\u00e1rio, qualquer outra pessoa poderia enviar um POST falso para bloquear a base de usu\u00e1rios no seu aplicativo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para obter mais detalhes sobre a configura\u00e7\u00e3o de webhooks, voc\u00ea pode ler a documenta\u00e7\u00e3o do Mailgun \u2013\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/api-webhooks.html\" target=\"_tabs\" rel=\"noopener noreferrer\">Eventos\/Webhooks<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No final, retornamos um cabe\u00e7alho 200 para informar ao Mailgun que essa intera\u00e7\u00e3o foi bem-sucedida; caso contr\u00e1rio, o Mailgun achar\u00e1 que nosso servidor est\u00e1 fora do ar e continuar\u00e1 tentando chamar o nosso webhook.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/gist.github.com\/poiyzy\/5045565#displaying-the-flash-screen-for-a-user-to-update-their-email\" target=\"_tabs\" rel=\"noopener noreferrer\"><\/a>Exibi\u00e7\u00e3o da tela em flash para que a pessoa atualize o e-mail<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Assim que o aplicativo souber quais contas t\u00eam um endere\u00e7o de e-mail inv\u00e1lido, precisaremos exibir uma tela em flash no pr\u00f3ximo login com uma solicita\u00e7\u00e3o para confirmar as informa\u00e7\u00f5es de contato em arquivo.<\/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                                PHP                            <\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    class SessionsController &lt; ApplicationController\r\n  def new\r\n    redirect_to home_path if current_user\r\n  end\r\n  def create\r\n    user = User.find_by_email(params[:email])\r\n    if user &amp;&amp; user.authenticate(params[:password])\r\n      session[:user_id] = user.id\r\n      if user.locked\r\n        flash[:error] = &quot;Your Email Address is invalid, please update it.&quot;\r\n        redirect_to edit_user_path(current_user)\r\n      else\r\n        redirect_to home_path\r\n      end\r\n    else\r\n      flash[:error] = &quot;Incorrect email or password. Please try again.&quot;\r\n      redirect_to sign_in_path\r\n    end\r\n  end\r\n  def destroy\r\n    session[:user_id] = nil\r\n    redirect_to root_path\r\n  end\r\nend\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\">Quando o endere\u00e7o de e-mail for atualizado, definiremos o atributo de bloqueio novamente como false para que essas pessoas continuem a receber e-mails.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Simples assim. Agora, quando houver devolu\u00e7\u00e3o dos e-mails da sua base de usu\u00e1rios, voc\u00ea poder\u00e1 solicitar que eles atualizem suas informa\u00e7\u00f5es, proporcionando uma \u00f3tima experi\u00eancia de uso com o benef\u00edcio adicional de manter os dados dos seus clientes atualizados.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este blog foi escrito por Roy Young. Roy atua com desenvolvimento Ruby e est\u00e1 aprimorando suas skills na Tealeaf Academy.<\/p>\n<p>Ah, a tabela &#8220;users&#8221;.<\/p>\n","protected":false},"author":13,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24832","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Faz sentido que manter sua tabela da base de usu\u00e1rios atualizada com as informa\u00e7\u00f5es de contato corretas seja um bom investimento para o seu neg\u00f3cio. Leia mais \u2013\" \/>\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\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Faz sentido que manter sua tabela da base de usu\u00e1rios atualizada com as informa\u00e7\u00f5es de contato corretas seja um bom investimento para o seu neg\u00f3cio. Leia mais \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.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=\"6 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\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/\",\"name\":\"Abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T17:52:09+00:00\",\"description\":\"Faz sentido que manter sua tabela da base de usu\u00e1rios atualizada com as informa\u00e7\u00f5es de contato corretas seja um bom investimento para o seu neg\u00f3cio. Leia mais \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\\\/#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\":\"Como criar uma abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados\"}]},{\"@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":"Abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados - Transactional Email API Service For Developers | Mailgun","description":"Faz sentido que manter sua tabela da base de usu\u00e1rios atualizada com as informa\u00e7\u00f5es de contato corretas seja um bom investimento para o seu neg\u00f3cio. Leia mais \u2013","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\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/","og_locale":"pt_BR","og_type":"article","og_title":"Abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados - Transactional Email API Service For Developers | Mailgun","og_description":"Faz sentido que manter sua tabela da base de usu\u00e1rios atualizada com as informa\u00e7\u00f5es de contato corretas seja um bom investimento para o seu neg\u00f3cio. Leia mais \u2013","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/","name":"Abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T17:52:09+00:00","description":"Faz sentido que manter sua tabela da base de usu\u00e1rios atualizada com as informa\u00e7\u00f5es de contato corretas seja um bom investimento para o seu neg\u00f3cio. Leia mais \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/criando-abordagem-baseada-dados-manter-emails-base-usuarios-atualizados\/#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":"Como criar uma abordagem baseada em dados para manter os e-mails da base de usu\u00e1rios atualizados"}]},{"@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\/24832","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\/13"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24832\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=24832"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=24832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}