{"id":25139,"date":"2026-09-16T21:29:37","date_gmt":"2026-09-16T21:29:37","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/handle-incoming-emails-like-a-pro-mailgun-api-2-0-2\/"},"modified":"2026-09-16T21:29:37","modified_gmt":"2026-09-16T21:29:37","slug":"handle-incoming-emails-like-a-pro-mailgun-api-2-0","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/","title":{"rendered":"Maneja los emails entrantes como un profesional [API de Mailgun 2.0]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u00a1Llegar tan atr\u00e1s en nuestro blog es como ver un viejo \u00e1lbum de fotos familiar! Este art\u00edculo se public\u00f3 originalmente en 2011.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enviar emails sol\u00eda ser dif\u00edcil, pero con la\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/api_reference.html\" target=\"_tabs\" rel=\"noopener noreferrer\">API de env\u00edo de emails<\/a>\u00a0dejamos atr\u00e1s el SMTP y el MIME para convertirlo en una experiencia sencilla o, me atrever\u00eda a decir, agradable.<\/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-8614\"><p class=\"h5 m-0\" id=\"toc-title-8614\">\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=\"#las-rutas-de-mailgun-al-rescate\">\u00a1Las rutas de Mailgun al rescate!<\/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=\"#maneja-los-emails-entrantes-como-un-profesional-api-de-mailgun-2-0\">Maneja los emails entrantes como un profesional [API de Mailgun 2.0]<\/a><\/div><\/div><\/nav>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-5059\" width=\"190\" height=\"143\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/incoming.jpeg\" alt=\"Baby with helmet with the word &quot;Incoming!&quot;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, si tu aplicaci\u00f3n necesita participar en conversaciones por email, como suele ser el caso de las aplicaciones empresariales, el env\u00edo es apenas la mitad del trabajo. Imagina que quieres crear un bot basado en emails que se integre en el flujo de trabajo de tu aplicaci\u00f3n empresarial. Piensa en los obst\u00e1culos que tendr\u00edas que superar:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Problemas de transporte<\/b>. De alguna forma, los mensajes entrantes deben llegar a tu aplicaci\u00f3n. Esto significa que debe haber un registro MX en alg\u00fan lugar que apunte a un servidor de email, capaz de reenviar el email entrante a tu c\u00f3digo. Esto esconde muchas complicaciones. Una de ellas es que probablemente quieras generar rebotes adecuados de \u201cbuz\u00f3n no v\u00e1lido\u201d para notificar a los remitentes si se han equivocado en la direcci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Problemas con la gesti\u00f3n del spam<\/b>. Una vez que empiezas a aceptar emails para un dominio MX determinado, debes tener en cuenta que, con el tiempo, la mayor\u00eda del email entrante ser\u00e1 spam. E incluso si tu pol\u00edtica de aceptaci\u00f3n de emails se basa en una lista de permitidos, no siempre es aconsejable que tu aplicaci\u00f3n deba lidiar con ataques de spam.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Problemas de an\u00e1lisis de MIME.<\/b>\u00a0Ya hemos hablado de esto antes, pero analizar MIME es un suplicio en la mayor\u00eda de los lenguajes de programaci\u00f3n. Las bibliotecas de an\u00e1lisis de MIME no son muchas, y gran parte de ellas toleran bastante mal el tr\u00e1fico del mundo real.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Contenido del mensaje.<\/b>\u00a0Tus problemas de an\u00e1lisis van mucho m\u00e1s all\u00e1 del MIME. La mayor\u00eda de los emails entrantes suelen ser respuestas a mensajes enviados anteriormente, y normalmente querr\u00e1s eliminar esas partes citadas gigantes. A menudo, tambi\u00e9n es recomendable extraer la firma de una persona del cuerpo del mensaje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Parece bastante abrumador para algo tan simple como introducir un fragmento de texto en una aplicaci\u00f3n. \u00bfNo ser\u00eda genial tener algo similar a\u00a0<a href=\"http:\/\/www.sinatrarb.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Sinatra<\/a>\u00a0o\u00a0<a href=\"http:\/\/flask.pocoo.org\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Flask<\/a>\u00a0y poder decir simplemente en Python:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                     @email_in(&quot;.*@myapp.com&quot;)rn    def incoming_message(message_obj):rn      # access various parts of the fully parsed incoming message:rn      message_obj.bodyrn      message_obj.body_without_quoted_textrn      message_obj.sender_signaturern    # stuff that matters:rn      make_profit_from(message_obj)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A la comunidad de Ruby le encantan los bloques. A la comunidad de Ruby le encantar\u00eda poder decir:<\/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                                Ruby                            <\/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-Ruby\">\r\n                                <code id=\"code_0_content\" class=\"language-Ruby\">\r\n\r\n                                     email_in &quot;.*@myapp.com&quot; do |message_obj|rn      # sweet profit-making code...rn    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\">La idea de estos ejemplos de c\u00f3digo es similar al mecanismo de enrutamiento incluido en los frameworks MVC modernos, pero en lugar de emparejar las URL con acciones del controlador, queremos definir rutas que vinculen el patr\u00f3n de direcci\u00f3n del destinatario a una funci\u00f3n de tu c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero \u00bfc\u00f3mo se implementa email_in() teniendo en cuenta las dificultades mencionadas?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00a1Las rutas de Mailgun al rescate!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las dise\u00f1amos pensando espec\u00edficamente en este caso de uso y son, con diferencia, la forma m\u00e1s agradable de crear una aplicaci\u00f3n de mensajer\u00eda por email bidireccional. Conf\u00eda en nuestra experiencia, somos especialistas del email.\u00a0\u00a0Pero basta de ch\u00e1chara, pong\u00e1monos manos a la obra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, vamos a definir una nueva ruta en el panel de control de Mailgun. Esta ruta vincular\u00e1 la direcci\u00f3n del destinatario con la expresi\u00f3n regular \u201c.*@myapp.com\u201d y, si coincide, har\u00e1 dos cosas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Analizar\u00e1 el mensaje y realizar\u00e1 una solicitud POST en la URL \u201c\/emailin\u201d de tu aplicaci\u00f3n.<\/li>\n\n\n\n<li>Tambi\u00e9n reenviar\u00e1 una copia del mensaje al buz\u00f3n del equipo de desarrollo, por ejemplo, a developer@myapp.com.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-5060\" width=\"500\" height=\"229\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tumblr_lub6qetjH61qdp23h.png\" alt=\"Mailgun&apos;s control panel\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tumblr_lub6qetjH61qdp23h.png 500w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/tumblr_lub6qetjH61qdp23h-300x137.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora podemos manejar los mensajes que van a @myapp.com a\u00f1adiendo el siguiente c\u00f3digo en la aplicaci\u00f3n web:<\/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                                    @app.route(&quot;\/mailin&quot;, methods=[&quot;POST&quot;])  rndef mailin():  rn    # see if the message is spam:rn    is_spam = request.form[&#039;X-Mailgun-SFlag&#039;] == &#039;Yes&#039;rnrn    # access some of the email parsed values:rn    request.form[&#039;From&#039;]rn    request.form[&#039;To&#039;]rn    request.form[&#039;subject&#039;]rnrn    # stripped text does not include the original (quoted) message, only whatrn    # a user has typed:rn    request.form[&#039;stripped-text&#039;]rn    request.form[&#039;stripped-signature&#039;]rnrn    # enumerate through all attachments in the message and savern    # them to disk with their original filenames:rn    for attachment in request.files.values():rn        attachment.filenamern        data = attachment.stream.read()rn        with open(attachment.filename, &quot;w&quot;) as f:rn            f.write(data)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Maneja los emails entrantes como un profesional [API de Mailgun 2.0]<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a enviar un mensaje de prueba con Gmail a nuestra aplicaci\u00f3n web para ver qu\u00e9 se publica.<br>\nEsta es la captura de pantalla del mensaje tal y como aparece en Gmail. F\u00edjate en que tiene un cuerpo real de lo que se ha escrito (stripped-text), la firma y la parte citada que en la mayor\u00eda de los casos es irrelevante:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-5061\" width=\"500\" height=\"344\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ev.png\" alt=\"Test email on web app from Ev Kontsevoy\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ev.png 500w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ev-300x206.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Los datos publicados mediante POST se muestran a continuaci\u00f3n como un volcado de la solicitud MultiDict de Python. Ten en cuenta que, adem\u00e1s de los par\u00e1metros sint\u00e9ticos como \u201crecipient\u201d o \u201cstripped-text\u201d, Mailgun tambi\u00e9n publica mediante POST todos los encabezados MIME en la aplicaci\u00f3n, de modo que tienes acceso completo a todo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Par\u00e1metros POST (volcados en el registro como MultiDict de Python)<\/b><\/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                                    (&#039;From&#039;, u&#039;Ev Kontsevoy &#039;),rn(&#039;sender&#039;, u&#039;ev@mailgunhq.com&#039;),rn(&#039;To&#039;, u&#039;Awesome Bot &#039;),rn(&#039;attachment-count&#039;, u&#039;1&#039;),rn(&#039;Subject&#039;, u&#039;Re: Your application&#039;)])rn(&#039;stripped-text&#039;, u&#039;My application is attached.nThanks.&#039;),rn(&#039;stripped-html&#039;, u&#039;HTML version of stripped-text&#039;),rn(&#039;body-html&#039;, u&#039;[full html version of the message]&#039;),rn(&#039;body-plain&#039;, u&#039;[full text version of the message]&#039;),rn(&#039;stripped-signature&#039;, u&#039;-- nEv Kontsevoy,nCo-founder and CEO of Mailgun.net  - the emailnplatform for developers.&#039;),rn(&#039;recipient&#039;, u&#039;bot@hello.mailgun.org&#039;),rn(&#039;subject&#039;, u&#039;Re: Your application&#039;),rn(&#039;timestamp&#039;, u&#039;1320695889&#039;),rn(&#039;signature&#039;, u&#039;b8869291bd72f1ad38238429c370cb13a109eab01681a31b1f4a2751df1e3379&#039;),rn(&#039;token&#039;, u&#039;9ysf1gfmskxxsp1zqwpwrqf2qd4ctdmi5e$k-ajx$x0h846u88&#039;),rn(&#039;In-Reply-To&#039;, u&#039;Message-Id-of-original-message&#039;),rn(&#039;Date&#039;, u&#039;Mon, 7 Nov 2011 11:58:06 -0800&#039;),rn(&#039;Message-Id&#039;, u&#039;message-id-goes-here&#039;),rn(&#039;X-Originating-Ip&#039;, u&#039;[216.156.80.78]&#039;),rnrn# NOTE: ALL message fields are parsed and pasted. If some fields (like &quot;Cc&quot;) arern# missing here it only means they were absent from the message.\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\"><strong>Archivos enviados por POST:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>('attachment-1', FileStorage: 'application.pdg')<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repasemos. \u00bfQu\u00e9 tenemos aqu\u00ed?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El tr\u00e1fico de email entrante se compara con una expresi\u00f3n regular aplicada a un destinatario del mensaje.<\/li>\n\n\n\n<li>Los mensajes coincidentes se analizan, se comprueba si son spam y se env\u00edan mediante HTTP POST a la URL de tu aplicaci\u00f3n.<\/li>\n\n\n\n<li>Las partes citadas del mensaje se separan (se eliminan) y se detecta la firma.<\/li>\n\n\n\n<li>Si tu aplicaci\u00f3n est\u00e1 inactiva y no responde, los mensajes se pondr\u00e1n en cola y se realizar\u00e1n intentos de entrega posteriores durante un m\u00e1ximo de tres d\u00edas.<\/li>\n\n\n\n<li>Adem\u00e1s, los mensajes coincidentes pueden almacenarse opcionalmente en un buz\u00f3n con fines de archivo, copia de seguridad o depuraci\u00f3n.<\/li>\n\n\n\n<li>Ninguna de estas complejidades te importar\u00e1 ya. T\u00fa solo tienes que centrarte en escribir c\u00f3digo rentable.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Y, por cierto, puedes manipular las rutas de email\u00a0<a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/api-routes.html\" target=\"_tabs\" rel=\"noopener noreferrer\">mediante programaci\u00f3n a trav\u00e9s de una API<\/a>. Esto te permite crear un decorador m\u00e1gico @email_in() estilo Flask o Sinatra que lo unir\u00e1 todo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las rutas de Mailgun pueden hacer mucho m\u00e1s que un simple emparejamiento de direcciones del destinatario. Admiten capturas de expresiones regulares, comportamientos del tipo \u201csi no hay coincidencia con nada m\u00e1s\u201d, tienen prioridad de ejecuci\u00f3n&#8230; B\u00e1sicamente, son un sencillo lenguaje de programaci\u00f3n de enrutamiento de email.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ah\u00ed lo tienes. Una aut\u00e9ntica pasada. Ahora pong\u00e1monos manos a la obra y libremos al mundo de los absurdos emails \u00abno-reply@\u00bb. Ya era hora.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Un saludo!<br>\n\u2014<br>\nEl equipo de Mailgun<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Edici\u00f3n: no dudes en participar en\u00a0<a href=\"http:\/\/news.ycombinator.com\/item?id=3208376\" target=\"_tabs\" rel=\"noopener noreferrer\">el debate de HN<\/a><\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_cf13784d9fb16e1dfc56b1ed5f238f56\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Reg\u00edstrate            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_cf13784d9fb16e1dfc56b1ed5f238f56\">\r\n                Empezar es facil\u00edsimo. Y gratis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Descubre todo lo que puedes lograr con la mejor plataforma de entrega de emails del mundo.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>\u00a1Llegar tan atr\u00e1s en nuestro blog es como ver un viejo \u00e1lbum de fotos familiar! Este art\u00edculo se public\u00f3 originalmente en 2011.<\/p>\n","protected":false},"author":13,"featured_media":4555,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[22],"class_list":["post-25139","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>Maneja los emails entrantes como un pro API de Mailgun 2.0 - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Cubre todas tus necesidades de email entrante con el enrutamiento de entrada de Mailgun. \u00bfQuieres saber c\u00f3mo empezaron nuestras rutas? 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\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Maneja los emails entrantes como un pro API de Mailgun 2.0 - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Cubre todas tus necesidades de email entrante con el enrutamiento de entrada de Mailgun. \u00bfQuieres saber c\u00f3mo empezaron nuestras rutas? M\u00e1s informaci\u00f3n \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/\" \/>\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=\"5 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\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/\",\"name\":\"Maneja los emails entrantes como un pro API de Mailgun 2.0 - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"datePublished\":\"2026-09-16T21:29:37+00:00\",\"description\":\"Cubre todas tus necesidades de email entrante con el enrutamiento de entrada de Mailgun. \u00bfQuieres saber c\u00f3mo empezaron nuestras rutas? M\u00e1s informaci\u00f3n \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/product\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/#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\\\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\\\/#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\":\"Maneja los emails entrantes como un profesional [API de Mailgun 2.0]\"}]},{\"@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":"Maneja los emails entrantes como un pro API de Mailgun 2.0 - Transactional Email API Service For Developers | Mailgun","description":"Cubre todas tus necesidades de email entrante con el enrutamiento de entrada de Mailgun. \u00bfQuieres saber c\u00f3mo empezaron nuestras rutas? 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\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/","og_locale":"es_ES","og_type":"article","og_title":"Maneja los emails entrantes como un pro API de Mailgun 2.0 - Transactional Email API Service For Developers | Mailgun","og_description":"Cubre todas tus necesidades de email entrante con el enrutamiento de entrada de Mailgun. \u00bfQuieres saber c\u00f3mo empezaron nuestras rutas? M\u00e1s informaci\u00f3n \u2013","og_url":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/","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":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/","url":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/","name":"Maneja los emails entrantes como un pro API de Mailgun 2.0 - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","datePublished":"2026-09-16T21:29:37+00:00","description":"Cubre todas tus necesidades de email entrante con el enrutamiento de entrada de Mailgun. \u00bfQuieres saber c\u00f3mo empezaron nuestras rutas? M\u00e1s informaci\u00f3n \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/product\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/#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\/handle-incoming-emails-like-a-pro-mailgun-api-2-0\/#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":"Maneja los emails entrantes como un profesional [API de Mailgun 2.0]"}]},{"@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\/25139","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\/25139\/revisions"}],"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=25139"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=25139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}