将上传的文件作为附件发送

nik*_*hil 10 c# asp.net file-upload attachment

我试图将上传的文件作为附件发送到我的ashx文件中.这是我正在使用的代码:

HttpPostedFile fileupload = context.Request.Files[0];

//filename w/o the path
string file = Path.GetFileName(fileupload.FileName);

MailMessage message = new MailMessage();

//*****useless stuff********
message.To.Add("abc@xxx.com");
message.Subject = "test";
message.From = new MailAddress("test@aaa.com");
message.IsBodyHtml = true;
message.Body = "testing";
 //*****useless stuff********

//Fault line
message.Attachments.Add(new Attachment(file, MediaTypeNames.Application.Octet))

//Send mail 
SmtpClient smtp = new System.Net.Mail.SmtpClient("xxxx", 25);
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("xxx", "xxxx");
smtp.Send(message);
Run Code Online (Sandbox Code Playgroud)

我可以发送没有附件的电子邮件.我是否需要先保存文件然后添加到附件中?

Ser*_*gan 18

您不需要也不应该不必要地将附件保存到服务器.这是一篇关于如何在ASP.NET WebForms中执行此操作的文章http://www.aspsnippets.com/articles/Attach-files-to-email-without-storing-on-disk-using-ASP.Net-FileUpload-Control的.aspx

在C#MVC中执行它甚至更好:

public IEnumerable<HttpPostedFileBase> UploadedFiles { get; set; }

var mailMessage = new MailMessage();
// ... To, Subject, Body, etc

foreach (var file in UploadedFiles)
{
    if (file != null && file.ContentLength > 0)
    {
        try
        {
            string fileName = Path.GetFileName(file.FileName);
            var attachment = new Attachment(file.InputStream, fileName);
            mailMessage.Attachments.Add(attachment);
        }
        catch(Exception) { }
    }
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 6

跟随Serj Sagan 的脚步,这里是一个使用webforms的处理程序,但<input type="file" name="upload_your_file" />代替<asp:FileUpload>控件:

HttpPostedFile file = Request.Files["upload_your_file"];
if (file != null && file.ContentLength > 0)
{
    string fileName = Path.GetFileName(file.FileName);
    var attachment = new Attachment(file.InputStream, fileName);
    mailMessage.Attachments.Add(attachment);
}
Run Code Online (Sandbox Code Playgroud)

如果您不需要(或不能添加)runat="server"表单标记,这将非常有用.


com*_*ech 0

FileName 是客户端上的文件名,而不是服务器上的文件名。您将需要使用 SaveAs 或 InputStream 将任何内容放入附件中。

这是MSDN 文档的链接。

  • 您不需要先将其保存到磁盘......这是不好的做法。 (6认同)
  • 任何关心安全的环境都会在最终用户的计算机上安装防病毒软件。通过将文件保存到服务器,您会 1) 不必要地浪费服务器资源,2) 可能会将防病毒软件无法识别的病毒引入服务器。清洁工作站比清洁服务器容易得多。 (6认同)
  • 不是上传的用户,而是将要接收上传文件的用户。内部公司用户将接收这些文件,并且他们将使用具有所有最新定义的企业级防病毒软件的系统。再说一次,清理受损的工作站比清理受损的 Web 服务器要容易得多。将可能受感染的文件上传到您的服务器可能是一件非常危险的事情,可能会将您的所有敏感数据暴露给攻击者。永远不应该将服务器置于危险之中...... (6认同)