|
352
|
Programación / .NET (C#, VB.NET, ASP) / ¿Por qué solo puedo escribir 255 caracteres como máximo?
|
en: 12 Junio 2019, 07:00 am
|
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(); } } }
Salu2. camaradas.
|
|
|
353
|
Programación / .NET (C#, VB.NET, ASP) / Re: ¿Cómo puedo leer el mensaje de un email y mostrarlo en la consola?
|
en: 12 Junio 2019, 06:58 am
|
Hola: Ya e funciona leer el POP3 del correo electrónico como puedes ver abajo, lee asunto y el mensaje de texto sin formato, de otra manera no lo lee. El programa de abajo que funciona al completo, quiero modificar algunas cosa que no se como se hace, por ejemplo, si me llega mensajes nuevos, me lee todos los mensajes nuevos, solo quiero que me lea el último mensaje nuevo, solo un mensaje. A parte de esto, C# no lee el último mensaje nuevo porque tiene que ser que vuelva a ejecutar el ejecutable. ¿Hay alguna manera de que el ejecutable lea en cada cierto tiempo la entrada del email? Por ejemplo, en cada 5 minutos se pone a leer la bandeja de entrada si hay algún mensaje y lo muestra en pantalla, mientas el mensaje viejo que nunca se borra del servidor, solo en pantalla de la consola C# haga esto, Console.Clear(); // Limpiar pantalla y vuelva a mostrar mensaje nuevo. Código fuente C#: using System; using System.Collections.Generic; using OpenPop.Pop3; using System.Net.Mime; namespace Recibir_email_Consola_01 { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Recibir e-mail con Consola C#"; // Tamaño ventana consola. Console.WindowWidth = 80; // X. Ancho. Console.WindowHeight = 40; // Y. Alto. // Cursor invisible. Console.CursorVisible = false; // Título del programa. Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine("\t\t\tRecibir Correo Electrónico"); Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine(); try { ConnectPop3 oC = new ConnectPop3 (); List<OpenPop.Mime.Message> lstMessages = oC.GetMessages(); if (lstMessages != null) { foreach (var oMessage in lstMessages) { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("ASUNTO: "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(oMessage.Headers.Subject + "\n"); // Asunto. //Console.WriteLine(oMessage.Headers.From); // Email del que te envió el mensaje. //Console.WriteLine(oMessage.Headers.ContentTransferEncoding); //out: SevenBit. //Console.WriteLine(oMessage.Headers.ContentType); //Console.WriteLine(oMessage.Headers.Date); // Fecha larga. //Console.WriteLine(oMessage.Headers.DateSent); // Fecha corta. //Console.WriteLine(oMessage.Headers.Importance); // Out: Normal. //Console.WriteLine(oMessage.Headers.MimeVersion); // Versión. //Console.WriteLine(); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("MENSAJE: "); // Aquí se pone código del mensaje que no se cual es. Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(oMessage.MessagePart.GetBodyAsText()); // Mensaje. } } Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas. Console.WriteLine(); Console.WriteLine("FIN DEL PROGRAMA."); Console.ReadKey(); // Pulse cualquier tecla para salir. } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(); Console.WriteLine(ex); Console.ReadKey(); } } } public class ConnectPop3 { public string email = "celltium@gmail.com"; public string contraseña = "g0923490xgh0945g450Xj4025g"; // Ficcicio. public int puerto = 995; public bool usarSLL = true; public string Hostame = "pop.gmail.com"; public List<OpenPop.Mime.Message> GetMessages() { using (Pop3Client oClient = new Pop3Client ()) { oClient.Connect(Hostame, puerto, usarSLL); oClient.Authenticate(email, contraseña); int messageCount = oClient.GetMessageCount(); List <OpenPop .Mime.Message> lstMessages = new List <OpenPop .Mime.Message>(messageCount ); for (int i = messageCount; i > 0; i--) { lstMessages.Add(oClient.GetMessage(i)); } return lstMessages; } } } }
Les recuerdo que solo admite mensaje texto sin formato para que lo lea. Datos de interés. https://github.com/foens/hpophttp://hdeleon.net/realizar-una-conexion-el-correo-para-ver-los-mails-con-c-net-gmail-pop3-openpop-net/Un cordial saludos.
|
|
|
354
|
Programación / .NET (C#, VB.NET, ASP) / ¿Cómo puedo leer el mensaje de un email y mostrarlo en la consola?
|
en: 11 Junio 2019, 01:23 am
|
Hola: Me funciona el código, veo datos menos el que me interesa, precisamente no me sale el contenido del mensaje, es el que quiero que me muestre en pantalla. El programa solo lee los últimos email nuevos. (A veces tienes que actualizar varias veces tu navegador para que se muestre la captura).Código C#:using System; using System.Collections.Generic; using OpenPop.Pop3; namespace Recibir_email_Consola_01 { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Recibir 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\tRecibir Correo Electrónico"); Console.WriteLine("\t\t----------------------------------------"); try { ConnectPop3 oC = new ConnectPop3 (); List<OpenPop.Mime.Message> lstMessages = oC.GetMessages(); if (lstMessages != null) { foreach (var oMessage in lstMessages) { Console.WriteLine(oMessage.Headers.Subject); // Asunto. Console.WriteLine(oMessage.Headers.From); // Email del que te envió el mensaje. Console.WriteLine(oMessage.Headers.ContentTransferEncoding); //out: SevenBit. Console.WriteLine(oMessage.Headers.ContentType); Console.WriteLine(oMessage.Headers.Date); // Fecha larga. Console.WriteLine(oMessage.Headers.DateSent); // Fecha corta. Console.WriteLine(oMessage.Headers.Importance); // Out: Normal. Console.WriteLine(oMessage.Headers.MimeVersion); // Versión. Console.WriteLine(oMessage.Headers.MessageId); } } Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas. Console.WriteLine("FIN DEL PROGRAMA."); Console.ReadKey(); // Pulse cualquier tecla para salir. } catch (Exception e) { Console.WriteLine(e.ToString()); } } } public class ConnectPop3 { public string email = "celltium@gmail.com"; public string contraseña = "g0923490xgh0945g450Xj4025g"; public int puerto = 995; public bool usarSLL = true; public string Hostame = "pop.gmail.com"; public List<OpenPop.Mime.Message> GetMessages() { using (Pop3Client oClient = new Pop3Client ()) { oClient.Connect(Hostame, puerto, usarSLL); oClient.Authenticate(email, contraseña); int messageCount = oClient.GetMessageCount(); List <OpenPop .Mime.Message> lstMesages = new List <OpenPop .Mime.Message>(messageCount ); for (int i = messageCount; i > 0; i--) { lstMesages.Add(oClient.GetMessage(i)); } return lstMesages; } } } }
Pensé que leer el mensaje es ete código pero veo que no. Console.WriteLine(oMessage.Headers.MessageId);
http://rfinochi.github.io/pop3dotnet/¿Cómo puedo ver el mensaje del email? Saludos.
|
|
|
356
|
Programación / Programación C/C++ / Quiero saber si es posible transformas estas clases en dll y importarla
|
en: 10 Junio 2019, 21:04 pm
|
Hola: Quiero saber si estas clases se puede transformar por llamarlo de alguna manera en una librería dll y que se pueda llamar y usarla en cualquier interfaz como C#, C++ .net y V b .net. Por ejemplo, estas clases controla el puerto serie que puedes descargar aquí. https://github.com/Gmatarrubia/LibreriasTutorialesHe aprovechado en su tiempo hacer un tutorial sobre esas clases creando una interfaz en C++ bajo Win32 solo consola y funciona, junto con Arduino. Aquí abajo dejo el enlace de como instalarlas y usarlas. https://www.slideshare.net/Metaconta2/arduino-c-y-puerto-serieProbando, hice otro tutorial solo crear una dll que muestra texto y una suma en el cual lo importas a C#, lo lee y funciona tal como indica en el enlace de abajo. https://www.slideshare.net/Metaconta/crear-una-dll-en-c-y-llamarla-con-la-interfaz-cDada ya esta información y antes de empezar, quiero saber si lo que quiero hacer es posible. Para dejarlo más claro, al crear la dll en C++ win32 como indica en el tutorial de arriba, al llamarlo o importarlo con C#, tiene que ser capaz de hacerlo cambiando valores como port, baudios, paridad, bits de stop y demás, algo similar indicado aquí. Luego enviar comandos al puerto serie y recibirlos ya explicado arriba. En resumen:1. De las clases del puerto serie convertirlas en una dll. 2. Una vez creada la dll, hacer una interfaz que se pueda configurar los parámetros del puerto serie. 3. Usar el puerto serie, enviado y recibiendo tramas de bytes como indica en este tutorial ya dicho. ¿Alguna idea? Saludos.
|
|
|
357
|
Programación / .NET (C#, VB.NET, ASP) / Re: Hacer lo mismo de esta "cosa" de la película ochentera
|
en: 6 Mayo 2019, 00:27 am
|
Vale. Código no hecho por mi. private void Form1_Load(object sender, EventArgs e) { Thread tr = new Thread (new ThreadStart (drawlines )); tr.Start(); } public delegate void Function(); Point A = new Point (5, 5); Point B = new Point (5, 5); private void drawlines() { Thread.Sleep(1000); drawMarco(); Thread.Sleep(25); SetText("2", "PROJECTION:"); SetText("3", "IF INTRUDER ORGANISM REACHES"); SetText("4", "CIVILIZED AREAS . . ."); Thread.Sleep(100); SetText("7", "ENTIRE WORLD POPULATION INFECTED"); SetText("8", "27,000 HOURS FROM FIRST CONTACT."); Thread.Sleep(2000); clrscr(); drawMarco(); SetText("1", "PROYECCIÓN:"); SetText("2", "SI ORGANISMO INTRUSO ALCANZA"); SetText("3", "ZONAS CIVILIZADAS . . . "); Thread.Sleep(100); SetText("7", "TODA LA POBLACIÓN MUNDIAL INFECTÓ"); SetText("8", "27,000 HORAS DESDE EL PRIMER"); SetText("9", "CONTACTO."); Thread.Sleep(2000); Application.Exit(); } private void clrscr() { A = B; Graphics ps = this.CreateGraphics(); ps .FillRectangle(new SolidBrush (Color .DarkBlue), 0, 0, this.Width, this.Height); foreach (Control control in Controls) { this.Invoke(new Function (delegate () { control.Text = ""; })); } } private void SetText(string name, string txt) { string nombre = $"label{name}"; foreach (char letra in txt) { this.Invoke(new Function (delegate () { Controls[nombre].Text += letra; })); Console.Beep(600, 25); Thread.Sleep(25); } } private void drawMarco() { for (int i = 5; i < this.Width - 20; i++) SetMarco(i, B.Y); for (int i = 5; i < this.Height - 40; i++) SetMarco(B.X, i); for (int i = this.Width - 20; i > 5; i--) SetMarco(i, B.Y); for (int i = this.Height - 40; i > 5; i--) SetMarco(B.X, i); } private void SetMarco(int x,int y) { this.Invoke(new Function (delegate () { A = B; Graphics ps = this.CreateGraphics(); ps .DrawLine(new Pen (Color .Blue, 3), A, B ); })); Thread.Sleep(1); }
|
|
|
358
|
Programación / .NET (C#, VB.NET, ASP) / Re: Hacer lo mismo de esta "cosa" de la película ochentera
|
en: 5 Mayo 2019, 16:56 pm
|
Fantático ejemplos visuales. Si te fija en el vídeo, primero la formación del rectángulo se hace poco a poco, no de golpe, algo parecido hice en modo consola. En Windows Form el cuadro se hace directo, no poco a poco con GDI+, por eso mejor usar los ASCII para la formación del retángulo como en modo consola. Por ahora solo he heche textos en Windows Form. Añado un timer, luego hago el resto. Con Window Form. using System; using System.Windows.Forms; namespace The_Thing_La_Cosa { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string texto = @" PROJECTION: IF INTRUDER ORGANISM REACHES CIVILIZED AREAS . . . ENTIRE WORLD POPULATION INFECTED 27,000 HOURS FROM FIRST CONTACT. "; int contador = 0; private void timer1_Tick(object sender, EventArgs e) { label1.Text += texto[contador++]; if (contador >= texto.Length) { timer1.Enabled = false; Console.Beep(600, 25); // Console.Beep(frecuencia, duracion); } } private void Form1_Load(object sender, EventArgs e) { timer1.Enabled = true; } } }
Lo intenté hacer con WPF pero no tiene el componente timer, habrá que crear hasta su propio evento y vete a saber cuántos códigos más. Gracias por compartir.
|
|
|
359
|
Programación / .NET (C#, VB.NET, ASP) / Hacer lo mismo de esta "cosa" de la película ochentera
|
en: 4 Mayo 2019, 21:52 pm
|
Hola: Quiero hacer los dibujos exactamente lo mismo como en este ordenador ochentero de esta película exactamente indicado en el minuto 6:56 de este vídeo. Lo que he hecho hasta ahora son solo textos, en el cual no se el motivo, no me sale el rellenado de la parte derecha de la pantalla con el │ ASCII 179. using System; using System.Threading; namespace The_Thing_La_Cosa_Consola_01_cs { class Program { static void Main(string[] args) { Console.Title = "The Thing - La Cosa - C#"; Console.WindowWidth = 38; // X ancho. Console.WindowHeight = 15; // Y altura. int tiempo = 1; // Cursor invisible. Console.CursorVisible = false; // Dibujar cuadro. DrawMarco(1, 1, 35, 14); // Escribir textos. Console.SetCursorPosition(2, 4); Escribir("PROJECTION: \n", 25); Console.SetCursorPosition(2, 5); Escribir("IF INTRUDER ORGANISM REACHES \n", 25); Console.SetCursorPosition(2, 6); Escribir("CIVILIZED AREAS . . . \n", 25); Thread.Sleep(100); Console.SetCursorPosition(2, 10); Escribir("ENTIRE WORLD POPULATION INFECTED \n", 25); Console.SetCursorPosition(2, 11); Escribir("27,000 HOURS FROM FIRST CONTACT. \n", 25); // En español. Thread.Sleep(2000); // Limpiar pantalla. Console.Clear(); // Dibujar cuadro. DrawMarco(1, 1, 35, 14); // Escribir textos. Console.SetCursorPosition(2, 3); Escribir("PROYECCIÓN: \n", 25); Console.SetCursorPosition(2, 4); Escribir("SI ORGANISMO INTRUSO ALCANZA \n", 25); Console.SetCursorPosition(2, 5); Escribir("ZONAS CIVILIZADAS . . . \n", 25); Thread.Sleep(100); Console.SetCursorPosition(2, 9); Escribir("TODA LA POBLACIÓN MUNDIAL INFECTÓ\n", 25); Console.SetCursorPosition(2, 10); Escribir("27,000 HORAS DESDE EL PRIMER\n", 25); Console.SetCursorPosition(2, 11); Escribir("CONTACTO. \n", 25); Console.ReadKey(); } public static void Escribir(string Cadena, int tiempo) { foreach (char letra in Cadena) { Console.Write(letra); Thread.Sleep(tiempo); } } private static void DrawMarco(int v1, int v2, int v3, int v4) { Console.ForegroundColor = ConsoleColor.Cyan; // Texto azul claro. Console.BackgroundColor = ConsoleColor.DarkBlue; // Fondo azul oscuro. Console.Clear(); // Para poner fondo azul oscuro en la pantalla completa. Console.CursorVisible = false; gotoXY(v1, v2, "┌"); for (int i = v1 + 1; i < v3; i++) { gotoXY(i, v2, "─"); } gotoXY(v3, v2, "┐"); for (int i = v2 + 1; i < v4; i++) { gotoXY(v3, i, "│"); } gotoXY(v3, v4, "┘"); for (int i = v3 - 1; i > v1; i--) { gotoXY(i, v4, "─"); } gotoXY(v1, v4, "└"); for (int i = v4 - 1; i > v2; i--) { gotoXY(v1, i, "│"); } //Console.CursorVisible = true; } private static void gotoXY(int v1, int v2, string cadena) { Console.SetCursorPosition(v1, v2); Console.WriteLine(cadena); Thread.Sleep(1); } } }
¿Alguna idea de como hacerlo? Por lo que parece, a pesar de que es del 1982, hoy en día exige mucho tiempo y complicado. Saludos.
|
|
|
360
|
Programación / .NET (C#, VB.NET, ASP) / Re: Simulando barra de progreso
|
en: 2 Marzo 2019, 22:01 pm
|
Muchísimas gracias mi muy distinguido amigo. En cuanto a NEBIRE. Sigo tropesando. Me dio por comprar un libro en papel barato que me da más motivación para leerlo pero en C/C++, para practicar ejercicios está bien. En C# están libros caros y grandes. Lo de grande está bien pero 80 €urazos como estoy ahora como que no. Se que está internet, también aprovechar. En cuanto a tu código que funciona bien, en el cual agradezco. Lo entiendo mejor, por que muestras, lo hiciste con estilo y un poco pijo . En la parte FullProgreso = new string((char)177, Cantidad );
Para asegurte que se muestre bien la imágenes dependiendo quien ejecute el programa, puede mostrar diferentes caractéres. Hay que asegurarse un tipo de codificación, algo parecido a esto. Console.Write(Encoding.ASCII.GetBytes((char)219));
Así te aseguras que en cualquier país funcione a la primera. Gracias por los consejos.
|
|
|
|
|
|
|