Прикрепить IFormFile к почте без сохранения файла
Можно ли добавить файлы IFormFile к вложениям электронной почты в ядре.net? Я получаю файлы с угловым использованием формданных.
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 ответ
Решение
Теперь я могу прикреплять файлы IFormFile к почте без сохранения файлов на сервере. Я конвертирую файлы в байтовый массив. Причина, по которой я конвертирую в байтовый массив, заключается в том, что мой веб-сайт находится в Azure, а Azure конвертирует файлы в байтовый массив. В противном случае я не смог открыть PDF-файлы. Он выдавал следующую ошибку: ... он был отправлен как вложение электронной почты и не был правильно декодирован.
Рабочий код:
[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();