Autor Tema: ¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?  (Leído 1888 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
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
« Última modificación: 19 de Noviembre de 2021, 10:22:02 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Forma

  • PIC10
  • *
  • Mensajes: 8
Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
« Respuesta #1 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.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
« Respuesta #2 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.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Forma

  • PIC10
  • *
  • Mensajes: 8
Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
« Respuesta #3 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#.



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

Saludos.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
« Respuesta #4 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#.



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.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Forma

  • PIC10
  • *
  • Mensajes: 8
Re:¿Porqué enviando un email con SmtpServer y Xamarin (C#) se congela el código?
« Respuesta #5 en: 16 de Febrero de 2023, 02:45:43 »
MUAI se llama ahora y si, hay que probarlo.


 

anything