Прикрепить IFormFile к почте без сохранения файла - PullRequest
0 голосов
/ 09 января 2019

Можно ли добавить файлы IFormFile к вложениям электронной почты в ядре .net? Я получаю файлы из angular, используя formdata.

 for (let file of this.files) {
  this.formData.append("Files", file.nativeFile);
}

    MailMessage mail = new MailMessage();
    SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.sendgrid.net",
        Port = 25,
        Credentials = new System.Net.NetworkCredential("key", "pass")
    };


    [HttpPost("[action]")]
    public IActionResult UploadFiles(IList<IFormFile> Files)
    {
        foreach (var file in Files)
        {
            using (var stream = file.OpenReadStream())
            {
                var attachment = new Attachment(stream, file.FileName);
                mail.Attachments.Add(attachment);
            }
        }
        mail.To.Add("email@hotmail.com");
        mail.From = from;
        mail.Subject = "Subject";
        mail.Body = "test";
        mail.IsBodyHtml = true;
        smtp.Send(mail);

1 Ответ

0 голосов
/ 09 января 2019

Теперь я могу прикреплять файлы IFormFile к почте, не сохраняя их на сервере. Я конвертирую файлы в байтовый массив. Причина, по которой я конвертирую в байтовый массив, заключается в том, что мой веб-сайт находится в Azure, а Azure конвертирует файлы в байтовый массив. В противном случае я не смог открыть PDF-файлы. Было выброшено следующее сообщение об ошибке: ... оно было отправлено как вложение электронной почты и не было правильно декодировано.

enter image description here

Рабочий код:

[HttpPost("[action]")]
public IActionResult UploadFiles(IList<IFormFile> Files)
{
   foreach (var file in Files)
            {
                if (file.Length > 0)
                {
                    using (var ms = new MemoryStream())
                    {
                        file.CopyTo(ms);
                        var fileBytes = ms.ToArray();
                        Attachment att = new Attachment(new MemoryStream(fileBytes), file.FileName);
                        mail.Attachments.Add(att);
                    }
                }
            }
            mail.To.Add("someemamil@hotmail.com");
            mail.From = from;
            mail.Subject = "subject";
            mail.Body = "test";
            mail.IsBodyHtml = true;
            smtp.Send(mail);
            mail.Dispose();
...