2

Так что я пытался подключить/загрузить несколько файлов на веб-сайт, который я делаю. Имя, адрес электронной почты, тема & Сообщение отправляется, но в сообщении нет вложения. Файлы попадают в папку «~/App_Data/uploads», она есть, но я не получаю ее по электронной почте. Я не могу понять, что случилось. Пожалуйста, помогите мне. Я новичок в этом. Спасибо! Вот код вида:Вложение Не отправлять ASP.NET MVC

@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); 
} 
+0

Нет, где в вашем коде вы добавляете вложения в электронное письмо. Вам нужно отслеживать пути, которые сохраняются, чтобы вы могли прикрепить их к письму позже. – Nkosi

ответ

1

Вы ничего не прикрепление в коде , Вам необходимо прикрепить файлы к 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)); 
} 

Файлы прикрепленные на основе путях, где файлы были сохранены на диск. Этот код можно реорганизовать для лучшего управления памятью и производительности, но это начало. Вы должны быть в состоянии справиться с остальными.

+0

Большое вам спасибо за помощь. Я постараюсь сделать это и обновить, если это сработает. Надеюсь, я все еще могу задать вам несколько вопросов, если что-то пошло не так. Пожалуйста, помогите мне, я действительно новичок в этом. Спасибо, ваша помощь очень ценится. –

+0

Какая-то ошибка. Я думаю, что я делаю это неправильно. Но я не могу понять, что. Спасибо за помощь. –

+0

Где и что такое ошибка? – Nkosi

0

Заменить эту часть кода и проверить работает или нет

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

Не работает сэр. –

+0

Вы пытаетесь отправить одно приложение в настоящее время или несколько? .. Если несколько изначально попытаются для одного приложения – stylishCoder

+0

Я пытаюсь отправить несколько вложений сэра. –