[C#] Capturar el error en un envío de Mail

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Lysander
    Concha Y Perón
    • 19-06-2005
    • 5514

    #1

    [C#] Capturar el error en un envío de Mail

    Código:
     void AvisoPorMail(Parametrosssss)
          {
                try
                {
                    MailMessage objMensa = new MailMessage();
                    objMensa.From = new MailAddress("aplicaciones@ssn.gov.ar");
                    objMensa.To.Add(MailPersona.Trim().ToLower());
                    objMensa.Subject = "Registración satisfactoria";
                    objMensa.IsBodyHtml = true;
                    objMensa.Priority = MailPriority.High;
                    objMensa.Body = "BLABLA";
    
                    System.Net.Mail.SmtpClient sC = new System.Net.Mail.SmtpClient();
                    sC.Host = "smtp.ssn.gov.ar";
                    sC.Credentials = new System.Net.NetworkCredential("aplicaciones@ssn.gov.ar", "aplicaciones");
                    sC.Send(objMensa);
                }
                catch (Exception)
                {
                    ErrorMail = true;
                }
            }
    Cuestión, sea válido o no el mail, no entra al Catch, y nunca puedo saber si el mail llegó o no llegó.

    Alguna idea/crítica/sugerencia?
  • MoaLaiSkirulais
    ^^(V)^^
    • 08-07-2003
    • 23268

    #2
    creo q el error nunca va a raisear ahi.
    pq el envio incluso es asincronico, lo administrra el smtp.
    capaz hay alguna opcion para rastraer "intentos de envio" ?

    lo q hago a veces es leer el log del smtp y presentar tipo informe de invalidos...

    Comentario

    • Lux
      ルクス
      • 24-04-2003
      • 24465

      #3
      ni idea de C# y desgraciadamente soy un ignorante, pero ese ErrorMail de donde sale?

      Comentario

      • Lysander
        Concha Y Perón
        • 19-06-2005
        • 5514

        #4
        Es una variable declarada arriba, no importa. Como carajo leo el log del smpt?

        Comentario

        • MoaLaiSkirulais
          ^^(V)^^
          • 08-07-2003
          • 23268

          #5
          che fijate este ejemplo del msdn, tiene un callBack
          Sends email by using the Simple Mail Transfer Protocol (SMTP). The SmtpClient type is not recommended for new development; for more information, see the Remarks section.


          Código PHP:
          using System;
          using System.Net;
          using System.Net.Mail;
          using System.Net.Mime;
          using System.Threading;
          using System.ComponentModel;
          namespace Examples.SmptExamples.Async
          {
              public class SimpleAsynchronousExample
              {
                  static bool mailSent = false;
                  private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
                  {
                      // Get the unique identifier for this asynchronous operation.
                       String token = (string) e.UserState;
          
                      if (e.Cancelled)
                      {
                           Console.WriteLine("[{0}] Send canceled.", token);
                      }
                      if (e.Error != null)
                      {
                           Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
                      } else
                      {
                          Console.WriteLine("Message sent.");
                      }
                      mailSent = true;
                  }
                  public static void Main(string[] args)
                  {
                      // Command line argument must the the SMTP host.
                      SmtpClient client = new SmtpClient(args[0]);
                      // Specify the e-mail sender.
                      // Create a mailing address that includes a UTF8 character
                      // in the display name.
                      MailAddress from = new MailAddress("jane@contoso.com", 
                         "Jane " + (char)0xD8+ " Clayton", 
                      System.Text.Encoding.UTF8);
                      // Set destinations for the e-mail message.
                      MailAddress to = new MailAddress("ben@contoso.com");
                      // Specify the message content.
                      MailMessage message = new MailMessage(from, to);
                      message.Body = "This is a test e-mail message sent by an application. ";
                      // Include some non-ASCII characters in body and subject.
                      string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
                      message.Body += Environment.NewLine + someArrows;
                      message.BodyEncoding =  System.Text.Encoding.UTF8;
                      message.Subject = "test message 1" + someArrows;
                      message.SubjectEncoding = System.Text.Encoding.UTF8;
                      // Set the method that is called back when the send operation ends.
                      client.SendCompleted += new 
                      SendCompletedEventHandler(SendCompletedCallback);
                      // The userState can be any object that allows your callback 
                      // method to identify this send operation.
                      // For this example, the userToken is a string constant.
                      string userState = "test message1";
                      client.SendAsync(message, userState);
                      Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
                      string answer = Console.ReadLine();
                      // If the user canceled the send, and mail hasn't been sent yet,
                      // then cancel the pending operation.
                      if (answer.StartsWith("c") && mailSent == false)
                      {
                          client.SendAsyncCancel();
                      }
                      // Clean up.
                      message.Dispose();
                      Console.WriteLine("Goodbye.");
                  }
              }
          } 
          

          Comentario

          • Kpoyo
            Mandatory rape!
            • 16-05-2004
            • 8042

            #6
            Claro diablo, pero como timeoutea eso? Sin el sleep del thread (forzado por la espera sincronica del readline) no hay nada que lo levante el error.

            A menos que haya un evento TimeOut que no vi, claro claro mm mmm

            Comentario

            • MoaLaiSkirulais
              ^^(V)^^
              • 08-07-2003
              • 23268

              #7
              Código PHP:
               // Set the method that is called back when the send operation ends. 
                          client.SendCompleted += new  
                          SendCompletedEventHandler(SendCompletedCallback); 
              
              no timoutea, es async.
              Lo controla el workflow de .net
              Fijate el code.

              Comentario

              • MoaLaiSkirulais
                ^^(V)^^
                • 08-07-2003
                • 23268

                #8
                ah es verdad no llegue al sleep....
                [reveer]

                Comentario

                Trabajando...