{"id":24546,"date":"2026-09-16T14:44:04","date_gmt":"2026-09-16T14:44:04","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking-2\/"},"modified":"2026-09-16T14:44:04","modified_gmt":"2026-09-16T14:44:04","slug":"demo-meteor-based-emailer-with-geolocation-and-ua-tracking","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","title":{"rendered":"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En enero\u00a0<a href=\"\/?blog_category=native-mailgun-integration-lets-meteor-apps-send-email\" target=\"_tabs\" rel=\"noopener noreferrer\">anunciamos que nos hab\u00edamos asociado con Meteor\u00a0<\/a>para potenciar el back-end de email que incluye la plataforma Meteor. Para ver un ejemplo, echa un vistazo a\u00a0<a href=\"\/?blog_category=create-a-web-app-from-scratch-in-under-5-minutes-with\" target=\"_tabs\" rel=\"noopener noreferrer\">este formulario de registro de eventos<\/a> sobre el que escribimos hace poco en el blog, pero hoy queremos mostrarte otra demo de la integraci\u00f3n de Mailgun con Meteor.<\/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-7058\"><p class=\"h5 m-0\" id=\"toc-title-7058\">\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=\"#geolocalizacion-para-email\">Geolocalizaci\u00f3n para email<\/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=\"#la-demo\">La 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=\"#envio-de-emails-con-meteor\">Env\u00edo de emails con 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=\"#configuracion-para-el-envio-mediante-api\">Configuraci\u00f3n para el env\u00edo mediante 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-oeste-lado-este-lado-del-servidor\">Lado oeste\u2026 lado este\u2026 lado del 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=\"#configuracion-de-webhooks\">Configuraci\u00f3n de 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=\"#uniendo-todas-las-piezas\">Uniendo todas las piezas<\/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=\"#hecho\">\u00a1Hecho!<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Geolocalizaci\u00f3n para email<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hace unas semanas lanzamos nuevos par\u00e1metros para nuestros\u00a0<a href=\"\/?blog_category=geolocation-and-user-agent-detection-now-available-in-web-hooks\" target=\"_tabs\" rel=\"noopener noreferrer\">webhooks con los que obtener informaci\u00f3n de geolocalizaci\u00f3n y del agente de usuario de tus emails<\/a>\u00a0sin tener que analizar las cadenas del agente de usuario ni utilizar bibliotecas de b\u00fasqueda de IP. Pensamos que ser\u00eda divertido crear una peque\u00f1a app con Meteor para demostrar lo f\u00e1cil que resulta consumir estos nuevos par\u00e1metros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La demo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Haz clic en la siguiente demo para verla en acci\u00f3n y\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-meteor-demo\" target=\"_tabs\" rel=\"noopener noreferrer\">descarga el c\u00f3digo fuente de la app desde Github<\/a>\u00a0para que puedas experimentar con ella y crear tu propia app o informe. Tras probar la demo, vuelve por aqu\u00ed para ver con m\u00e1s detalle c\u00f3mo la construimos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Env\u00edo de emails con Meteor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes enviar emails con Mailgun a trav\u00e9s de SMTP est\u00e1ndar o con la API HTTP de Mailgun. Si solo quieres una funci\u00f3n de env\u00edo SMTP sencilla en tu aplicaci\u00f3n de Meteor, empieza a\u00f1adiendo el paquete de email a tu proyecto.<\/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\">Al ejecutar ese comando, se configurar\u00e1 autom\u00e1ticamente una cuenta de Mailgun predeterminada, y Meteor establecer\u00e1 la variable de entorno MAIL_URL que almacena la configuraci\u00f3n SMTP.<b>\u00a0<\/b>(Consulta la documentaci\u00f3n de email en el sitio web de Meteor\u00a0<a href=\"http:\/\/docs.meteor.com\/#email\" target=\"_tabs\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>. Como se menciona en el \u00faltimo p\u00e1rrafo, puedes probar el env\u00edo incluso sin a\u00f1adir el paquete de email: por defecto, los emails se mostrar\u00e1n directamente en la consola).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para esta demo, vamos a ir m\u00e1s all\u00e1 del env\u00edo b\u00e1sico de email, por lo que usaremos una cuenta de Mailgun directamente junto a la API HTTP (por cierto, con la API, Mailgun ensambla el MIME del lado del servidor, de modo que es un poco m\u00e1s f\u00e1cil de manejar, incluso en env\u00edos de email sencillos).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuraci\u00f3n para el env\u00edo mediante API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para empezar, obt\u00e9n tu clave de API en el panel de control de Mailgun, la ver\u00e1s al iniciar sesi\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La API se invocar\u00e1 con una sencilla solicitud HTTP POST. Tendr\u00e1s que a\u00f1adir el paquete http de Meteor a tu proyecto.<\/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\">Una vez instalado el paquete http, puedes realizar cualquier solicitud HTTP en tu aplicaci\u00f3n: GET, POST, PUT, DELETE, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos al grano: a continuaci\u00f3n tienes un ejemplo de c\u00f3mo enviar un email con Mailgun mediante la 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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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 a repasar algunos detalles aqu\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes ver que establecemos un encabezado de autenticaci\u00f3n con esta solicitud mediante una variable de entorno llamada MAILGUN_API_KEY. A\u00fan no se pueden configurar variables de entorno en la plataforma de alojamiento de Meteor (p. ej., meteor deploy), pero si tu app de Meteor se ejecuta en Heroku o en tu propia configuraci\u00f3n, seguramente sea buena idea mantener las credenciales, como tu clave de API, guardadas a buen recaudo en una variable de entorno. Si quieres establecer una variable de entorno con Meteor, solo tienes que hacer esto:<\/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\">Ten en cuenta que tambi\u00e9n a\u00f1adimos algunos valores de seguimiento personalizados.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Establecer la opci\u00f3n de seguimiento en \u201ctrue\u201d para indicar a Mailgun que env\u00ede el webhook al abrir el email.<\/li>\n\n\n\n<li>Asignar un valor JSON al campo del encabezado X-Mailgun-Variable. Esto demuestra la potencia de los webhooks: podemos guardar algunos detalles importantes o valores \u00fanicos en este campo del encabezado y recuperarlos cuando Mailgun env\u00ede el webhook a nuestro servidor.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo en concreto, el env\u00edo del email se acciona mediante un sencillo bot\u00f3n HTML desde el lado del cliente. Envolvimos la funci\u00f3n de env\u00edo de email en un m\u00e9todo de Meteor para que pueda accederse a ella desde el cliente.\u00a0<a href=\"\/?blog_category=native-mailgun-integration-lets-meteor-apps-send-email\" target=\"_tabs\" rel=\"noopener noreferrer\">Ver el c\u00f3digo de env\u00edo de email aqu\u00ed<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recuerda mantener los elementos importantes, como las credenciales de la API, en la carpeta del servidor de tu aplicaci\u00f3n de Meteor. Los archivos de la carpeta del servidor no se env\u00edan al cliente. Sin embargo, otros archivos, ya est\u00e9n en la carpeta del cliente o en la ra\u00edz de la aplicaci\u00f3n, s\u00ed pueden llegar al navegador del cliente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lado oeste\u2026 lado este\u2026 lado del servidor\u2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando Mailgun detecte que nuestro email se ha abierto, nos enviar\u00e1 una solicitud POST. Como con cualquier visita, queremos que el webhook se sienta como en casa y sepa que ha llegado al destino correcto: \u00a1aqu\u00ed no hay errores 404! El enrutamiento del lado del servidor no est\u00e1 integrado en Meteor todav\u00eda, pero no te preocupes: gracias a la flexibilidad de la plataforma, podemos a\u00f1adir una ruta sencilla para el webhook de Mailgun sin tener que desmontar nada. Hay que escribir un poco m\u00e1s de c\u00f3digo para configurar una ruta del lado del 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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\">Hacia la mitad, ver\u00e1s d\u00f3nde realizamos un c\u00e1lculo r\u00e1pido de HMAC para confirmar la identidad del remitente. Mailgun incluye un token de firma en cada webhook y podemos verificar su validez aplicando una funci\u00f3n hash al token proporcionado y a la marca de tiempo con nuestra clave de API. No es un requisito, sino una recomendaci\u00f3n para cualquier aplicaci\u00f3n orientada al p\u00fablico. Esto es muy f\u00e1cil de hacer con el m\u00e9todo HMAC que se encuentra en la biblioteca \u201ccrypto\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con esta ruta lista y activada en nuestro servidor, podemos preparar el entorno de Mailgun para nuestros webhooks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuraci\u00f3n de webhooks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si inicias sesi\u00f3n en Mailgun, ver\u00e1s la pesta\u00f1a de seguimiento en la parte superior de tu panel de control. En la parte inferior de la p\u00e1gina de seguimiento, ver\u00e1s un campo para introducir el destino de las solicitudes POST que Mailgun enviar\u00e1 cada vez que se abra un email.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uniendo todas las piezas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En esta app de demostraci\u00f3n, vamos a asignar un ID \u00fanico a cada sesi\u00f3n del navegador, el cual incluiremos en la llamada de la API de Mailgun (en ese encabezado HTTP X-Mailgun-Variables que enviamos antes). Cuando el webhook de apertura regrese, podremos analizar no solo los detalles de geolocalizaci\u00f3n, sino tambi\u00e9n ese c\u00f3digo de ID de sesi\u00f3n \u00fanico. As\u00ed sabremos a qu\u00e9 sesi\u00f3n de navegador pertenece el webhook, y podremos mostrar la ubicaci\u00f3n correcta en el mapa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gracias a la potencia del marco de Meteor, el navegador (el cliente) puede observar los cambios en el conjunto de datos de los webhooks recibidos. Al utilizar el evento de colecci\u00f3n a\u00f1adido en el cliente, este se actualiza inmediatamente tras a\u00f1adir otro evento de webhook en nuestra base de datos. Dentro del evento a\u00f1adido, solo tenemos que generar un marcador de ubicaci\u00f3n de Google Maps utilizando los valores de ciudad, regi\u00f3n y pa\u00eds incluidos en el webhook. Aqu\u00ed tambi\u00e9n es donde comprobaremos el ID \u00fanico con nuestro ID de sesi\u00f3n actual: si coinciden, el marcador se colocar\u00e1 al frente del mapa (con z-index) con un icono rojo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El \u00faltimo fragmento de c\u00f3digo del lado del cliente consiste en garantizar que cada marcador del mapa tenga una ventana emergente con algunos detalles adicionales del navegador que Mailgun tambi\u00e9n incluye en los datos del webhook. Los webhooks de seguimiento de Mailgun tambi\u00e9n incluyen datos muy \u00fatiles, como el sistema operativo, qu\u00e9 cliente de email se utiliz\u00f3 para abrir\/leer el mensaje o el tipo de dispositivo (ideal para comparar el uso en dispositivos m\u00f3viles frente a equipos de escritorio).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00a1Hecho!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Y ya est\u00e1: tu aplicaci\u00f3n de Meteor est\u00e1 lista para recibir webhooks de seguimiento y de apertura por parte de Mailgun, de forma segura y fiable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para ver todo esto en acci\u00f3n, visita el sitio web de la demo y el c\u00f3digo fuente en\u00a0<a href=\"https:\/\/github.com\/mailgun\/mailgun-meteor-demo\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Github<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n&#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-24546","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: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n...\" \/>\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\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/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=\"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\\\/es\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/\",\"name\":\"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/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-16T14:44:04+00:00\",\"description\":\"En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/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\\\/es\\\/blog\\\/product\\\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/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\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA - Transactional Email API Service For Developers | Mailgun","description":"En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n...","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\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","og_locale":"es_ES","og_type":"article","og_title":"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA - Transactional Email API Service For Developers | Mailgun","og_description":"En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n...","og_url":"https:\/\/www.mailgun.com\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","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-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\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","url":"https:\/\/www.mailgun.com\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/","name":"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/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-16T14:44:04+00:00","description":"En enero anunciamos que nos hab\u00edamos asociado con Meteor para potenciar el back-end de email que incluye la plataforma Meteor. M\u00e1s informaci\u00f3n...","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/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\/es\/blog\/product\/demo-meteor-based-emailer-with-geolocation-and-ua-tracking\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"Demo: app de email en Meteor con geolocalizaci\u00f3n y seguimiento de UA"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24546\/revisions"}],"predecessor-version":[{"id":24547,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24546\/revisions\/24547"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=24546"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=24546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}