2010-11-03 170 views
2

試圖上傳Word文檔,然後將其附加到發送的電子郵件中。路徑中存在非法字符

當前收到IO異常 - 路徑中的非法字符。

這裏是代碼:

try 
{ 
    var fileName = Path.Combine(Server.MapPath("/"), ResumeUpload.FileName); 

    ResumeUpload.SaveAs(fileName); 

    using (var resumeContent = new StreamReader(fileName)) 
    { 
     while (!resumeContent.EndOfStream) 
     { 
      var emailAttachement = new Attachment(resumeContent.ReadToEnd()); 
      message.Attachments.Add(emailAttachement); 
     } 
    } 

    var client = new SmtpClient(); 
    client.Send(message); 
} 
catch(Exception exception) 
{ 
    // Handle exception... 
} 

目前,文件名可變是越來越設置爲:

d:\網站\ websitename \ website.com.au \家\ filename.docx

任何想法爲什麼這會打破?

這裏的例外

Illegal characters in path. at System.IO.Path.CheckInvalidPathChars(String path) 
    at System.IO.Path.GetFileName(String path) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) 
    at System.Net.Mail.AttachmentBase.SetContentFromFile(String fileName, String mediaType) 
    at System.Net.Mail.Attachment..ctor(String fileName) 
    at JobApplication.JobApplication.SendEmail(StringBuilder emailText) 
+0

和期望是什麼路? – Andrey 2010-11-03 10:58:41

+0

ResumeUpload.SaveAs()行上的代碼是否失敗? – 2010-11-03 11:02:55

+0

該路徑應該很好,我試圖將文件保存到該路徑,然後用streamreader從它讀取並附加到電子郵件作爲附件。將包括異常現在的問題... – timothyclifford 2010-11-03 11:03:42

回答

3

Attachment(string)接受一個字符串的路徑。 StreamReader.ReadToEnd返回字符串內容。我懷疑你只是想:

Attachment emailAttachement = new Attachment(filename); 
message.Attachments.Add(emailAttachement); 

另外,使用接受一個Stream和名稱/內容類型的構造。請注意,如果您允許用戶將任意文件上傳到Web服務器的根目錄中,則需要考慮一些事項;我會盡量避免將它們寫入磁盤(除非您想將它們存檔),並且我不會將它們寫入到我的web根目錄。

2

new Attachment需要一個文件名,而不是內容。

編輯:stacktrace清楚地給出了這個提示。使用它:)

+0

我試圖使用接受Stream的Attachment構造函數,但.ReadToEnd返回一個字符串...謝謝 – timothyclifford 2010-11-03 11:20:10

1

嘗試用這個代替

message.Attachments.Add(
    new Attachment(
     new MemoryStream(ResumeUpload.FileBytes), "attachmentName.ext" 
     ) 
    ); 

此連接將上傳的字節,使流他們。該流應該稍後處理。

0

如果任何人的興趣,我得到了它的工作,這是它如何結束了尋找:

ResumeUpload.PostedFile.SaveAs(Path.Combine(Server.MapPath("/"), "resumes", ResumeUpload.FileName)); 

var emailAttachement = new Attachment(Path.Combine(Server.MapPath("/"), "resumes", ResumeUpload.FileName)); 
message.Attachments.Add(emailAttachement); 

using (var client = new SmtpClient()) 
{ 
    client.Send(message); 
} 

感謝大家的幫助:)

相關問題