无法将文件上传到联系表单电子邮件

时间:2013-07-09 10:32:36

标签: asp.net razor webforms

我正在尝试创建一个简单的联系表单,用户可以在其中填写详细信息并上传文件。提交表单后,该文件将附加到联系人电子邮件中,并上载到我的服务器上的目录中。我一直在关注.NET Web Forms文档,我可以发送电子邮件并上传到我的服务器,但是电子邮件中的附件失败了,我看不出原因!

这是我的代码,我在提交后收到消息“错误1”:

@{ 

var fileName = "";  

<form method="POST" enctype="multipart/form-data" id="form">
    <input type="text" id="name" name="name" />
    <input type="email" id="email" name="email" />
    <input type="file" name="fileAttachment" />
    <input type="submit" value="submit" />
</form>

  if(IsPost) {
      var fileSavePath = "";
      var msg = "";        

      try{        
         var uploadedFile = Request.Files[0];
         fileName = Path.GetFileName(uploadedFile.FileName);
         fileSavePath = Server.MapPath("~/MyDirectory/" + fileName);

         if (uploadedFile.ContentLength > 1120000) {
             msg = "The maximum file size is 5 MB";
             <p>@msg</p>    
         }else{
             uploadedFile.SaveAs(fileSavePath);             

             var name = Request.Form["name"];
             var email = Request.Form["email"];
             var fileAttachment = Request["fileAttachment"];

             if( !name.IsEmpty() || !email.IsEmpty())
             {
                 string message = string.Format("Name: {0}<br/><br/>Email: {1}"
                    , name                           
                    , email  
                 );

                 try{
                         WebMail.SmtpServer = "127.0.0.1";
                         var filesList = new string [] { fileAttachment }; 
                         WebMail.Send(
                              from: "no-reply@mydomain.com",
                              to: "me@mydomain.com",
                              subject: "File attached",
                              body: message,
                              filesToAttach: filesList
                         );

                     }catch (Exception ex ){
                         <p>Error 1</p>
                     }
                 }                                   
             }

      }catch(HttpException ex){
            msg = "Error 2";
            <p>@msg</p>                   

      }                      
   }
}

有人能看出为什么这不起作用吗?

1 个答案:

答案 0 :(得分:1)

您的问题是您正在附加上传文件的原始内容:

var fileAttachment = Request["fileAttachment"];
...
var filesList = new string [] { fileAttachment }; 
WebMail.Send(
    from: "no-reply@mydomain.com",
    to: "me@mydomain.com",
    subject: "File attached",
    body: message,
    filesToAttach: filesList
);

参数filesToAttach采用文件名列表,因此您需要先将fileAttachment保存到文件中,然后发送,最后删除该文件。请参阅http://msdn.microsoft.com/en-us/library/hh414138(v=vs.111).aspx,具体来说:

  

filesToAttach
  键入:System.Collections.Generic.IEnumerable&lt; String&gt;
  (可选)指定文件的文件名集合   附加到电子邮件消息,如果没有要附加的文件,则为null。   默认值为null。

我还应该注意到,你所处理的错误处理可能比没有任何错误处理更糟糕;您正在主动隐藏短语“错误1”和“错误2”背后的错误。如果try ... catch块没有到位,您可能会收到有意义的错误消息。