none
¿Por qué solo puedo escribir 255 caracteres como máximo? RRS feed

  • Pregunta

  • Buenas:

    Con este programa que es enviar email, en el mensaje solo puedo escribir hasta 255 letras o caracteres, lo mismo para el asunto.

    ¿Cuál es el motivo de la causa?

    Su código es este.

    using System;
    using System.Net.Mail;
    using System.Text;
    using System.Net;
    
    namespace Enviar_e_mail_Consola_04_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 = 80; // X. Ancho.
                Console.WindowHeight = 40; // Y. Alto.
    
                // Tamaño del cursor. Del 1 al 100.
                Console.CursorSize = 50;
    
                // Título del programa.
                Console.WriteLine("\t\t----------------------------------------");
                Console.WriteLine("\t\t\tEnviar Correo Electrónico");
                Console.WriteLine("\t\t----------------------------------------");
    
                try
                {
                    Console.WriteLine("\n");
                    Console.Write("\t\tIngresar tu correo electrónico: ");
                    usuario = Console.ReadLine();
                    Console.Write("\t\tIntroducir contraseña: ");
                    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")
                    {
                        Port = 587
                    };
                    NetworkCredential credenciales = new NetworkCredential(usuario, contraseña);
                    servidor.Credentials = credenciales;
                    servidor.EnableSsl = true;
    
                    Console.WriteLine("\t\tEnviando correo...");
                    servidor.Send(correo);
                    Console.WriteLine("\t\tCorreo enviado satisfactoriamente.");
                    correo.Dispose();
                    Console.ReadKey();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("\t\t" + ex.Message);
                    Console.WriteLine("\t\tNo se ha enviado el correo.");
                    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();
                int contador = 0;
    
                do
                {
                    cki = Console.ReadKey(true);
                    if (cki.Key != ConsoleKey.Enter)
                    {
    
                        sb.Append(cki.KeyChar);
                        if (contador < 4)
                        {
                            Console.Write("*");
                        }
                        contador++;
                    }
    
                    else
                    {
                        break;
                    }
    
                } while (true);
                Console.WriteLine();
                return sb.ToString();
            }
        }
    }

    ;)


    http://electronica-pic.blogspot.com

    martes, 11 de junio de 2019 22:55

Respuestas

  • Hola, tu problema es el usar Console.Readline() que como puedes ver en la documentación

    De forma predeterminada, el método lee la entrada de un búfer de entrada de 256 caracteres. Debido a que esto incluye los caracteres de Environment.NewLine, el método puede leer líneas que contienen hasta 254 caracteres. Para leer líneas más largas, llame al método OpenStandardInput (Int32).

    Documentación de Console.OpenStandardInput Method

    using System;
    using System.Text;
    using System.IO;
    
    public class Decoder {
        public static void Main() {
            Stream inputStream = Console.OpenStandardInput();
            byte[] bytes = new byte[100];
            Console.WriteLine("To decode, type or paste the UTF7 encoded string and press enter:");
            Console.WriteLine("(Example: \"M+APw-nchen ist wundervoll\")");
            int outputLength = inputStream.Read(bytes, 0, 100);
            char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength);
            Console.WriteLine("Decoded string:");
            Console.WriteLine(new string(chars));
        }
    }




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





    martes, 11 de junio de 2019 23:18
    Moderador
  • Sí, mientras esté en rango de enteros


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

    • Marcado como respuesta Metaconta miércoles, 12 de junio de 2019 21:54
    miércoles, 12 de junio de 2019 13:02
    Moderador
  • Hola. En cuanto a la codificación, puede que se me haya colado el utf7. Haz pruebas cambiando a utf8. Viendo las líneas comentadas... Te está pasando lo de aplicaciones no seguras? 

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

    • Marcado como respuesta Metaconta miércoles, 12 de junio de 2019 21:54
    miércoles, 12 de junio de 2019 17:36
    Moderador

Todas las respuestas

  • Hola, tu problema es el usar Console.Readline() que como puedes ver en la documentación

    De forma predeterminada, el método lee la entrada de un búfer de entrada de 256 caracteres. Debido a que esto incluye los caracteres de Environment.NewLine, el método puede leer líneas que contienen hasta 254 caracteres. Para leer líneas más largas, llame al método OpenStandardInput (Int32).

    Documentación de Console.OpenStandardInput Method

    using System;
    using System.Text;
    using System.IO;
    
    public class Decoder {
        public static void Main() {
            Stream inputStream = Console.OpenStandardInput();
            byte[] bytes = new byte[100];
            Console.WriteLine("To decode, type or paste the UTF7 encoded string and press enter:");
            Console.WriteLine("(Example: \"M+APw-nchen ist wundervoll\")");
            int outputLength = inputStream.Read(bytes, 0, 100);
            char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength);
            Console.WriteLine("Decoded string:");
            Console.WriteLine(new string(chars));
        }
    }




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





    martes, 11 de junio de 2019 23:18
    Moderador
  • ¿Se necesita tanto código para ello? 

    http://electronica-pic.blogspot.com

    miércoles, 12 de junio de 2019 10:28
  • Hola, lo que he indicado en mi respuesta es el ejemplo que viene en el enlace, por cierto, lo edito

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

    miércoles, 12 de junio de 2019 10:33
    Moderador
  • Sí, mientras esté en rango de enteros


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

    • Marcado como respuesta Metaconta miércoles, 12 de junio de 2019 21:54
    miércoles, 12 de junio de 2019 13:02
    Moderador
  • Hola. En cuanto a la codificación, puede que se me haya colado el utf7. Haz pruebas cambiando a utf8. Viendo las líneas comentadas... Te está pasando lo de aplicaciones no seguras? 

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

    • Marcado como respuesta Metaconta miércoles, 12 de junio de 2019 21:54
    miércoles, 12 de junio de 2019 17:36
    Moderador