我正在尝试创建一个简单的联系表单,用户可以在其中填写详细信息并上传文件。提交表单后,该文件将附加到联系人电子邮件中,并上载到我的服务器上的目录中。我一直在关注.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>
}
}
}
有人能看出为什么这不起作用吗?
答案 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
块没有到位,您可能会收到有意义的错误消息。