2010-07-15 14 views
6

que utilizar esta clase para enviar correos Trough una cuenta de Gmail:System.Net.Mail - Tratando de enviar un correo con archivo adjunto a Gmail, pero funciona para los pequeños archivos adjuntos única

public class GmailAccount 
    { 
     public string Username; 
     public string Password; 
     public string DisplayName; 

     public string Address 
     { 
      get 
      { 
       return Username + "@gmail.com"; 
      } 
     } 

     private SmtpClient client; 

     public GmailAccount(string username, string password, string displayName = null) 
     { 
      Username = username; 
      Password = password; 
      DisplayName = displayName; 

      client = new SmtpClient 
      { 
       Host = "smtp.gmail.com", 
       Port = 587, 
       EnableSsl = true, 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       Credentials = new NetworkCredential(Address, password) 
      }; 
     } 

     public void SendMessage(string targetAddress, string subject, string body, params string[] files) 
     { 
      MailMessage message = new MailMessage(new MailAddress(Address, DisplayName), new MailAddress(targetAddress)) 
      { 
       Subject = subject, 
       Body = body 
      }; 

      foreach (string file in files) 
      { 
       Attachment attachment = new Attachment(file); 
       message.Attachments.Add(attachment); 
      } 

      client.Send(message); 
     } 
    } 

Aquí es una ejemplo de cómo lo uso:

GmailAccount acc = new GmailAccount("zippoxer", "******", "Moshe"); 
acc.SendMessage("[email protected]", "Hello Self!", "like in the title...", "C:\\822d14ah857.r"); 

el último parámetro en el método deSendMessage es la ubicación de un archivo adjunto que desea añadir.

He intentado enviar un correo con un archivo adjunto de 400 KB, funcionó bien (incluso funciona 900KB). Pero luego intenté subir un archivo adjunto de 4MB, no funcionó. Intentó 22MB -> tampoco funcionó.

Debe haber un límite de 25MB por mensaje en Gmail. El tema y el cuerpo de mi mensaje están casi vacíos, así que no los considere como parte del tamaño del mensaje. ¿Por qué tengo ese límite bajo?

+0

¿Funciona en un cliente de correo normal? – SLaks

+0

Sí, se olvidó de decir eso. Acabo de subir un archivo de 22 MB a través de www.gmail.com. –

+1

¿Hay un mensaje de error o se envía el correo electrónico sin el archivo adjunto? ¿Estás ejecutando esto desde un servidor o localmente? ¿Puedes probar más tamaños de archivo para encontrar un límite más preciso? (Puede funcionar la técnica de búsqueda binaria de 2MB? 4MB?) –

Respuesta

5

Según esta publicación, es un error en .Net 4.0. El límite especificado en la publicación es 3,050,417 bytes. Puede probar el código de trabajo incluido en la publicación. Espero que esto ayude.

http://connect.microsoft.com/VisualStudio/feedback/details/544562/cannot-send-e-mails-with-large-attachments-system-net-mail-smtpclient-system-net-mail-mailmessage

+0

Muchas gracias. –

+0

Hasta que aparezca el siguiente service pack ..... Ya hay disponible un parche público para este problema. Puede encontrarlo aquí: https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30226 – excalibur

0

Compruebe y vea si el objeto SmtpClient está saliendo del alcance o de lo contrario se eliminará antes de que se complete el envío y ha enviado el QUIT al servidor.

+0

No lo creo, porque cuando intento subir un archivo grande, me dice inmediatamente que el envío ha fallado. –

1

Todavía es posible enviar. Simplemente cambie la codificación del archivo adjunto a algo que no sea Base64. Intenté probar esto y encontré que hay un IndexOutOfBoundsException en el código de codificación Base64. Pude enviar con éxito un archivo de 11 MB a mí mismo utilizando TransferEncoding.SevenBit.

0

Bien, esto es un error en .net 4. Microsoft dice que se solucionará en el siguiente service pack.

Cuestiones relacionadas