{"id":20389,"date":"2026-09-14T23:34:28","date_gmt":"2026-09-14T23:34:28","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/build-laravel-email-authentication-mailgun-digital-ocean-2\/"},"modified":"2026-09-14T23:34:28","modified_gmt":"2026-09-14T23:34:28","slug":"build-laravel-email-authentication-mailgun-digital-ocean","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/","title":{"rendered":"Configurar la autenticaci\u00f3n de emails en Laravel 11 con Mailgun y Digital Ocean"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cuando se public\u00f3 por primera vez, la versi\u00f3n 5.7 de Laravel a\u00f1adi\u00f3 una nueva capacidad para verificar los emails de los usuarios. Si alguna vez has ejecutado php <code>artisan make:auth<\/code> en una aplicaci\u00f3n de Laravel, conocer\u00e1s la sensaci\u00f3n de placer y emoci\u00f3n al ver todas tus p\u00e1ginas de registro e inicio de sesi\u00f3n listas, completas con el hash de contrase\u00f1as y una tabla de usuarios ya creada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta emoci\u00f3n desaparecer\u00e1 pronto tras el despliegue en producci\u00f3n, solo para descubrir que cualquiera puede registrarse con <code>garbage@notrealemail.com<\/code> o cualquier otra cosa que le apetezca escribir. Esta fina capa de autenticaci\u00f3n de sesi\u00f3n no sirve de mucho en una aplicaci\u00f3n en vivo. La introducci\u00f3n de <code>MustVerifyEmailinterface<\/code> en Laravel 5.7 se a\u00f1adi\u00f3 a la estructura de autenticaci\u00f3n para que, a fin de iniciar sesi\u00f3n, los usuarios deban utilizar una direcci\u00f3n de email real y v\u00e1lida.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No ha habido cambios significativos en la funci\u00f3n de autenticaci\u00f3n de emails de Laravel (ahora en la versi\u00f3n 11), pero recomendamos <a href=\"https:\/\/laravel.com\/docs\/11.x\/artisan\" target=\"_tabs\" rel=\"noopener noreferrer\">actualizar a la \u00faltima versi\u00f3n<\/a> si a\u00fan no lo has hecho.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Laravel 11, lanzado el 12 de marzo de 2024, sigue ofreciendo potentes capacidades de verificaci\u00f3n de emails y, al mismo tiempo, introduce una estructura de aplicaci\u00f3n optimizada y otras mejoras. Este tutorial te guiar\u00e1 en la configuraci\u00f3n de la autenticaci\u00f3n de emails en Laravel 11 usando Mailgun y en su despliegue en Digital Ocean. <\/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-2207\"><p class=\"h5 m-0\" id=\"toc-title-2207\">\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=\"#crear-una-nueva-aplicacion-de-laravel\">Crear una nueva aplicaci\u00f3n de Laravel<\/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=\"#verificacion-de-emails-en-laravel-11\">Verificaci\u00f3n de emails en Laravel 11<\/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=\"#pasemos-a-mailgun\">Pasemos a Mailgun<\/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=\"#comprobar-que-funciona\">Comprobar que funciona<\/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=\"#recursos\">Recursos<\/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=\"#quieres-mas-articulos-como-este-de-mailgun\">\u00bfQuieres m\u00e1s art\u00edculos como este de Mailgun?<\/a><\/div><\/div><\/nav>\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p>1. El requisito m\u00ednimo de PHP es ahora 8.2.<\/p><p>2. Hay una estructura de aplicaci\u00f3n m\u00e1s optimizada con un archivo bootstrap\/app.php revitalizado.<\/p><p>3. Uso predeterminado de SQLite para el almacenamiento de bases de datos, sesiones, cach\u00e9 y colas.<\/p><p class=\"mb-0\">4. Nueva funci\u00f3n de enrutamiento de estado para la monitorizaci\u00f3n de aplicaciones.<\/p><\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Crear una nueva aplicaci\u00f3n de Laravel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El primer paso es crear una nueva aplicaci\u00f3n con cierta configuraci\u00f3n:<\/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                                    $ laravel new email-verification-example rnrn$ cd email-verification-example rnrn$ touch database\/database.sqlite \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\">Esto crear\u00e1 la aplicaci\u00f3n predeterminada de Laravel 11.x con la estructura de autenticaci\u00f3n y un archivo para una base de datos SQLite. Actualiza tu archivo .env para que apunte a la ruta completa del archivo SQLite:<\/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                                    DB_CONNECTION=sqlite rnDB_DATABASE=\/full\/path\/to\/email-verification-example\/database\/database.sqlite \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\">Verificaci\u00f3n de emails en Laravel 11<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Revisemos la estructura de autenticaci\u00f3n predeterminada y veamos qu\u00e9 cambios deben realizarse para a\u00f1adir la verificaci\u00f3n de emails.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes consultar la documentaci\u00f3n de validaci\u00f3n de emails de Laravel <a href=\"https:\/\/laravel.com\/docs\/11.x\" target=\"_tabs\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En Laravel 11, el proceso de a\u00f1adir la verificaci\u00f3n de emails sigue siendo similar, pero la estructura de archivos ha cambiado. Abre tu archivo bootstrap\/app.php y aseg\u00farate de que incluya lo siguiente:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"0\">\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        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, implementa la interfaz <code>MustVerifyEmail<\/code>. Una interfaz en PHP especifica los m\u00e9todos que una clase debe implementar. Tendr\u00e1s que verificar que tu <code>AppModeIsUser<\/code> implementa el contrato <code>IlluminateContractsAuthMustVerifyEmail<\/code>:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"0\">\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        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Esa interfaz obliga a que tengamos tres nuevos m\u00e9todos en nuestro modelo de usuario:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>hasVerifiedEmail() <\/code><\/li>\n\n\n\n<li><code>markEmailAsVerified() <\/code><\/li>\n\n\n\n<li><code>sendEmailVerificationNotification() <\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La implementaci\u00f3n de estos m\u00e9todos se puede encontrar en: <code>vendor\/laravel\/framework\/src\/Illuminate\/Auth\/MustVerifyEmail.php<\/code>. Para marcar a un usuario como verificado, necesitamos tener una columna <code>email_verified_at<\/code> en nuestra tabla de usuarios, la cual ya se proporciona en nuestra migraci\u00f3n predeterminada de creaci\u00f3n de tablas de usuarios:<\/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                                    Schema::create(&#039;users&#039;, function (Blueprint $table) { rn \u202f\u202f$table-&gt;increments(&#039;id&#039;); rn \u202f\u202f$table-&gt;string(&#039;name&#039;); rn \u202f\u202f$table-&gt;string(&#039;email&#039;)-&gt;unique(); rn \u202f\u202f$table-&gt;timestamp(&#039;email_verified_at&#039;)-&gt;nullable(); rn \u202f\u202f$table-&gt;string(&#039;password&#039;); rn \u202f\u202f$table-&gt;rememberToken(); rn \u202f\u202f$table-&gt;timestamps(); rn});\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\">Ejecuta las migraciones para crear la tabla: <code>php artisan migrate<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el archivo <code>routes\/web.php<\/code>, actualiza las rutas de autenticaci\u00f3n para incluir la verificaci\u00f3n de emails: <\/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                                    Auth::routes([&#039;verify&#039; =&gt; true]);\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 Laravel 11, las rutas se definen en el archivo <code>bootstrap\/app.php<\/code>. Aseg\u00farate de que tus rutas web est\u00e9n incluidas y a\u00f1ade las rutas de verificaci\u00f3n:\u00a0<\/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                                    -&gt;withRouting( rnrn    web: __DIR__.&#039;\/..\/routes\/web.php&#039;, rnrn    commands: __DIR__.&#039;\/..\/routes\/console.php&#039;, rnrn    health: &#039;\/up&#039;, rnrn) \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 continuaci\u00f3n, en tu archivo <code>routes\/web.php<\/code>, a\u00f1ade:\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"0\">\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        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Para ver todas las rutas disponibles de tu aplicaci\u00f3n, puedes ejecutar <code>php artisan route:list<\/code>.\u202fEso es pr\u00e1cticamente todo lo que necesitamos hacer desde el lado de Laravel para verificar emails. Sin embargo, si lo pruebas ahora, no funcionar\u00e1.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4150\" width=\"1024\" height=\"505\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-blogpost.png\" alt=\"Laravel code\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-blogpost.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-blogpost-300x148.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-blogpost-768x379.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de poder enviar emails desde nuestro servidor PHP, debemos configurar un controlador de email en Laravel. Puedes comprobarlo usando <a href=\"https:\/\/laravel.com\/docs\/11.x\/artisan\" target=\"_tabs\" rel=\"noopener noreferrer\">tinker<\/a> para ver que se cre\u00f3 un usuario con un email_verified_at establecido como nulo.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"0\">\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        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Pasemos a Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mailgun ofrece la capacidad de enviar emails a trav\u00e9s del servidor SMTP o mediante su API. En este tutorial, enviaremos emails a trav\u00e9s de la API de Mailgun. Es m\u00e1s r\u00e1pido, escala mejor y requiere menos trabajo de configuraci\u00f3n que el SMTP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4151\" width=\"1500\" height=\"377\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/SMTP_Flowchart_copy.png\" alt=\"Mailgun API call\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/SMTP_Flowchart_copy.png 1500w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/SMTP_Flowchart_copy-300x75.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/SMTP_Flowchart_copy-768x193.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/SMTP_Flowchart_copy-1024x257.png 1024w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a enviar llamadas a la API. Para ello necesitamos <a href=\"https:\/\/github.com\/guzzle\/guzzle\" target=\"_tabs\" rel=\"noopener noreferrer\">Guzzle<\/a>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>$ composer require guzzlehttp\/guzzle<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para que nuestra aplicaci\u00f3n pueda enviar emails, necesitamos un nombre de dominio alojado. Tengo un nombre de dominio que compr\u00e9 a trav\u00e9s de <a href=\"https:\/\/domains.google.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Google Domains<\/a> por unos 12\u00a0$ al a\u00f1o. El sitio (<a href=\"https:\/\/employbl.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">https:\/\/employbl.com\/<\/a>) est\u00e1 alojado en <a href=\"https:\/\/forge.laravel.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Laravel Forge<\/a> por una cuota mensual. Para desplegarlo, segu\u00ed el <a href=\"https:\/\/laracasts.com\/series\/learn-laravel-forge\" target=\"_tabs\" rel=\"noopener noreferrer\">curso de Laracasts Learn Laravel Forge<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En ese curso, configur\u00e9 mi aplicaci\u00f3n de Laravel para que funcionara en droplets de Digital Ocean. En ese proceso, configur\u00e9 mi nombre de dominio de Google para que apuntara a Digital Ocean.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que hayas creado una cuenta de Mailgun, tendr\u00e1s que verificar tu dominio, lo que tarda unas 24 horas. Para ello, debemos a\u00f1adir registros TXT, CNAME y MX. \u202fSi los registros MX ya apuntan a un proveedor de servicios de email, puedes configurar un subdominio en su lugar. Para encontrar estos registros, ve al dominio de tu cuenta de Mailgun y comprueba <a href=\"https:\/\/documentation.mailgun.com\/en\/latest\/quickstart-sending.html#how-to-start-sending-email\" target=\"_tabs\" rel=\"noopener noreferrer\">Verificaci\u00f3n de dominio &amp; DNS<\/a>. <b>Una vez que tengas un dominio de Mailgun en funcionamiento, ve al panel de control para buscar tu clave de API y actualiza el archivo .env seg\u00fan corresponda.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>MAIL_DRIVER=mailgun MAILGUN_DOMAIN=mg.YOUR_DOMAIN.com MAILGUN_SECRET=YOUR_KEY_HERE<\/code><\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> M\u00e1s informaci\u00f3n: Laravel ha pasado a un modelo de versiones anuales. Ahora en la V10, puedes esperar correcciones el <b>6 de agosto de 2024<\/b> y parches de seguridad para el <b>14 de febrero de 2025<\/b>. <a href='https:\/\/laravel-news.com\/laravel-10'>Ver las notas de la versi\u00f3n de Laravel 10.<\/a><\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Comprobar que funciona<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez configurado el env\u00edo de emails, despu\u00e9s de que los usuarios se registren, ver\u00e1n una p\u00e1gina de destino donde se les pedir\u00e1 que revisen su email. Esta p\u00e1gina se puede modificar en <b>resources\/views\/auth\/verify.blade.php<\/b>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4152\" width=\"1024\" height=\"247\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel2.png\" alt=\"Verify your email Laravel\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel2.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel2-300x72.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel2-768x185.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Esto enviar\u00e1 un email real a la direcci\u00f3n proporcionada. La plantilla para este email se encuentra en <b>IlluminateAuthNotificationsVerifyEmail.php<\/b>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4153\" width=\"512\" height=\"254\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/example-laravel.png\" alt=\"Laravel verify email address link\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/example-laravel.png 512w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/example-laravel-300x149.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Si no queremos que nuestros emails de verificaci\u00f3n digan \u201cRegards\u201d (Saludos) ni muestren el texto anterior, entonces tendremos que personalizarlos. Puedes publicar las plantillas predeterminadas con los siguientes comandos de publicaci\u00f3n: <\/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                                    $ php artisan vendor:publish --tag=laravel-notificationsrn$ php artisan vendor:publish --tag=laravel-mail\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 continuaci\u00f3n, escribe los nuevos valores predeterminados en <b>resources\/views\/vendor\/notifications\/email.blade.php<\/b>. Si tienes m\u00e1s cosas que cambiar, podr\u00edas volver a implementar la notificaci\u00f3n a\u00f1adiendo un nuevo m\u00e9todo <code>sendEmailVerificationNotification<\/code> a tu modelo de usuario que devuelva una notificaci\u00f3n personalizada creada por ti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que los usuarios hagan clic en el enlace para verificar la direcci\u00f3n de email, se les redirigir\u00e1 a su panel de control y podr\u00e1n iniciar sesi\u00f3n sin problemas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4154\" width=\"1024\" height=\"325\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-success.png\" alt=\"Laravel login\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-success.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-success-300x95.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/laravel-success-768x244.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Con esto ya deber\u00edas poder empezar! La parte m\u00e1s dif\u00edcil para m\u00ed fue configurar el servidor de email y Mailgun. Tras verificar tu dominio y tener Mailgun totalmente configurado, la parte de Laravel acaba siendo de lo m\u00e1s sencilla. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfHas podido ponerlo todo en marcha? \u00bfAlguien est\u00e1 utilizando ya esta funcionalidad en producci\u00f3n? Escr\u00edbeme <a href=\"https:\/\/twitter.com\/Connor11528\" target=\"_tabs\" rel=\"noopener noreferrer\">en Twitter<\/a> o deja un comentario a continuaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recursos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Estos tutoriales, adem\u00e1s de los enlaces anteriores, me han parecido muy \u00fatiles.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/medium.com\/@sgobinda007\/send-email-from-your-node-js-application-by-using-mailgun-api-services-bbedc7c45c19\" target=\"_tabs\" rel=\"noopener noreferrer\">Enviar un email desde tu aplicaci\u00f3n Node.js utilizando los servicios de la API de Mailgun<\/a> Gobinda Thakur<\/li>\n\n\n\n<li><a href=\"https:\/\/medium.com\/@DCzajkowski\/testing-laravel-authentication-flow-573ea0a96318\" target=\"_tabs\" rel=\"noopener noreferrer\">Probar el flujo de autenticaci\u00f3n de Laravel<\/a> Dariusz Czajkowski<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQuieres m\u00e1s art\u00edculos como este de Mailgun?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Connor Leech, nuestro autor invitado, es ingeniero de software en Stitch Labs.\u202fPuedes ponerte en contacto con \u00e9l <a href=\"mailto:connor@stitchlabs.com\" target=\"_tabs\" rel=\"noopener noreferrer\">a trav\u00e9s de su email<\/a>. Para leer m\u00e1s art\u00edculos y gu\u00edas de resoluci\u00f3n de problemas, suscr\u00edbete a nuestra newsletter para no perderte las ideas de nuestros invitados expertos ni de nuestro equipo de especialistas en email.<\/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_210e0b5765aef40098cbd41387652d67\">\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_210e0b5765aef40098cbd41387652d67\">\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>Integra la versi\u00f3n 11.x de Laravel con Mailgun para a\u00f1adir la capacidad de verificar los emails de los usuarios. Sigue leyendo para descubrir nuestra gu\u00eda paso a paso.<\/p>\n","protected":false},"author":13,"featured_media":4074,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[20],"class_list":["post-20389","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-email"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Configurar la autenticaci\u00f3n de emails de Laravel 11.x con Mailgun y Digital Ocean - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"La versi\u00f3n 11 de Laravel admite la verificaci\u00f3n de los emails de los usuarios. Descubre c\u00f3mo funciona esta integraci\u00f3n con la gu\u00eda paso a paso para Mailgun y Digital Ocean.\" \/>\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\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Configurar la autenticaci\u00f3n de emails de Laravel 11.x con Mailgun y Digital Ocean - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"La versi\u00f3n 11 de Laravel admite la verificaci\u00f3n de los emails de los usuarios. Descubre c\u00f3mo funciona esta integraci\u00f3n con la gu\u00eda paso a paso para Mailgun y Digital Ocean.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/\" \/>\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-Email.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\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/\",\"name\":\"Configurar la autenticaci\u00f3n de emails de Laravel 11.x con Mailgun y Digital Ocean - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"datePublished\":\"2026-09-14T23:34:28+00:00\",\"description\":\"La versi\u00f3n 11 de Laravel admite la verificaci\u00f3n de los emails de los usuarios. Descubre c\u00f3mo funciona esta integraci\u00f3n con la gu\u00eda paso a paso para Mailgun y Digital Ocean.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/email\\\/build-laravel-email-authentication-mailgun-digital-ocean\\\/#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\":\"Configurar la autenticaci\u00f3n de emails en Laravel 11 con Mailgun y Digital Ocean\"}]},{\"@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":"Configurar la autenticaci\u00f3n de emails de Laravel 11.x con Mailgun y Digital Ocean - Transactional Email API Service For Developers | Mailgun","description":"La versi\u00f3n 11 de Laravel admite la verificaci\u00f3n de los emails de los usuarios. Descubre c\u00f3mo funciona esta integraci\u00f3n con la gu\u00eda paso a paso para Mailgun y Digital Ocean.","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\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/","og_locale":"es_ES","og_type":"article","og_title":"Configurar la autenticaci\u00f3n de emails de Laravel 11.x con Mailgun y Digital Ocean - Transactional Email API Service For Developers | Mailgun","og_description":"La versi\u00f3n 11 de Laravel admite la verificaci\u00f3n de los emails de los usuarios. Descubre c\u00f3mo funciona esta integraci\u00f3n con la gu\u00eda paso a paso para Mailgun y Digital Ocean.","og_url":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/","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-Email.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\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/","url":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/","name":"Configurar la autenticaci\u00f3n de emails de Laravel 11.x con Mailgun y Digital Ocean - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","datePublished":"2026-09-14T23:34:28+00:00","description":"La versi\u00f3n 11 de Laravel admite la verificaci\u00f3n de los emails de los usuarios. Descubre c\u00f3mo funciona esta integraci\u00f3n con la gu\u00eda paso a paso para Mailgun y Digital Ocean.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/es\/blog\/email\/build-laravel-email-authentication-mailgun-digital-ocean\/#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":"Configurar la autenticaci\u00f3n de emails en Laravel 11 con Mailgun y Digital Ocean"}]},{"@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\/20389","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\/20389\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4074"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=20389"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=20389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}