{"id":24473,"date":"2026-09-16T14:42:19","date_gmt":"2026-09-16T14:42:19","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/crear-enfoque-basado-datos-mantener-actualizados-emails\/"},"modified":"2026-09-16T14:42:19","modified_gmt":"2026-09-16T14:42:19","slug":"crear-enfoque-basado-datos-mantener-actualizados-emails","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/","title":{"rendered":"C\u00f3mo crear un enfoque basado en datos para mantener actualizados los emails de tu base de usuarios"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Este blog fue escrito por\u00a0<\/i><a href=\"http:\/\/twitter.com\/poiyzy\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>Roy Young<\/i><\/a><i>. Roy es especialista en desarrollo de Ruby y est\u00e1 perfeccionando sus skills en\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, la tabla de \u201c<i>usuarios\u201d<\/i>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se podr\u00eda decir que es uno de los activos m\u00e1s importantes de una startup. Quienes pecan de cinismo no pueden creer que\u00a0<a href=\"http:\/\/instagram.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Instagram<\/a>\u00a0(\u00a1una app para compartir fotos!) se haya 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\">715 millones de\u00a0$ por Facebook<\/a>\u00a0o que se rumoreara que Mailbox, un cliente de email m\u00f3vil para Gmail (y todav\u00eda en fase beta en muchos aspectos), fuera\u00a0<a href=\"http:\/\/techcrunch.com\/2013\/03\/15\/mailbox-cost-dropbox-around-100-million\/\" target=\"_tabs\" rel=\"noopener noreferrer\">comprada por hasta 100 millones de\u00a0$ por Dropbox<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta visi\u00f3n c\u00ednica suele ser el resultado de un enfoque miope centrado solo en el producto o la tecnolog\u00eda, lo que facilita que estas valoraciones se descarten por absurdas. Sin embargo, tambi\u00e9n hay que tener en cuenta el valor de la totalidad de su base de usuarios y su crecimiento. Estas valoraciones astron\u00f3micas siempre van de la mano de un producto que cuenta con una base de usuarios grande y de r\u00e1pido crecimiento. Por lo tanto, es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. Por supuesto, la parte dif\u00edcil es crear ese crecimiento&#8230; as\u00ed que tendr\u00e1s 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 esa informaci\u00f3n<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, este consejo sobre la \u201cparte f\u00e1cil\u201d es gratis. En esta publicaci\u00f3n, hablar\u00e9 sobre una buena metodolog\u00eda para mantener actualizado el email de tu base de usuarios en una \u00e9poca en la que mucha gente tiene m\u00faltiples direcciones de email y cuentas desechables para muchos de sus servicios.<\/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-8155\"><p class=\"h5 m-0\" id=\"toc-title-8155\">\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-de-la-aplicacion-para-solicitar-la-actualizacion-de-la-direccion-de-email\">L\u00f3gica de la aplicaci\u00f3n para solicitar la actualizaci\u00f3n de la direcci\u00f3n de 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=\"#envio-de-emails-de-facturas-mensuales-mediante-heroku-scheduler\">Env\u00edo de emails de facturas mensuales mediante 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=\"#recepcion-de-notificaciones-de-emails-con-rebotes\">Recepci\u00f3n de notificaciones de emails con rebotes<\/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=\"#mostrar-una-pantalla-flash-para-actualizar-el-email\">Mostrar una pantalla flash para actualizar el email<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">L\u00f3gica de la aplicaci\u00f3n para solicitar la actualizaci\u00f3n de la direcci\u00f3n de email<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando env\u00edas un email a una direcci\u00f3n de email que ya no existe, la parte receptora (por ejemplo, Gmail o Yahoo) te devolver\u00e1 el email con un rebote. Si prestas atenci\u00f3n a estos rebotes, tu app puede reaccionar de forma adecuada, lo que crea una gran experiencia de usuario a la vez que mantiene actualizada tu base de datos de clientes. Este blog describe una aplicaci\u00f3n de muestra creada en Heroku que utiliza Mailgun para escuchar estos emails devueltos, de modo que quienes tengan direcciones de email no v\u00e1lidas puedan seguir recibiendo sus emails de facturas mensuales. Sin embargo, esta misma l\u00f3gica podr\u00eda aplicarse a cualquiera de tus emails, para asegurarte de que tu base de usuarios se mantenga interesada y al d\u00eda con tu empresa por email.<\/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=\"Flujo de trabajo para mantener los contactos actualizados: un proceso de 7 pasos para gestionar los emails rebotados y solicitar actualizaciones a los usuarios\" 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\">He creado un sitio de demostraci\u00f3n para este art\u00edculo y he dejado el c\u00f3digo fuente disponible en\u00a0<a href=\"https:\/\/github.com\/poiyzy\/mailgun_example\" target=\"_tabs\" rel=\"noopener noreferrer\">Github<\/a>. Esta demostraci\u00f3n gu\u00eda a principiantes por todo el proceso de configuraci\u00f3n de esta funcionalidad. Haz clic\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/api-bounces.html\" target=\"_tabs\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>\u00a0si quieres saltar directamente a la integraci\u00f3n de los webhooks de rebote en tu app.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Env\u00edo de emails de facturas mensuales mediante Heroku Scheduler<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para enviar facturas mensuales a tu base de usuarios, tendr\u00e1s que programar lo siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enviar emails de facturas personalizados a cientos, miles o millones de clientes.<\/li>\n\n\n\n<li>Programar el env\u00edo de estos emails.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Analicemos cada paso uno por uno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Env\u00edo de emails de facturas personalizados<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para los fines de este tutorial, asumir\u00e9 que ya tienes una cuenta de Mailgun. A partir de ah\u00ed, enviar\u00e1s tu lista de clientes a Mailgun, junto con cualquier variable que quieras que se inserte din\u00e1micamente en los emails mediante un archivo JSON, adem\u00e1s del cuerpo en HTML o texto del email. Aqu\u00ed tienes el 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=\"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                                    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\">Veamos lo que hemos hecho.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el m\u00e9todo\u00a0<i>sendbatchmessages<\/i>, utilizamos variables de destinatario para poder definir variables con las que personalizar cada email. Notar\u00e1s que insertamos el nombre del usuario en el email. Podr\u00edas redactar un email de factura que incluya detalles como el n\u00famero de cuenta, la cuenta de la factura o cualquier otra cosa que te interese, pero yo voy a simplificarlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Env\u00edo de emails autom\u00e1ticos de facturaci\u00f3n mensual con Heroku Scheduler<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que tengamos nuestro m\u00e9todo para crear y enviar emails a trav\u00e9s de Mailgun, tenemos que escribir un c\u00f3digo que active autom\u00e1ticamente este m\u00e9todo. He elegido desplegar esta app en Heroku y estoy utilizando Heroku Scheduler porque cumple su funci\u00f3n, es un complemento gratuito y es f\u00e1cil de integrar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Heroku Scheduler ejecutar\u00e1 una tarea Rake espec\u00edfica a una hora determinada. As\u00ed que aqu\u00ed tenemos que crear una tarea Rake para enviar emails de facturaci\u00f3n mediante Mailgun en\u00a0<i>lib\/tasks\/scheduler.rake<\/i>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar, cuando enviamos facturas a los usuarios, necesitamos encontrar las direcciones de email de los clientes a los que tenemos que facturar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el sencillo esquema de base de datos de esta app de muestra, tenemos un atributo\u00a0<i>:locked<\/i>\u00a0que se establece en True cuando un email ha tenido un rebote previamente (hablaremos de esto m\u00e1s adelante). Por tanto, nuestra consulta simplemente extrae todos los perfiles de nuestra base de usuarios en los que este campo es False.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para enviar de verdad el email, voy a usar Mailgun\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/user_manual.html?highlight=batch%20sending#batch-sending\" target=\"_tabs\" rel=\"noopener noreferrer\">Env\u00edo por lotes<\/a>. Como el n\u00famero m\u00e1ximo de destinatarios que se permite por llamada a la API es de 1000, utilizamos\u00a0<i>findinbatches<\/i>\u00a0para enviar a Mailgun los emails de facturaci\u00f3n en lotes de 1000 destinatarios.<\/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                                    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\">Debido a que los ajustes de la \u201cFRECUENCIA\u201d de Heroku Scheduler solo tienen tres selectores (\u201cdaily\u201d, \u201chourly\u201d y \u201cevery 10 mins\u201d), debemos comprobar si el d\u00eda actual es el primer d\u00eda del mes mediante\u00a0<code>if DateTime.now.mday == 1.<\/code>\u00a0Si es as\u00ed, se env\u00eda el email. Si no, no hay email.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recepci\u00f3n de notificaciones de emails con rebotes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando un email sufre un rebote, Mailgun enviar\u00e1 un POST a trav\u00e9s del webhook de rebote a nuestra app. Tienes que configurar la URL de devoluci\u00f3n de llamada en la secci\u00f3n \u201cBounces\u201d del Panel de control de Mailgun. En esta demostraci\u00f3n, mi URL de devoluci\u00f3n de llamada es\u00a0<code>\u201chttp:\/\/mailgun-demo.herokuapp.com\/api\/bounced_mails\u201d<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando la app recibe la notificaci\u00f3n de rebote, buscar\u00e1 la direcci\u00f3n de email en la base de datos de clientes y establecer\u00e1 el estado del usuario como bloqueado (locked), de modo que la app no le env\u00ede el email de facturaci\u00f3n hasta que actualice su direcci\u00f3n de email.<\/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                                    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\">El\u00a0<i>user.lock!<\/i>\u00a0sirve para establecer el estado del usuario como bloqueado, para que nuestra tarea Rake nunca env\u00ede emails a este usuario. Este m\u00e9todo se establece en el 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=\"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                                    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\">El m\u00e9todo\u00a0<i>verify<\/i>\u00a0sirve para comprobar que el webhook procede de Mailgun; de lo contrario, cualquiera podr\u00eda enviar un POST falso para bloquear a los usuarios en tu app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para obtener m\u00e1s detalles sobre la configuraci\u00f3n de los webhooks, puedes consultar la documentaci\u00f3n de Mailgun:\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\">Al final, devolvemos un encabezado 200 para indicarle a Mailgun que esta interacci\u00f3n se ha realizado con \u00e9xito; de lo contrario, Mailgun pensar\u00e1 que nuestro servidor est\u00e1 ca\u00eddo y seguir\u00e1 intentando llamar a nuestro 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>Mostrar una pantalla flash para actualizar el email<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que la app sabe qu\u00e9 usuarios tienen una direcci\u00f3n de email no v\u00e1lida, debemos mostrarles una pantalla flash tras su siguiente inicio de sesi\u00f3n, con un aviso para verificar la informaci\u00f3n de contacto registrada.<\/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                                    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\">En cuanto hayan actualizado su direcci\u00f3n de email, volveremos a establecer el atributo \u201clocked\u201d en false para que sigan recibiendo emails.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ya est\u00e1. Ahora, cuando reboten los emails de tu base de usuarios, puedes pedirles que actualicen su informaci\u00f3n. As\u00ed les brindar\u00e1s una gran experiencia de usuario, con la ventaja a\u00f1adida de mantener actualizados los datos de tus clientes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este blog fue escrito por Roy Young. Roy es especialista en desarrollo de Ruby y est\u00e1 perfeccionando sus skills en Tealeaf Academy.<\/p>\n<p>Ah, la tabla de \u201cusuarios\u201d.<\/p>\n","protected":false},"author":13,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24473","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>Enfoque de datos para actualizar emails de usuarios - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. M\u00e1s informaci\u00f3n \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\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enfoque de datos para actualizar emails de usuarios - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. M\u00e1s informaci\u00f3n \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/\" \/>\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\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/\",\"name\":\"Enfoque de datos para actualizar emails de usuarios - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T14:42:19+00:00\",\"description\":\"Es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. M\u00e1s informaci\u00f3n \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/#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\\\/es\\\/blog\\\/it-and-engineering\\\/crear-enfoque-basado-datos-mantener-actualizados-emails\\\/#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\":\"C\u00f3mo crear un enfoque basado en datos para mantener actualizados los emails de tu base de usuarios\"}]},{\"@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":"Enfoque de datos para actualizar emails de usuarios - Transactional Email API Service For Developers | Mailgun","description":"Es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. M\u00e1s informaci\u00f3n \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\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/","og_locale":"es_ES","og_type":"article","og_title":"Enfoque de datos para actualizar emails de usuarios - Transactional Email API Service For Developers | Mailgun","og_description":"Es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. M\u00e1s informaci\u00f3n \u2013","og_url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/","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\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/","url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/","name":"Enfoque de datos para actualizar emails de usuarios - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T14:42:19+00:00","description":"Es l\u00f3gico pensar que mantener la tabla de usuarios actualizada con la informaci\u00f3n de contacto correcta es una buena inversi\u00f3n para tu negocio. M\u00e1s informaci\u00f3n \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/#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\/es\/blog\/it-and-engineering\/crear-enfoque-basado-datos-mantener-actualizados-emails\/#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":"C\u00f3mo crear un enfoque basado en datos para mantener actualizados los emails de tu base de usuarios"}]},{"@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\/24473","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":0,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24473\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=24473"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=24473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}