2010-07-09 49 views
0

爲什麼我不能發送xls,doc和其他文件 - 它可以用於jpg,txt和其他文件。通過gmail發送附件不能處理某些類型 - 爲什麼?

private void BuildAndSend(string pTo,string pCC,string pSubject,string pBody) 
     { 
      // building the mail 
      System.Net.Mail.MailAddress toAddress = new System.Net.Mail.MailAddress(pTo); 

      System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress("[email protected]"); 
      System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage(fromAddress, toAddress); 
      mm.Subject = pSubject ; 
      mm.Body = pBody; 

      System.Net.Mail.MailAddress cc = new System.Net.Mail.MailAddress(pCC); 
      mm.CC.Add(cc); 

      addAttachments(mm); 
      mm.IsBodyHtml = true; 
      mm.BodyEncoding = System.Text.Encoding.UTF8; 

      //sending the mail 
      sendMail(mm); 
     } 

     private void addAttachments(System.Net.Mail.MailMessage mm) 
     { 
      string attachmentFile; 
      for (int i = 0; i < lstAttachments.Items.Count ; i++) 
      { 

       string fileFullName = pullDictionary[i]; 
       attachmentFile = fileFullName; 
       System.Net.Mail.Attachment mailAttachment = new System.Net.Mail.Attachment(attachmentFile); 
       mm.Attachments.Add(mailAttachment); 

      } 

     } 

     private void sendMail(System.Net.Mail.MailMessage mm) 
     { 
      try 
      { 
       // loging in into sending user account 
       string smtpHost = "smtp.gmail.com"; 
       string userName = "[email protected]";//sending Id 
       string password = "mypass"; 
       System.Net.Mail.SmtpClient mClient = new System.Net.Mail.SmtpClient(); 
       mClient.Port = 587; 
       mClient.EnableSsl = true; 
       mClient.UseDefaultCredentials = false; 
       mClient.Credentials = new NetworkCredential(userName, password); 
       mClient.Host = smtpHost; 
       mClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; 
       mClient.Send(mm); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

,如果你能告訴我另一種方式來發送這些文件,這將是偉大的,以及

+2

什麼錯誤信息你好嗎?如果沒有,請圍繞Add()語句進行嘗試,然後更新您的帖子。 – 2010-07-09 22:02:49

+0

你怎麼知道這些附件沒有被髮送?怎麼了?你有錯誤信息嗎?電子郵件是否在沒有附件的情況下發送? – Unicron 2010-07-09 22:03:36

回答

1

如果您的JPEG文件和文本文件要我猜你的問題可能是在您的路徑的一些其他文件類型或這些其他文件的大小(只是一個瘋狂的猜測,因爲你發佈的代碼看起來確定)。

// this looks suspect 
string fileFullName = pullDictionary[i]; 
attachmentFile = fileFullName; 

這是一些工作代碼的片段。請注意,我從來沒有明確地設置mm.BodyEncoding = System.Text.Encoding.UTF8;mClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;屬性並取得了成功。 (也許只是一個無關的觀察...)

MailMessage m = new MailMessage(_gmailEmail, _to); 
    m.Subject = _emailSubject; 
    m.Body = _body; 
    for (int i = 0; i < lstAttachments.Items.Count ; i++) // your list 
    m.Attachments.Add(new Attachment("\path\to\file\to\attach\here")); 

你提到你想看到不同的東西......那麼,你的附件代碼看起來很好,所以我想我會提供一些代碼,允許你嵌入圖片內嵌在您的電子郵件,而不是作爲附件:

// the below adds embedded images an email... 
    AlternateView avHtml = AlternateView.CreateAlternateViewFromString(
     _body, null, System.Net.Mime.MediaTypeNames.Text.Html); 
    LinkedResource pic = new LinkedResource("\path\to\file\to\embed\here", System.Net.Mime.MediaTypeNames.Image.Jpeg); 
    pic.ContentId = "IMAGE1"; // just make sure this is a unique string if you have > 1 
    avHtml.LinkedResources.Add(pic); 
    m.AlternateViews.Add(avHtml); 

發佈一些特定的錯誤消息/異常捕獲,你會得到更多的幫助......

+1

工程就像一個魅力......這是我六個月前建造的媽媽的一個小項目。過了一段時間,我放棄了(她所關心的所有電子郵件都是附件)。 現在,當我再次需要電子郵件功能時...我終於從你那裏得到了它,很有趣,我不僅感謝幫助我,而且我也很興奮,因爲我能夠給我媽媽送禮物我想給她之前... 因此,因爲它成爲個人......你從我的心底得到了一個真正的大感謝:) – Asaf 2010-07-10 09:23:42