Как прикрепить созданный файл к почте mvc - PullRequest
0 голосов
/ 11 октября 2018

Когда каждый пользователь запускает мое приложение, я сохраняю его данные и помещаю их в отчет следующим образом, который в конце создается в PDF-документе, а затем автоматически загружается на стороне пользователя (на стороне клиента).Теперь я хочу прикрепить этот документ к электронному письму и отправить его им.Вот где у меня проблемы с привязанностью.

Код следующий:

            ReportDocument rd = new ReportDocument();
            rd.Load(Path.Combine(Server.MapPath("~/Reports/PP_RentalAgreement.rpt")));
            rd.SetParameterValue("rent_agree_no", _1);
            rd.SetParameterValue("r_initial", _2);
            rd.SetParameterValue("r_f_name", _3);
            rd.SetParameterValue("r_l_name", _4);
            rd.SetParameterValue("r_id_no", _5);
            rd.SetParameterValue("r_lic_no", _6);
            rd.SetParameterValue("r_tel", _7);
            rd.SetParameterValue("r_cell", _8);
            rd.SetParameterValue("r_fax", _9);

            Response.Buffer = false;
            Response.ClearContent();
            Response.ClearHeaders();

            Stream st = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
            st.Seek(0, SeekOrigin.Begin);

            if (ModelState.IsValid)
            {
                var m_message = new MailMessage();
                m_message.To.Add(new MailAddress("JoeSoap@TextMail.com"));
                m_message.Subject = "Pink Panther - Invoice";
                m_message.Attachments.Add(new Attachment(st, "application/pdf", "Invoice.pdf"));

                using (var smtp = new SmtpClient())
                {
                    await smtp.SendMailAsync(m_message);
                    return RedirectToAction("Index");
                }
            }

Я получаю сообщение об ошибке в этой строке: m_message.Attachments.Add(new Attachment(st, "application/pdf", "Invoice.pdf"));, говоря The specified content type is invalid.

Кто-то предложил мне указатьпуть, однако я не сохраняю этот файл в любом месте

Как я могу разрешить прикрепление файла и отправить его получателю?

1 Ответ

0 голосов
/ 11 октября 2018

Конструктор класса System.Net.Mail.Attachment с 3 перегрузками состоит из следующих параметров:

public Attachment(System.IO.Stream contentStream, string name, string mediaType)

Следовательно, вы присваиваете имя и тип содержимого в обратном порядке, что приводит к недопустимому содержимомупроблема типа в этом коде:

m_message.Attachments.Add(new Attachment(st, "application/pdf", "Invoice.pdf"));

Правильный способ - указать имя файла в качестве второго аргумента, как в примере ниже:

m_message.Attachments.Add(new Attachment(st, "Invoice.pdf", "application/pdf"));

Или используя MediaTypeNamesдля настройки типа контента:

m_message.Attachments.Add(new Attachment(st, "Invoice.pdf", MediaTypeNames.Application.Pdf));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...