Por qué enviar correos electrónicos a través de Gmail en .NET es un dolor de cabeza (y cómo evitarlo)
\n\nSi alguna vez has intentado configurar el envío de correos electrónicos a través de Gmail en tu aplicación .NET, sabes que es una tarea que parece simple pero se convierte en una odisea. Escribes 10 líneas de código, ejecutas y obtienes un SmtpException con un texto misterioso sobre "aplicación no segura". ¿Te suena familiar?
En Stack Overflow, la pregunta "Sending email in .NET through Gmail" ha acumulado miles de visitas y cientos de respuestas. La gente lucha con este problema durante años. En este artículo, analizaremos 4 enfoques reales en C#, desde los clásicos hasta las soluciones modernas, y descubriremos cuál vale la pena usar en 2025.
\n\nAdvertencia: ese código que encontraste en un blog de 2015 probablemente ya no funciona. Google endurece constantemente sus políticas de seguridad. Pero no te preocupes, te mostraremos opciones que funcionan.
\n\nEnfoque 1: SmtpClient clásico (y por qué está obsoleto)
\n\nLa forma más obvia es usar el SmtpClient incorporado de System.Net.Mail. Así es como se veía en "los viejos tiempos":
using System.Net;\nusing System.Net.Mail;\n\nvar message = new MailMessage("your@gmail.com", "recipient@example.com")\n{\n Subject = "Correo de prueba desde .NET",\n Body = "¡Hola! Esto es una prueba."\n};\n\nusing var client = new SmtpClient("smtp.gmail.com", 587)\n{\n Credentials = new NetworkCredential("your@gmail.com", "your-password"),\n EnableSsl = true\n};\n\nclient.Send(message);\n\nEn 2010-2015 esto funcionaba. Pero hoy Google ha bloqueado el inicio de sesión con contraseña normal para la mayoría de las cuentas. Necesitarás:
\n- \n
- Contraseña de aplicación (App Password) — pero solo con la autenticación de dos factores activada \n
- O permitir el "acceso a aplicaciones no seguras" — opción que Google ya eliminó \n
Desventajas del enfoque:
\n- \n
SmtpClientestá marcado comoObsoleteen .NET 5+ \n - No admite protocolos de autenticación modernos (OAuth 2.0) \n
- La contraseña de aplicación no es eterna; debe actualizarse manualmente \n
Cuándo usarlo: solo para prototipos rápidos o herramientas internas donde la seguridad no sea crítica.
\n\nEnfoque 2: MailKit — moderno y potente
\n\nSi buscas una solución de nivel profesional, usa la biblioteca MailKit del desarrollador de Mono. No solo funciona, sino que se mantiene activamente.
\n\nPrimero, instala el paquete:
\ndotnet add package MailKit\n\nAhora el código usando App Password:
\n\nusing MailKit.Net.Smtp;\nusing MimeKit;\n\nvar message = new MimeMessage();\nmessage.From.Add(new MailboxAddress("Tu nombre", "your@gmail.com"));\nmessage.To.Add(new MailboxAddress("Destinatario", "recipient@example.com"));\nmessage.Subject = "Correo a través de MailKit";\nmessage.Body = new TextPart("plain") { Text = "¡Hola desde .NET!" };\n\nusing var client = new SmtpClient();\nawait client.ConnectAsync("smtp.gmail.com", 587, MailKit.Security.SecureSocketOptions.StartTls);\nawait client.AuthenticateAsync("your@gmail.com", "tu-contraseña-de-aplicación");\nawait client.SendAsync(message);\nawait client.DisconnectAsync(true);\n\n¿Por qué MailKit es mejor que SmtpClient?
\n- \n
- Métodos asíncronos — no bloquea el hilo \n
- Soporte para MIME, firmas, cifrado \n
- Funciona en todas las plataformas .NET (incluyendo .NET MAUI y Unity) \n
- No está marcado como obsoleto \n
Pero este enfoque también tiene una limitación: App Password es una solución temporal. Si tu cuenta de Google se ve comprometida, un atacante podría enviar correos en tu nombre.
\n\nEnfoque 3: Google API + OAuth 2.0 (para proyectos serios)
\n\nLa forma más correcta y segura es usar