2010-07-15 16 views
6

tôi sử dụng lớp này để gửi thư trough một tài khoản gmail:System.Net.Mail - Đang cố gắng để gửi một email với tập tin đính kèm để gmail, làm việc nhưng đối với file đính kèm nhỏ chỉ

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

Dưới đây là một ví dụ về cách tôi sử dụng nó:

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

tham số cuối cùng trong SendMessage phương pháp là vị trí của một tập tin đính kèm tôi muốn thêm.

Tôi đã thử gửi thư có tệp đính kèm 400KB, đã hoạt động tốt (thậm chí 900KB hoạt động). Nhưng sau đó tôi đã thử tải lên tệp đính kèm 4MB, không hoạt động. Đã thử 22MB -> không hoạt động.

Nên có giới hạn 25MB cho mỗi thư trong Gmail. Chủ đề và nội dung của tin nhắn của tôi gần như trống rỗng, vì vậy đừng coi chúng như là một phần của kích thước của thông điệp. Tại sao tôi có giới hạn thấp đó?

+0

Ứng dụng có hoạt động trong ứng dụng thư bình thường không? – SLaks

+0

Vâng, quên nói điều đó. Tôi vừa tải lên một tệp 22MB máng www.gmail.com. –

+1

Có thông báo lỗi hay không, e-mail có được gửi mà không có tệp đính kèm không? Bạn có đang chạy từ máy chủ hoặc cục bộ không? Bạn có thể thử kiểm tra nhiều kích thước tệp hơn để tìm giới hạn chính xác hơn không? (2MB? 4MB? Nhị phân tìm kiếm kỹ thuật có thể làm việc) –

Trả lời

5

Theo bài đăng này, đó là lỗi trong .Net 4.0. Giới hạn được chỉ định trong bài đăng là 3.050,417 byte. Bạn có thể thử mã làm việc xung quanh trong bài đăng. Hi vọng điêu nay co ich.

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

+0

Cảm ơn bạn rất nhiều. –

+0

Cho đến khi gói dịch vụ tiếp theo quay lên ..... Một bản vá công khai hiện có sẵn cho vấn đề này. Bạn có thể tìm thấy ở đây: https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30226 – excalibur

0

Kiểm tra xem liệu đối tượng SmtpClient có nằm ngoài phạm vi hoặc không được xử lý trước khi gửi xong và đã gửi QUIT đến máy chủ.

+0

Tôi không nghĩ vậy vì khi tôi thử tải lên một tệp lớn, nó cho tôi biết ngay lập tức rằng việc gửi không thành công. –

1

Vẫn có thể gửi. Chỉ cần thay đổi mã hóa tệp đính kèm thành một cái gì đó khác với Base64. Tôi đã thử nghiệm này và thấy rằng có một IndexOutOfBoundsException trong mã hóa Base64. Tôi đã có thể gửi thành công tệp 11MB cho chính mình bằng cách sử dụng TransferEncoding.SevenBit.

0

OK, đây là lỗi trong .net 4. Microsoft cho biết nó sẽ được sửa trong gói dịch vụ tiếp theo.