Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 附件未发送ASP.NET MVC_C#_Asp.net Mvc_File Upload_Asp.net Mvc 5_Email Attachments - Fatal编程技术网

C# 附件未发送ASP.NET MVC

C# 附件未发送ASP.NET MVC,c#,asp.net-mvc,file-upload,asp.net-mvc-5,email-attachments,C#,Asp.net Mvc,File Upload,Asp.net Mvc 5,Email Attachments,所以我一直在尝试在我正在制作的网站上附加/上传多个文件。正在发送姓名、电子邮件、主题和消息,但消息中没有附件。文件正在“~/App\u Data/uploads”文件夹中,它在那里,但我没有收到电子邮件。我不知道怎么了。请帮帮我。我对这种东西不熟悉。非常感谢。以下是查看代码: @using (Html.BeginForm("Index", "Home", null, FormMethod.Post, new { enctype = "multipart/form-data" })) {

所以我一直在尝试在我正在制作的网站上附加/上传多个文件。正在发送姓名、电子邮件、主题和消息,但消息中没有附件。文件正在“~/App\u 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>
}  
@使用(Html.BeginForm(“Index”,“Home”,null,FormMethod.Post,new{enctype=“multipart/formdata”}))
{
@Html.AntiForgeryToken()
@LabelFor(m=>m.FromName)
@TextBoxFor(m=>m.FromName,新的{@class=“form control”})
@Html.ValidationMessageFor(m=>m.FromName)
@LabelFor(m=>m.FromEmail)
@TextBoxFor(m=>m.FromEmail,新的{@class=“form control”})
@Html.ValidationMessageFor(m=>m.FromEmail)
@LabelFor(m=>m.FromSubject)
@TextBoxFor(m=>m.FromSubject,新的{@class=“form control”})
@Html.ValidationMessageFor(m=>m.FromSubject)
附件
@LabelFor(m=>m.Message)
@text区域(m=>m.Message,新的{@class=“form control”})
@Html.ValidationMessageFor(m=>m.Message)
@if((TempData[“recaptcha”])!=null)
{
@TempData[“recaptcha”]

} }
这是控制器:

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);
}
public ActionResult Index()
{
返回视图();
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务索引(EmailFormModel模型、IEnumerable文件)
{
if(ModelState.IsValid)
{
//逻辑在这里上传文件逻辑在这里。
foreach(文件中的var文件)
{
如果(file.ContentLength>0)
{
var fileName=Path.GetFileName(file.fileName);
var path=path.Combine(Server.MapPath(“~/App\u Data/uploads”),文件名);
file.SaveAs(路径);
}
}
//这里是业务逻辑的其余部分
字符串EncodedResponse=Request.Form[“g-Recaptcha-Response”];
bool IsCaptchaValid=(ReCaptcha.Validate(EncodedResponse)=“真”?真:假);
if(IsCaptchaValid)
{
var body=“电子邮件发件人:{0}({1})

主题:{2}

消息:

{3}

”; var message=new MailMessage(); message.To.Add(新邮件地址(“***@gmail.com”);//替换为有效值 message.From=新邮件地址(“***@ymailcom”);//替换为有效值 message.Subject=“您的电子邮件主题”; message.Body=string.Format(Body,model.FromName,model.FromEmail,model.FromSubject,model.message); message.IsBodyHtml=true; 使用(var smtp=new SmtpClient()) { var-credential=新网络凭据 { UserName=“***@gmail.com”,//替换为有效值 Password=“***”//替换为有效值 }; smtp.Credentials=凭证; smtp.Host=“smtp.gmail.com”; smtp.Port=587; smtp.EnableSsl=true; 等待smtp.SendMailAsync(消息); //返回重定向操作(“已发送”); ViewBag.Message=“您的邮件已发送!”; //TempData[“message”]=“message sent”; ModelState.Clear(); 返回视图(“索引”); } } 其他的 { TempData[“recaptcha”]=“请确认您不是机器人!”; } } 返回视图(模型); }
更换这部分代码并检查它是否工作

      if (fileUploader != null)
                        {
                            HttpPostedFileBase fileUploader;
                            string fileName = Path.GetFileName(fileUploader.FileName);
                            mail.Attachments.Add(new Attachment(fileUploader.InputStream, fileName));
                        }

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

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

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));
}