Si no te llegara a entender, choco con la pared. Es importante el enlace.
https://myaccount.google.com/lesssecureapps
Ahora si funciona con Windows Form.
Código:
using System;
using System.Windows.Forms;
using System.Net; // No olvidar.
using System.Net.Mail; // No olvidar.
namespace Enviar_e_mail_01_cs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button_Enviar_Click(object sender, EventArgs e)
{
// La cadena "servidor" es el servidor de correo que enviará tu mensaje.
string servidor = comboBox_smtp.SelectedItem.ToString(); // smtp.gmail.com
// Crea el mensaje estableciendo quién lo manda y quién lo recibe.
MailMessage mensaje = new MailMessage(
textBox_Emisor.Text,
textBox_Receptor.Text,
textBox_Asunto.Text,
richTextBox_Mensaje.Text);
// Envía el mensaje.
SmtpClient cliente = new SmtpClient(servidor);
cliente.DeliveryMethod = SmtpDeliveryMethod.Network;
cliente.UseDefaultCredentials = false;
cliente.EnableSsl = true;
cliente.Credentials = new NetworkCredential(textBox_Emisor.Text, textBox_Contraseña.Text); // usuario@gmail.com, Contraseña.
cliente.Port = Int32.Parse(comboBox_Puerto.Text); ; // 587
cliente.Host = servidor; // smtp.gmail.com
// Añade credenciales si el servidor lo requiere.
//cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
cliente.Send(mensaje);
}
}
}
Ahora me toca por mi parte, mejorar el código, hacer el programa más completo.
Por fin funciona. Muchas gracias a todos.
Edito:
Me dio por curiosidad probarlo en modo consola y no funciona, el mismo problema y no se parece nada de los credenciales. Algo no lo veo.
Código:
using System;
using System.Net.Mail;
using System.Text;
using System.Net;
namespace Enviar_e_mail_Consola_03_cs
{
class Program
{
static void Main(string[] args)
{
string usuario, contraseña, destinatario, asunto, mensaje;
// Título de la ventana.
Console.Title = "Enviar e-mail con Consola C#";
// Tamaño ventana consola.
Console.WindowWidth = 100; // X. Ancho.
Console.WindowHeight = 40; // Y. Alto.
Console.WriteLine("\t\t----------------------------------------");
Console.WriteLine("\t\t\tEnviar Correo Electrónico");
Console.WriteLine("\t\t----------------------------------------");
Console.WriteLine("\n");
Console.Write("\t\tIngresa tu correo electrónico: ");
usuario = Console.ReadLine();
Console.Write("\t\tIngresa tu password: ");
contraseña = leerPassword();
Console.Write("\t\tDestinatario: ");
destinatario = Console.ReadLine();
Console.Write("\t\tAsunto: ");
asunto = Console.ReadLine();
Console.Write("\t\tMensaje: ");
mensaje = Console.ReadLine();
MailMessage correo = new MailMessage(usuario, destinatario, asunto, mensaje);
SmtpClient servidor = new SmtpClient("smtp.gmail.com");
servidor.Port = 587;
NetworkCredential credenciales = new NetworkCredential(usuario, contraseña);
servidor.Credentials = credenciales;
servidor.EnableSsl = true;
try
{
Console.WriteLine("Enviando...");
servidor.Send(correo);
Console.WriteLine("\t\tCorreo enviado de manera exitosa.");
correo.Dispose();
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("\t\tNo se ha enviado nada.");
Console.ReadKey();
}
}
// A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla.
public static string leerPassword()
{
ConsoleKeyInfo cki;
StringBuilder sb = new StringBuilder();
do
{
cki = Console.ReadKey(true);
if (cki.Key != ConsoleKey.Enter)
{
sb.Append(cki.Key);
Console.Write("*");
}
else
break;
} while (true);
Console.WriteLine();
return sb.ToString();
}
}
}
Por mucho que compare el de Windows Form, no lo pillo.
Saludos.