TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: DominusDRR en 19 de Noviembre de 2021, 10:14:12

Título: ¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
Publicado por: DominusDRR en 19 de Noviembre de 2021, 10:14:12
Hola.

Tengo un código para envía un correo y funciona muy bien con C# y WPF. Es de la siguiente manera:

Código: C#
  1. String emaailO = "xxxxxxx@outlook.com";
  2. String passwordO = "123456789";
  3. SmtpClient SmtpServer = new SmtpClient("smtp.live.com");
  4. var mail = new MailMessage();
  5. mail.From = new MailAddress(emaailO);
  6. mail.To.Add(etEmailUser.Text);
  7. mail.Subject = "Subject";
  8. mail.IsBodyHtml = true;
  9.  
  10. mail.Body = "email body";
  11. SmtpServer.Port = 587;
  12. SmtpServer.UseDefaultCredentials = false;
  13. SmtpServer.Credentials = new System.Net.NetworkCredential(emaailO, passwordO);
  14. SmtpServer.EnableSsl = true;
  15. SmtpServer.Send(mail);

Este mismo código lo estoy utilizando en un proyecto con C# y android (Xamarin) y al alcanzar la línea SmtpServer.Send(mail);, el código permanece ahí sin terminar nunca.



También he puesto el proceso en una tarea asincrónica y el resultado es similar.

Cualquier sugerencia o comentario es bienvenido
Título: Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
Publicado por: Forma en 12 de Febrero de 2023, 13:40:05
Hola:

Me pasó lo mismo.

Desde hace un tiempo, te pide nuevos datos porque han cambiado la seguridad y su servidor.
Nombre de servidor: smtp.office365.com
Puerto: 587
Método de cifrado: STARTTLS

Como puedes ver, tu código de antes es este:
Código: [Seleccionar]
SmtpClient SmtpServer = new SmtpClient("smtp.live.com");
Debes poner esto otro.
Código: [Seleccionar]
SmtpClient SmtpServer = new SmtpClient("smtp.office365.com");
Te dejo un código de prueba hecho con C# donde puedes enviar email de hotmail en modo consola.

