none
Enviar mensaje correo electrónico e-mail RRS feed

  • Pregunta

  • Hola:

    Estoy creando una aplicación para enviar mensajes al correo electrónico.

    Me falta poner algunos comboBox y texbox para gmail, hotmail sus smtp, puerto y demás.

    ¿Cómo se hace?

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 8 de enero de 2019 17:49

Respuestas

Todas las respuestas

  • hola

    >>Me falta poner algunos comboBox y texbox para gmail, hotmail sus smtp, puerto y demás. ¿Cómo se hace?

    como se hace que cosa ? poner un combo

    podrias definir estos datos en confguracion o quizas definir una entidd en codigo y mostrar opciones

    quizas una lista de una class que definas con estos datos

    List<SmtpData> list = new List<SmtpData>(){
    
        new SmtpData() {nombre="outlook", port="25", smtp="outlook.smtp.com" },
    
       //resto
    
    }


    entonces asignas esa lista al combo indicando el nombre como DisplayName

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 8 de enero de 2019 18:18
  • Hola:

    Me sale este error al enviar un mesaje.

    System.Net.Mail.SmtpException: 'El servidor SMTP requiere una conexión segura o el cliente no se autenticó. La respuesta del servidor fue: 5.5.1 Authentication Required. Learn more at'

    El cóigo que tengo hasta ahora es.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;       // No olvidar.
    using System.Net.Mail;  // No olvidar.
    using System.Net.Mime;  // 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 = "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.UseDefaultCredentials = false;
                cliente.Credentials = new System.Net.NetworkCredential("metaconta@gmail.com", "");
                cliente.Port = 587;
                cliente.Host = "smtp.gmail.com";
                cliente.EnableSsl = true;
    
                //Añade credenciales si el servidor lo requiere.
                cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
                cliente.Send(mensaje); // Aquí salte el mensaje de ERROR indicado arriba.
            }
        }
    }

    Saludos.


    http://electronica-pic.blogspot.com

    viernes, 11 de enero de 2019 5:53
  • Hola, si te fijas en la penúltima línea, estas sobrescribiendo las credenciales, borra esa línea y en esta

    cliente.Credentials = new System.Net.NetworkCredential("metaconta@gmail.com", "");

    El último parámetro de ser la contraseña. 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    viernes, 11 de enero de 2019 7:38
    Moderador
  • Lo hice y si puse la conreaseña. Ocurre el mismo error.

    http://electronica-pic.blogspot.com

    viernes, 11 de enero de 2019 16:59
  • Hola establece

    cliente.DeliveryMethod = SmtpDeliveryMethod.Network;


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 11 de enero de 2019 18:06
    Moderador
  • El mismo error.

    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 = "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.Credentials = new System.Net.NetworkCredential("", "Contraseña");
                cliente.Port = 587;
                cliente.Host = "smtp.gmail.com";
                cliente.EnableSsl = true;
    
                //Añade credenciales si el servidor lo requiere.
                cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
                cliente.Send(mensaje);
            }
        }
    }

    ¿No habrá otros códigos ejemplos más actualizado?

    Saludos


    http://electronica-pic.blogspot.com

    viernes, 11 de enero de 2019 20:42
  • Hola de nuevo:;

    Intenté hacerlo hasta en modo consola y no funciona. No envía nada.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net.Mail; // No olvidar.
    using System.Net;
    
    namespace Enviar_e_mail_Consola_01_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                string usuario, contraseña, destinatario, asunto, mensaje;
    
                Console.WriteLine("\t\t----------------------------------------");
                Console.WriteLine("\t\t\tEnviar Correo Electronico");
                Console.WriteLine("\t\t----------------------------------------");
    
    
                Console.WriteLine("\n");
                Console.Write("\t\tIngresa tu correo electornico: ");
                usuario = Console.ReadLine();
                Console.Write("\t\tIngresa tu password: ");
                contraseña = Console.ReadLine();
                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
                {
                    servidor.Send(correo);
                    Console.WriteLine("\t\tCorreo enviado de manera exitosa");
                    correo.Dispose();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }


    http://electronica-pic.blogspot.com

    viernes, 11 de enero de 2019 22:34
  • Prueba a usar puertos 465 o el 25... Es muy raro lo que te a ocurre. Has verificado la password? 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 11 de enero de 2019 22:52
    Moderador
  • Me sale error:

    System.Net.Mail.SmtpException: 'Error al enviar correo.'

    IOException: No se puede escribir datos de en la conexión de transporte: net_io_connectionclosed.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;       // No olvidar.
    using System.Net.Mail;  // No olvidar.
    using System.Net.Mime;  // 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 = "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.Credentials = new System.Net.NetworkCredential("", "Contraseña");
                cliente.Port = 465;
                cliente.Host = "smtp.gmail.com";
                cliente.EnableSsl = true;
    
                //Añade credenciales si el servidor lo requiere.
                cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
                cliente.Send(mensaje);
            }
        }
    }


    No se que hacer ya.


    Abajo, con el código en modo consola dice enviando y se queda ahí. No dice nada más, el rpograma se cierra.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net.Mail; // No olvidar.
    using System.Net;
    
    namespace Enviar_e_mail_Consola_01_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                string usuario, contraseña, destinatario, asunto, mensaje;
    
                Console.WriteLine("\t\t----------------------------------------");
                Console.WriteLine("\t\t\tEnviar Correo Electronico");
                Console.WriteLine("\t\t----------------------------------------");
    
    
                Console.WriteLine("\n");
                Console.Write("\t\tIngresa tu correo electornico: ");
                usuario = Console.ReadLine();
                Console.Write("\t\tIngresa tu password: ");
                contraseña = Console.ReadLine();
                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();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine("\t\tNo se ha enviado nada.");
                }
            }
        }
    }

    ¿Hay algo que sirva?

    • Editado Metaconta viernes, 11 de enero de 2019 23:24
    viernes, 11 de enero de 2019 23:19
  • Hola de nuevo:

    En mi cuenta google me llegó este mensaje.

    Se ha bloqueado un intento de inicio de sesión
    metaconta@gmail.com

    Alguien acaba de usar tu contraseña para intentar iniciar sesión en tu cuenta desde una aplicación que no es de Google. Aunque Google ha bloqueado el acceso, deberías averiguar qué ha pasado. Revisa la actividad de la cuenta y comprueba que solo tú tienes acceso a ella.

    Pincho y eso sale.

    Se ha bloqueado una aplicación poco segura

    Hemos bloqueado la aplicación que intentabas usar porque no cumple nuestros estándares de seguridad.
    Algunos dispositivos y aplicaciones utilizan una tecnología de inicio de sesión menos segura, lo que hace que tu cuenta sea más vulnerable. Te recomendamos que desactives el acceso de estas aplicaciones, aunque también puedes activarlo si quieres usarlas a pesar de los riesgos que conllevan.
    Más información

    ------------------------

    <section class="article-container" data-stats-ve="35">

    Permitir el acceso a cuentas desde aplicaciones menos seguras

    Si una aplicación o un dispositivo no cumple con nuestros estándares de seguridad, Google bloqueará a cualquier persona que intente iniciar sesión desde esa aplicación o dispositivo. El bloqueo contribuye a mantener la seguridad de tu cuenta, ya que es muy fácil acceder a estas aplicaciones y dispositivos sin autorización.

    A continuación, se muestran algunos ejemplos de aplicaciones que no son compatibles con la última versión de los estándares de seguridad:

    • La aplicación Mail para iPhone o iPad con la versión 6 o versiones anteriores
    • La aplicación Mail en un teléfono con una versión de Windows Phone anterior a la 8.1
    • Algunos clientes de correo electrónico para ordenadores, como Microsoft Outlook y Mozilla Thunderbird

    Cambiar el acceso a la cuenta para aplicaciones menos seguras

    Para mantener más protegidas tus cuentas de Google del trabajo, del centro educativo o de otro grupo, bloqueamos las aplicaciones menos seguras para que no puedan acceder a ellas. Si tienes una cuenta de este tipo, se te mostrará el error "Contraseña incorrecta" cuando intentes iniciar sesión. Si es así, tienes dos opciones:

    • Opción 1: instala una aplicación más segura que utilice medidas de seguridad más sólidas. Todos los productos de Google, como Gmail, utilizan las medidas de seguridad más recientes.
    • Opción 2: cambia la configuración para permitir que las aplicaciones poco seguras accedan a tu cuenta. Esta opción no es recomendable porque puede facilitar el acceso a tu cuenta a otra persona. Si, aún así, quieres utilizarla, sigue estos pasos:
      1. Ve a tu cuenta de Google.
      2. En el panel de navegación de la izquierda, haz clic en Seguridad.
      3. En el panel Acceso de aplicaciones poco seguras de la parte inferior de la página, haz clic en Activar acceso.
        1.  Si no ves este ajuste, es posible que el administrador haya desactivado el acceso de las aplicaciones poco seguras a la cuenta.

    Si sigues sin poder iniciar sesión en tu cuenta, obtén más información sobre el error "Contraseña incorrecta".

    </section>

    Indica algo??????


    http://electronica-pic.blogspot.com

    sábado, 12 de enero de 2019 0:31
  • PAra variar lo hice con hotmail también y me da esta respuesta.

    El servidor SMTP requiere una conexión segura o el cliente no se autenticó. La respuesta del servidor fue: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [MRXP264CA0031.FRAP264.PROD.OUTLOOK.COM]'

    Los datos para Hotmail son los siguientes:

    • Servidor POP3: pop3.live.com
    • Puerto POP3: 995.
    • POP SSL: Si.
    • Servidor SMTP: smtp.live.com
    • Puerto SMTP: 25.
    • ¿Autenticación necesaria?: Sí, usando los mismos datos de usuario y contraseña.
    • TLS/SSL: Si.

    Me da que desde que detecte que en enviado con C#, se bloquea y no deja enviar nada. Tiene que ser eso por seguridad, no encuentro la solución.


    http://electronica-pic.blogspot.com


    • Editado Metaconta sábado, 12 de enero de 2019 0:55
    sábado, 12 de enero de 2019 0:54
  • Hola:

    Ya me funciona. Hay que pinchar en seguridad con este enlace.

    https://myaccount.google.com/lesssecureapps

    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);
                button_Enviar.Text = "Enviado.";
            }
        }
    }

    El que no me sale es el de modo consola.

        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();
                }
            }
        }

    Saludos.


    http://electronica-pic.blogspot.com

    domingo, 13 de enero de 2019 10:07
  • Hola Metaconta:

    Cambia la tecla pulsada, por el caracter pulsado.

        sb.Append(cki.Key);

    por

        sb.Append(cki.KeyChar);

    ConsoleKeyInfo

    https://docs.microsoft.com/es-es/dotnet/api/system.consolekeyinfo?view=netframework-4.7.2

    • Marcado como respuesta Metaconta domingo, 13 de enero de 2019 11:32
    domingo, 13 de enero de 2019 10:30
  • ME funcionó.

    Muchas gracias.

    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.KeyChar);
                        Console.Write("*");
                    }
    
                    else
                        break;
    
                } while (true);
                Console.WriteLine();
                return sb.ToString();
            }
        }
    }


    http://electronica-pic.blogspot.com

    domingo, 13 de enero de 2019 11:32