0

我正在尝试创建一个简单的联系表格,用户可以在其中填写他们的详细信息并上传文件。提交表单后,该文件将附加到联系人电子邮件中,并上传到我服务器上的目录。我一直在关注 .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>                   

      }                      
   }
}

谁能明白为什么这不起作用?

4

1 回答 1

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<String>
(可选)指定要附加到电子邮件的文件的文件名集合,如果没有要附加的文件,则为 null。默认值为空。

我还应该注意,您已经进行的错误处理可能比没有任何错误处理更糟糕;您正在积极地将错误隐藏在短语“错误 1”和“错误 2”后面。如果这些try ... catch块没有到位,您可能会收到有意义的错误消息来处理。

于 2013-07-09T10:48:20.870 回答