Avisa si te funciona.
Código: C#
  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Net.Mail;
  5. using System.Text;
  6.  
  7. namespace Enviar_email_Consola_08
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.  
  14.  
  15.             // Variables.
  16.             string usuario, contraseña, destinatario, asunto, mensaje;
  17.             const int MAXIMA_LONGITUD = 40000;
  18.  
  19.             #region Configuración ventana.
  20.             // Título de la ventana y versión del .Net usando.
  21.             Console.Title = "Gestor correo electrónico Hotmail. "
  22.                 + typeof(string).Assembly.ImageRuntimeVersion;
  23.  
  24.             // Tamaño de la ventana, x, y, o ancho y alto.
  25.             const byte ANCHO_X = 70, ALTO_Y = 25;
  26.             Console.SetWindowSize(ANCHO_X, ALTO_Y);
  27.  
  28.             // Color de fondo.
  29.             Console.BackgroundColor = ConsoleColor.Black;
  30.  
  31.             // Color de las letras.
  32.             Console.ForegroundColor = ConsoleColor.Gray;
  33.  
  34.             // Limpiar pantalla y dejarlo todo en color de fondo.
  35.             Console.Clear();
  36.  
  37.             // Visible el cursor.
  38.             Console.CursorVisible = true;
  39.             #endregion
  40.  
  41.             // Título del programa.
  42.             Console.WriteLine("\t\t----------------------------------------");
  43.             Console.WriteLine("\t\t\tEnviar Correo Electrónico");
  44.             Console.WriteLine("\t\t----------------------------------------");
  45.             try
  46.             {
  47.  
  48.                 Console.WriteLine("\n");
  49.                 Console.ForegroundColor = ConsoleColor.Cyan;
  50.                 Console.Write("\t\tTu correo electrónico: ");
  51.                 Console.ForegroundColor = ConsoleColor.Gray;
  52.                 usuario = Console.ReadLine();
  53.                 Console.WriteLine();
  54.                 Console.ForegroundColor = ConsoleColor.Cyan;
  55.                 Console.Write("\t\tIntroducir contraseña: ");
  56.                 Console.ForegroundColor = ConsoleColor.Gray;
  57.                 contraseña = LeerPassword();
  58.                 Console.WriteLine();
  59.                 Console.ForegroundColor = ConsoleColor.Cyan;
  60.                 Console.Write("\t\tDestinatario: ");
  61.                 Console.ForegroundColor = ConsoleColor.Gray;
  62.                 destinatario = Console.ReadLine();
  63.                 Console.WriteLine();
  64.                 Console.ForegroundColor = ConsoleColor.Cyan;
  65.                 Console.Write("\t\tAsunto: ");
  66.                 Console.ForegroundColor = ConsoleColor.Gray;
  67.                 asunto = Console.ReadLine();
  68.                 Console.WriteLine();
  69.                 Console.ForegroundColor = ConsoleColor.Cyan;
  70.                 Console.Write("\t\tMensaje: ");
  71.                 Console.ForegroundColor = ConsoleColor.Gray;
  72.                 //mensaje = Console.ReadLine(); // Sin codificar.
  73.  
  74.                 #region Enviar más de 255 caracteres.
  75.                 // #########################################################################
  76.                 Stream entradaDeDatos = Console.OpenStandardInput();
  77.                 byte[] buffer = new byte[MAXIMA_LONGITUD];
  78.                 int numerosBytesLeidos = entradaDeDatos.Read(buffer, 0, MAXIMA_LONGITUD);
  79.                 char[] chars = Console.InputEncoding.GetChars(buffer, 0, numerosBytesLeidos);
  80.                 mensaje = new string(chars).Trim(); // El .Trim() para quitar \r\n.
  81.                 // #########################################################################
  82.                 #endregion
  83.  
  84.                 Console.WriteLine();
  85.                 Console.ForegroundColor = ConsoleColor.DarkCyan;
  86.                 Console.Write("\t\tCantidad de caracteres introducido: ");
  87.                 Console.ForegroundColor = ConsoleColor.Gray;
  88.                 Console.WriteLine(mensaje.Length);
  89.  
  90.                 MailMessage correo = new MailMessage(usuario, destinatario, asunto, mensaje)
  91.                 {
  92.                     // Enviar textos con tildes.
  93.                     BodyEncoding = Encoding.UTF8
  94.                 };
  95.  
  96.                 SmtpClient servidor = new SmtpClient("smtp.office365.com") // Antes era "smtp.live.com".
  97.                 {
  98.                     Port = 587 // 25 ó 465.
  99.                 };
  100.                 NetworkCredential credenciales = new NetworkCredential(usuario, contraseña);
  101.                 servidor.Credentials = credenciales;
  102.                 servidor.EnableSsl = true;
  103.  
  104.                 Console.WriteLine();
  105.                 Console.ForegroundColor = ConsoleColor.Yellow;
  106.                 Console.WriteLine("\t\tEnviando correo...");
  107.                 servidor.Send(correo);
  108.                 Console.WriteLine();
  109.                 Console.ForegroundColor = ConsoleColor.Green;
  110.                 Console.WriteLine("\t\t¡Correo enviado satisfactoriamente!");
  111.                 correo.Dispose();
  112.                 Console.CursorVisible = false;
  113.                 Console.ReadKey();
  114.             }
  115.             catch (Exception ex)
  116.             {
  117.                 Console.ForegroundColor = ConsoleColor.Red;
  118.                 Console.WriteLine("ERROR: \n");
  119.                 Console.WriteLine("\t\t" + ex.Message);
  120.                 Console.WriteLine();
  121.                 Console.ForegroundColor = ConsoleColor.Yellow;
  122.                 Console.WriteLine("\t\tNo se ha enviado el correo.");
  123.                 Console.ReadKey();
  124.             }
  125.         }
  126.         #region Asterisco para contraseñas.
  127.         // A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla.
  128.         public static string LeerPassword()
  129.         {
  130.             ConsoleKeyInfo cki;
  131.             StringBuilder sb = new StringBuilder();
  132.             int contador = 0;
  133.  
  134.             do
  135.             {
  136.                 cki = Console.ReadKey(true);
  137.                 if (cki.Key != ConsoleKey.Enter)
  138.                 {
  139.  
  140.                     sb.Append(cki.KeyChar);
  141.                     if (contador < 1)
  142.                     {
  143.                         Console.Write("*");
  144.                     }
  145.                     contador++;
  146.                 }
  147.  
  148.                 else
  149.                 {
  150.                     break;
  151.                 }
  152.  
  153.             } while (true);
  154.             Console.WriteLine();
  155.             return sb.ToString();
  156.         }
  157.         #endregion
  158.     }
  159. }

Saludos.
Título: Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
Publicado por: DominusDRR en 12 de Febrero de 2023, 13:51:53
Hola. Muchas gracias.

Ya es tiempo de eso.

Lo que sucede es que en nuestra empresa, el encargado de software renunció y hasta que otro retome el mando, me tocó terminar algunas cosas (no soy experto en software). Pero luego ya llego un experto en C# y sé que lo solucionó de alguna manera.

Nuevamente gracias, lo revisaré cuando pueda.
Título: Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
Publicado por: Forma en 12 de Febrero de 2023, 17:34:59
Hola:

Lo dejo aquí por si alguien lo necesita. Como ejemplo, es de uso de consola en C#.

(https://i.postimg.cc/Wb4XSPKT/Captura3.jpg)

También tengo hecho otro que envías mensajes por email y me controla Arduino activando luz, motores, persianas, etc.

Saludos.
Título: Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
Publicado por: DominusDRR en 12 de Febrero de 2023, 17:37:14
Hola:

Lo dejo aquí por si alguien lo necesita. Como ejemplo, es de uso de consola en C#.

(https://i.postimg.cc/Wb4XSPKT/Captura3.jpg)

También tengo hecho otro que envías mensajes por email y me controla Arduino activando luz, motores, persianas, etc.

Saludos.

Sería de probarlo en una app de Android con Xamarin, ya que en ese OS tenía el problema.
Título: Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
Publicado por: Forma en 16 de Febrero de 2023, 02:45:43
MUAI se llama ahora y si, hay que probarlo.