附件不发送ASP.NET MVC

肯德尔·H

因此,我一直试图在正在制作的网站中附加/上传多个文件。名称,电子邮件,主题和消息正在发送,但消息中没有附件。文件位于“〜/ App_Data / uploads”文件夹中,但是没有收到电子邮件。我不知道怎么了。请帮我。我是这种东西的新手。谢谢!这是视图代码:

@using (Html.BeginForm("Index", "Home", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <div class="col-md-4">
        <div class="contact_form block">
            <div class="row">
                <div class="col-md-12 col-sm-12">
                    <div id="note"></div>
                </div>
            </div>
            <div id="fields">

                <div class="col-md-12 col-sm-6">
                    @Html.LabelFor(m => m.FromName)
                    @Html.TextBoxFor(m => m.FromName, new { @class = "form-control" })
                    @Html.ValidationMessageFor(m => m.FromName)
                </div>
                <div class="col-md-12 col-sm-6">
                    @Html.LabelFor(m => m.FromEmail)
                    @Html.TextBoxFor(m => m.FromEmail, new { @class = "form-control" })
                    @Html.ValidationMessageFor(m => m.FromEmail)
                </div>
                <div class="clear"></div>
                <div class="col-md-12 col-sm-6">
                    @Html.LabelFor(m => m.FromSubject)
                    @Html.TextBoxFor(m => m.FromSubject, new { @class = "form-control" })
                    @Html.ValidationMessageFor(m => m.FromSubject)
                </div>
                <div class="col-md-12 col-sm-6">
                    <form action="" method="post" enctype="multipart/form-data">

                        <label for="file1">Attachments</label>
                        <input type="file" name="files" id="file1" multiple/>

                    </form>
                </div>
                <div class="col-md-12">
                    @Html.LabelFor(m => m.Message)
                    @Html.TextAreaFor(m => m.Message, new { @class = "form-control" })
                    @Html.ValidationMessageFor(m => m.Message)
                </div>
                 <div class="col-md-12">                 
                     <div>
                         @if ((TempData["recaptcha"]) != null)
                         {
                            <p>@TempData["recaptcha"]</p>   
                         }
                     </div>
                     <div class="g-recaptcha" data-sitekey="6LfVHx8TAAAAAMTDxxQrHDCxO1SyXf1GgbgNBZ5a"></div>
                 </div>

                <div class="col-md-12"><input class="shortcode_button" type="submit" value="Send"></div>

            </div>
        </div>
    </div>
}  

这是控制器:

public ActionResult Index()
{
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Index(EmailFormModel model, IEnumerable<HttpPostedFileBase> files)
{
    if (ModelState.IsValid)
    {
        //logic here upload file logic here.
        foreach (var file in files)
        {
            if (file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
                file.SaveAs(path);
            }
        }

        //Rest of business logic here
        string EncodedResponse = Request.Form["g-Recaptcha-Response"];
        bool IsCaptchaValid = (ReCaptcha.Validate(EncodedResponse) == "True" ? true : false);
        if (IsCaptchaValid)
        {

            var body = "<p>Email From: {0} ({1})</p><p>Subject: {2} </p><p>Message:</p><p>{3}</p>";
            var message = new MailMessage();
            message.To.Add(new MailAddress("***@gmail.com"));  // replace with valid value 
            message.From = new MailAddress("***@ymailcom");  // replace with valid value
            message.Subject = "Your email subject";
            message.Body = string.Format(body, model.FromName, model.FromEmail, model.FromSubject, model.Message);
            message.IsBodyHtml = true;
            using (var smtp = new SmtpClient())
            {
                var credential = new NetworkCredential
                {
                    UserName = "***@gmail.com",  // replace with valid value
                    Password = "***"  // replace with valid value
                };
                smtp.Credentials = credential;
                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;
                smtp.EnableSsl = true;
                await smtp.SendMailAsync(message);
                //return RedirectToAction("Sent");
                ViewBag.Message = "Your message has been sent!";

                //TempData["message"] = "Message sent";
                ModelState.Clear();
                return View("Index");
            }

        }
        else
        {
            TempData["recaptcha"] = "Please verify that you are not a robot!";
        }
    }
    return View(model);
}
恩科西

您没有在代码中附加任何内容。您需要将文件附加到MailMessage

保存文件时,请在列表中跟踪路径。

List<string> paths = new List<string>();
//...other code
foreach (var file in files) {
    //...other code removed for brevity
    //keep file path for attachments
    paths.Add(path);
}

创建邮件时,您可以附加文件

//Attach files
foreach (var path in paths) {
    //For file information
    var fileInfo = new FileInfo(path);
    //stream to store attachment
    var memoryStream = new MemoryStream();
    //copy file from disk to memory
    using (var stream = fileInfo.OpenRead()) {
        stream.CopyTo(memoryStream);
    }
    //reset memory pointer
    memoryStream.Position = 0;
    //get file name for attachment based on path
    string fileName = fileInfo.Name;
    //add attachment to message
    message.Attachments.Add(new Attachment(memoryStream, fileName));
}

根据文件保存到磁盘的路径来附加文件。可以对这些代码进行重构,以实现更好的内存管理和性能,但这只是一个开始。您应该能够处理其余的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

附件不发送ASP.NET MVC

来自分类Dev

Asp.Net Mvc POST方法不发送字符串

来自分类Dev

Asp.Net Mvc POST方法不发送字符串

来自分类Dev

发送带有附件的加密电子邮件(asp.net mvc,C#)

来自分类Dev

ASP.NET Core MVC视图附件

来自分类Dev

ASP.Net发送大型附件-阻止浏览直到完成

来自分类Dev

ASP Net MVC-在POST上发送不同的模型

来自分类Dev

asp.net mvc ajax发送两个参数

来自分类Dev

jQuery Ajax发送数据-ASP.Net MVC

来自分类Dev

淘汰赛和Asp.net MVC发送json

来自分类Dev

连接尝试失败-Smtp.asp.net mvc中发送

来自分类Dev

使用asp.net mvc发送电子邮件

来自分类Dev

Javascript onload MVC ASP .NET MVC

来自分类Dev

Spring MVC与ASP.NET(MVC?)

来自分类Dev

将Word文档作为附件附加-路径规范ASP.NET MVC 3

来自分类Dev

Model Validation in asp .net MVC

来自分类Dev

ASP.NET MVC,Actionlink

来自分类Dev

ASP.net MVC路由

来自分类Dev

Asp.net Mvc身份

来自分类Dev

ASP.NET MVC入门

来自分类Dev

asp.net Mvc _Layout

来自分类Dev

Instabug不发送附件

来自分类Dev

mvc 模型 fileupadload 不发送模型数据

来自分类Dev

ASP.NET MVC帮助器,独立于MVC版本

来自分类Dev

OWIN是否还调用MVC(ASP.NET MVC)?

来自分类Dev

asp.net 5与asp.net mvc是否不同?

来自分类Dev

ASP.net Web Forms and Asp.net MVC Security

来自分类Dev

Angularjs + ASP.NET MVC + ASP.NET Web API

来自分类Dev

与ASP.NET MVC中的ASP.NET等效