2010-07-15 8 views
6

Ich benutze diese Klasse Mails ein Google Mail-Konto Trog zu senden:System.Net.Mail - Der Versuch, eine Mail mit Anhang an gmail zu senden, funktioniert aber für kleine Anhänge nur

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); 
     } 
    } 

Hier ist ein Beispiel dafür, wie ich es verwenden:

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

der letzte Parameter in der Sendmessage Methode ist die Lage eines Anhangs I hinzufügen möchten.

Ich versuchte, eine E-Mail mit einem Anhang von 400KB zu senden, hat gut funktioniert (sogar 900KB funktioniert). Aber dann habe ich versucht, einen Anhang von 4 MB hochzuladen, hat nicht funktioniert. Versucht 22MB -> hat auch nicht funktioniert.

In Gmail sollte ein Grenzwert von 25 MB pro Nachricht festgelegt werden. Die Betreffzeile und der Nachrichtentext einer Nachricht sind fast leer. Betrachten Sie sie daher nicht als Teil der Nachrichtengröße. Warum habe ich diese niedrige Grenze?

+0

Funktioniert es in einem normalen Mail-Client? – SLaks

+0

Ja, vergaß das zu sagen. Ich habe gerade eine 22MB-Datei über www.gmail.com hochgeladen. –

+1

Gibt es eine Fehlermeldung oder wird die E-Mail ohne Anhang gesendet? Führen Sie dies von einem Server oder lokal aus? Können Sie versuchen, mehr Dateigrößen zu testen, um ein genaueres Limit zu finden? (2MB? 4MB? Binäre Suchtechnik kann funktionieren) –

Antwort

5

Nach diesem Post ist es ein Fehler in .NET 4.0. Das im Post angegebene Limit beträgt 3.050.417 Bytes. Sie können den im Post enthaltenen Umgehungscode ausprobieren. Hoffe das hilft.

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

+0

Vielen Dank. –

+0

Bis das nächste Service Pack auftaucht ..... Ein öffentlicher Patch ist jetzt für dieses Problem verfügbar. Sie können es hier finden: https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30226 – excalibur

0

Überprüfen Sie, ob das SmtpClient-Objekt den Gültigkeitsbereich verlässt oder anderweitig entsorgt wird, bevor der Sendevorgang abgeschlossen ist, und hat QUIT an den Server gesendet.

+0

Ich denke nicht, denn wenn ich versuche, eine große Datei hochzuladen, sagt es mir sofort, dass das Senden fehlgeschlagen ist. –

1

Es ist immer noch möglich, zu senden. Ändern Sie einfach die Anhangskodierung in etwas anderes als Base64. Ich habe versucht, dies zu testen und festgestellt, dass es eine IndexOutOfBoundsException in der Base64-Codierung ist. Ich konnte erfolgreich eine 11 MB Datei an mich senden unter Verwendung TransferEncoding.SevenBit.

0

Okay, das ist ein Fehler in .net 4. Microsoft sagt, es wird im nächsten Service Pack behoben werden.