{"id":23993,"date":"2026-09-16T10:54:49","date_gmt":"2026-09-16T10:54:49","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking-2\/"},"modified":"2026-09-16T10:54:50","modified_gmt":"2026-09-16T10:54:50","slug":"demo-meteor-based-emailer-with-geolocation-and-ua-tracking","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","title":{"rendered":"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Em janeiro\u00a0<a href=\"\/?blog_category=native-mailgun-integration-lets-meteor-apps-send-email\" target=\"_tabs\" rel=\"noopener noreferrer\">anunciamos que fizemos uma parceria com o Meteor\u00a0<\/a>para alimentar o back-end de e-mail que acompanha a plataforma Meteor. Para ver um exemplo, confira\u00a0<a href=\"\/?blog_category=create-a-web-app-from-scratch-in-under-5-minutes-with\" target=\"_tabs\" rel=\"noopener noreferrer\">este formul\u00e1rio de inscri\u00e7\u00e3o em evento<\/a> sobre o qual publicamos recentemente, mas hoje queremos demonstrar outro exemplo da integra\u00e7\u00e3o Meteor+Mailgun.<\/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-8422\"><p class=\"h5 m-0\" id=\"toc-title-8422\">\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=\"#geolocalizacao-para-e-mail\">Geolocaliza\u00e7\u00e3o para 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=\"#a-demo\">A demo<\/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=\"#enviando-e-mail-com-o-meteor\">Enviando e-mail com o Meteor<\/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=\"#configurando-o-envio-via-api\">Configurando o envio via API<\/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=\"#lado-de-ca-lado-de-la-lado-do-servidor\">Lado de c\u00e1\u2026 lado de l\u00e1\u2026 lado do servidor\u2026<\/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=\"#configurando-webhooks\">Configurando webhooks<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#juntando-todas-as-pecas\">Juntando todas as pe\u00e7as<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">08<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#pronto\">Pronto!<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Geolocaliza\u00e7\u00e3o para e-mail<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas semanas atr\u00e1s, lan\u00e7amos novos par\u00e2metros para os nossos\u00a0<a href=\"\/?blog_category=geolocation-and-user-agent-detection-now-available-in-web-hooks\" target=\"_tabs\" rel=\"noopener noreferrer\">webhooks para obter informa\u00e7\u00f5es de geolocaliza\u00e7\u00e3o e user-agent dos seus e-mails<\/a>\u00a0sem precisar analisar as strings de UA e usar bibliotecas de pesquisa de IP. Achamos que seria divertido criar um pequeno aplicativo no Meteor para mostrar como \u00e9 f\u00e1cil consumir esses novos par\u00e2metros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A demo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Clique na demo abaixo para v\u00ea-la em a\u00e7\u00e3o e\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-meteor-demo\" target=\"_tabs\" rel=\"noopener noreferrer\">baixar o c\u00f3digo-fonte do aplicativo no GitHub<\/a>\u00a0para que voc\u00ea possa explor\u00e1-lo e criar o seu pr\u00f3prio aplicativo ou relat\u00f3rio. Depois de explorar a demo, volte aqui para detalharmos como a desenvolvemos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enviando e-mail com o Meteor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode enviar e-mails com o Mailgun via SMTP padr\u00e3o ou com a API HTTP do Mailgun. Se voc\u00ea quer apenas uma funcionalidade simples de envio por SMTP no seu aplicativo Meteor, comece adicionando o pacote de e-mail ao seu projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>&gt;&gt; meteor add email<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s executar esse comando, voc\u00ea ter\u00e1 uma conta padr\u00e3o do Mailgun configurada automaticamente, e o Meteor definir\u00e1 de forma autom\u00e1tica a vari\u00e1vel de ambiente MAIL_URL que armazena a configura\u00e7\u00e3o SMTP.<b>\u00a0<\/b>(Confira a documenta\u00e7\u00e3o de e-mail no site do Meteor\u00a0<a href=\"http:\/\/docs.meteor.com\/#email\" target=\"_tabs\" rel=\"noopener noreferrer\">aqui<\/a>. Como mencionado no \u00faltimo par\u00e1grafo, voc\u00ea pode testar o envio mesmo sem adicionar o pacote de e-mail: por padr\u00e3o, os e-mails ser\u00e3o exibidos diretamente no console).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para esta demo, vamos al\u00e9m do envio b\u00e1sico de e-mail, por isso usamos uma conta do Mailgun diretamente com a API HTTP (ali\u00e1s, com a API, o Mailgun monta o MIME no lado do servidor, o que torna o processo um pouco mais f\u00e1cil, mesmo em envios simples de e-mail).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurando o envio via API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para come\u00e7ar, pegue a sua chave de API no painel de controle do Mailgun. Ela aparecer\u00e1 assim que voc\u00ea fizer o login.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A chamada para a API ser\u00e1 feita com uma simples solicita\u00e7\u00e3o HTTP POST. Voc\u00ea precisar\u00e1 adicionar o pacote http do Meteor ao seu projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>&gt;&gt; meteor add http<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depois que o pacote http for instalado, voc\u00ea poder\u00e1 executar qualquer solicita\u00e7\u00e3o HTTP: GET, POST, PUT, DELETE etc. no seu aplicativo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Indo direto \u00e0 parte mais interessante: abaixo est\u00e1 um exemplo de como voc\u00ea pode enviar um e-mail com o Mailgun via API:<\/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                                    Meteor.http.post(&#039;https:\/\/api.mailgun.net\/v2\/your-api-domain\/messages&#039;,  \r\n    {auth:&quot;api:&quot; + process.env.MAILGUN_API_KEY,\r\n    params: {&quot;from&quot;:&quot;Dev McCool  &quot;,\r\n                     &quot;to&quot;:[to],\r\n                      &quot;subject&quot;:&quot;Behold: the power of Meteor and Mailgun&quot;,\r\n                      &quot;html&quot;:\u201dA &lt;b&gt;bold&lt;\/b&gt; greeting goes here\u201d,\r\n                      &quot;h:X-Mailgun-Variables&quot;:JSON.stringify({tracking_id:my_tracking_var}),\r\n                      &quot;o:tracking&quot;:&#039;True\u2019 }}, function(error, result) {\r\n                      \/\/handle error, result (should be 200 OK)\r\n                     }\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\">Vamos analisar alguns detalhes aqui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como \u00e9 poss\u00edvel notar, estamos definindo um cabe\u00e7alho de autentica\u00e7\u00e3o com essa solicita\u00e7\u00e3o usando uma vari\u00e1vel de ambiente chamada MAILGUN_API_KEY. Ainda n\u00e3o \u00e9 poss\u00edvel definir vari\u00e1veis de ambiente na plataforma de hospedagem do Meteor (por exemplo, meteor deploy). Por\u00e9m, se voc\u00ea estiver executando o seu aplicativo Meteor no Heroku ou na sua pr\u00f3pria configura\u00e7\u00e3o, \u00e9 uma boa ideia manter credenciais como a sua chave de API seguras em uma vari\u00e1vel de ambiente. Se quiser definir uma vari\u00e1vel de ambiente com o Meteor, basta fazer o seguinte:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>process.env['MAILGUN_API_KEY'] = \"my-mailgun-key\";<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Observe tamb\u00e9m que estamos adicionando alguns valores personalizados de rastreamento aqui.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Definimos a op\u00e7\u00e3o de rastreamento como &#8220;true&#8221; para avisar ao Mailgun que deve disparar o webhook quando o e-mail for aberto.<\/li>\n\n\n\n<li>Definimos um valor JSON no campo de cabe\u00e7alho X-Mailgun-Variable. Isso demonstra o poder dos webhooks: podemos armazenar detalhes importantes ou valores exclusivos nesse campo de cabe\u00e7alho e recuper\u00e1-los quando o Mailgun disparar o webhook para o nosso servidor.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Neste exemplo espec\u00edfico, o envio do e-mail \u00e9 acionado por um simples bot\u00e3o em HTML no lado do cliente. Agrupamos a funcionalidade de envio de e-mail em um m\u00e9todo do Meteor, permitindo o acesso a partir do cliente.\u00a0<a href=\"\/?blog_category=native-mailgun-integration-lets-meteor-apps-send-email\" target=\"_tabs\" rel=\"noopener noreferrer\">Veja o c\u00f3digo de envio de e-mail aqui<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lembre-se de manter informa\u00e7\u00f5es importantes, como as credenciais da API, na pasta do servidor do seu aplicativo Meteor. Os arquivos na pasta do servidor n\u00e3o s\u00e3o enviados para o cliente. No entanto, outros arquivos, seja na pasta do cliente ou na raiz da pasta do aplicativo, podem acabar chegando ao navegador do cliente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lado de c\u00e1\u2026 lado de l\u00e1\u2026 lado do servidor\u2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o Mailgun detectar que o nosso e-mail foi aberto, enviar\u00e1 uma solicita\u00e7\u00e3o POST para n\u00f3s. Como qualquer convidado, queremos que o webhook se sinta bem-vindo e saiba que chegou ao destino certo: nada de erros 404 aqui! O roteamento no lado do servidor ainda n\u00e3o est\u00e1 integrado ao Meteor, mas n\u00e3o se preocupe: gra\u00e7as \u00e0 flexibilidade da plataforma, podemos adicionar uma rota simples para o webhook do Mailgun sem precisar desmontar nada. H\u00e1 um pouco mais de c\u00f3digo envolvido na configura\u00e7\u00e3o de uma rota no lado do servidor:<\/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                                    if (Meteor.isServer) {\r\n\r\n  var app = __meteor_bootstrap__.app\r\n  var connect = Npm.require(&#039;connect&#039;);\r\n  var Fiber = Npm.require(&#039;fibers&#039;);\r\n  var crypto = Npm.require(&#039;crypto&#039;);\r\n\r\n  var router = connect.middleware.router(function(route)\r\n  {\r\n    route.post(&#039;\/mailgun\/receive&#039;, function(req, res)\r\n    {\r\n      var raw_post_body = &quot;&quot;;\r\n      var post_data = [];\r\n\r\n      req.on(&#039;data&#039;, function (chunk) {\r\n        raw_post_body += chunk.toString();\r\n      });\r\n\r\n      req.on(&#039;end&#039;, function () {\r\n          pairs = raw_post_body.split(&#039;&amp;&#039;);\r\n          for(var i = 0; i &lt; pairs.length; i++) {\r\n            kv = pairs[i].split(&#039;=&#039;);\r\n            post_data[kv[0]]=decodeURIComponent((kv[1]+&#039;&#039;).replace(\/+\/g, &#039;%20&#039;));\r\n          }\r\n\r\n          \/\/Verify sender is Mailgun\r\n          var sig = crypto.createHmac(&#039;sha256&#039;, process.env.MAILGUN_API_KEY).update(post_data[&#039;timestamp&#039;]+post_data[&#039;token&#039;]).digest(&#039;hex&#039;);\r\n          if(sig !== post_data[&#039;signature&#039;]) {\r\n            res.writeHead(403);\r\n            res.end();\r\n          }\r\n          else {\r\n            Fiber(function() {\r\n                Meteor.call(&quot;publishGeo&quot;, post_data);\r\n                res.writeHead(200);\r\n                res.end();\r\n            }).run();\r\n          }\r\n      });\r\n    });\r\n  });\r\n\r\n  app.use(router);\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\">Mais ou menos na metade, voc\u00ea ver\u00e1 o trecho onde realizamos um r\u00e1pido c\u00e1lculo HMAC para confirmar a identidade do remetente. O Mailgun fornece um token de assinatura com cada webhook, e podemos verificar a validade dessa assinatura fazendo o hash do token fornecido e do carimbo de data e hora com a nossa chave de API. N\u00e3o \u00e9 um requisito obrigat\u00f3rio, mas apenas uma boa pr\u00e1tica para qualquer aplicativo voltado ao p\u00fablico. \u00c9 muito simples fazer isso utilizando o m\u00e9todo HMAC encontrado na biblioteca crypto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com essa rota configurada e ativada no nosso servidor, podemos preparar o lado do Mailgun para os nossos webhooks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurando webhooks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea fizer login no Mailgun, ver\u00e1 a aba de rastreamento na parte superior do seu painel. Na parte inferior da p\u00e1gina de rastreamento, h\u00e1 um campo para inserir o destino das solicita\u00e7\u00f5es POST que o Mailgun enviar\u00e1 sempre que um e-mail for aberto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Juntando todas as pe\u00e7as<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Neste aplicativo de demonstra\u00e7\u00e3o, atribu\u00edmos um ID exclusivo a cada sess\u00e3o de navegador, o qual inclu\u00edmos na chamada da API do Mailgun (naquele cabe\u00e7alho HTTP X-Mailgun-Variables que enviamos antes). Quando o webhook de abertura retornar, poderemos inspecionar n\u00e3o apenas os detalhes de geolocaliza\u00e7\u00e3o, mas tamb\u00e9m analisar o c\u00f3digo do ID de sess\u00e3o exclusivo. \u00c9 assim que saberemos a qual sess\u00e3o de navegador o webhook pertence, permitindo exibir a localiza\u00e7\u00e3o correta no mapa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gra\u00e7as ao poder do framework do Meteor, o navegador (o cliente) pode observar qualquer altera\u00e7\u00e3o no conjunto de dados dos webhooks recebidos. Com o evento Collection &#8220;added&#8221; no cliente, o cliente \u00e9 atualizado imediatamente ao adicionarmos outro evento de webhook no nosso banco de dados. Dentro do evento &#8220;added&#8221;, s\u00f3 precisamos gerar um marcador de localiza\u00e7\u00e3o do Google Maps usando os valores de cidade, regi\u00e3o e pa\u00eds contidos no webhook. Aqui tamb\u00e9m verificaremos o ID exclusivo em rela\u00e7\u00e3o ao ID de sess\u00e3o atual. Se eles corresponderem, esse marcador ser\u00e1 posicionado na frente do mapa (com z-index) com um \u00edcone vermelho.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A \u00faltima parte do c\u00f3digo no lado do cliente envolve garantir que cada marcador no mapa tenha um pop-up com outros detalhes do navegador que o Mailgun tamb\u00e9m inclui nos dados do webhook. Os webhooks de rastreamento do Mailgun tamb\u00e9m incluem dados \u00fateis, como o sistema operacional, qual cliente de e-mail foi usado para abrir\/ler a mensagem e o tipo de dispositivo (\u00f3timo para analisar o uso m\u00f3vel em rela\u00e7\u00e3o ao desktop!).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pronto!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 isso: o seu aplicativo Meteor agora est\u00e1 pronto para receber webhooks de rastreamento e de abertura do Mailgun com seguran\u00e7a e confiabilidade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para ver tudo em a\u00e7\u00e3o, acesse o site da demo e o c\u00f3digo-fonte no\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-meteor-demo\/\" target=\"_tabs\" rel=\"noopener noreferrer\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais&#8230;<\/p>\n","protected":false},"author":13,"featured_media":4555,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[22],"class_list":["post-23993","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-product"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais...\" \/>\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\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T10:54:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.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\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/\",\"name\":\"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"datePublished\":\"2026-09-16T10:54:49+00:00\",\"dateModified\":\"2026-09-16T10:54:50+00:00\",\"description\":\"Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#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\":\"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA\"}]},{\"@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":"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA - Transactional Email API Service For Developers | Mailgun","description":"Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais...","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\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","og_locale":"pt_BR","og_type":"article","og_title":"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA - Transactional Email API Service For Developers | Mailgun","og_description":"Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais...","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T10:54:50+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.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\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","name":"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","datePublished":"2026-09-16T10:54:49+00:00","dateModified":"2026-09-16T10:54:50+00:00","description":"Em janeiro, anunciamos a nossa parceria com o Meteor para alimentar o back-end de e-mail integrado \u00e0 plataforma Meteor. Leia mais...","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#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":"Demo: sistema de e-mail baseado no Meteor com geolocaliza\u00e7\u00e3o e rastreamento de UA"}]},{"@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\/23993","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":1,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/23993\/revisions"}],"predecessor-version":[{"id":23994,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/23993\/revisions\/23994"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=23993"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=23993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}