尝试上传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...
}
目前,fileName变量设置为:
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 :(得分:4)
Attachment(string)
接受该路径的字符串。 StreamReader.ReadToEnd
返回字符串内容。我怀疑你只是想要:
Attachment emailAttachement = new Attachment(filename);
message.Attachments.Add(emailAttachement);
或者,使用接受Stream
和name / content-type的构造函数。请注意,如果您允许人们将任意文件上传到您的Web服务器的根目录,则需要考虑一些事项。我会尽量避免将它们写入磁盘(除非你想要它们存档),我不会把它们写到我的web-root。
答案 1 :(得分:3)
new Attachment
需要文件名,而非内容。
编辑:堆栈跟踪清楚地给出了提示。使用它:)
答案 2 :(得分:1)
尝试使用此附加
message.Attachments.Add(
new Attachment(
new MemoryStream(ResumeUpload.FileBytes), "attachmentName.ext"
)
);
这将获取上传的字节并使用它们制作流。流应该稍后处理。
答案 3 :(得分:1)
如果有人对此感兴趣,我会让它发挥作用,这就是它最终的结果:
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);
}
感谢大家的帮助:)