2014-10-14 6 views
1

На мой взгляд, пользователи могут искать документ, и как только они получат результат, они могут щелкнуть по его идентификатору, и они могут загрузить документ с определенного URL-адреса на основе идентификатора: http://test.com/a.ashx?format=pdf&id= {0}Отправить электронное письмо с приложением с определенного URL-адреса в C#

Например, если идентификатор равен 10, то URL-адрес для загрузки документа будет: http://test.com/a.ashx?format=pdf&id=10, и когда пользователь нажмет на него, он сможет загрузить документ.

Вот как это выглядит на мой взгляд:

foreach (var item in Model) 
     { 

       <td> 
        <a [email protected]("http://test.com/a.ashx?format=pdf&id={0}",item.id)> 
         @Html.DisplayFor(modelItem => item.id) 
        </a> 
       </td> 
     } 

И ниже мои действия контроллера для SendEmail.

Я могу отправить электронное письмо пользователю. Но у меня проблема с отправкой вложений. Мой вопрос: как я могу прикрепить документ, который поставляется с URL-адресом по электронной почте?

public static bool SendEmail(string SentTo, string Text, string cc) 
    { 

     MailMessage msg = new MailMessage(); 

     msg.From = new MailAddress("[email protected]"); 
     msg.To.Add(SentTo); 
     msg.CC.Add(cc); 
     msg.Subject = "test"; 
     msg.Body = Text; 
     msg.IsBodyHtml = true; 

     System.Net.Mail.Attachment attachment; 
     attachment = new System.Net.Mail.Attachment(???); 
     msg.Attachments.Add(attachment); 

     SmtpClient client = new SmtpClient("mysmtp.test.com", 25); 

     client.UseDefaultCredentials = false; 
     client.EnableSsl = false; 
     client.Credentials = new NetworkCredential("test", "test"); 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 
     //client.EnableSsl = true; 

     try 
     { 
      client.Send(msg); 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
     return true; 
    } 
+4

Что такое _ "прикрепить документ, который поставляется с URL-адресом" _? Вы хотите, чтобы ваш код загружал содержимое URL-адреса и прикреплял этот файл к почтовому сообщению? – CodeCaster

+0

Да, в этом случае мой URL-адрес является PDF-файлом. – sensahin

+2

У вас уже есть файлы PDF на вашем сервере или они сгенерированы? С какой особенностью вы сталкиваетесь? См. Например, [Получить файл для отправки в виде вложения из массива байтов] (http://stackoverflow.com/questions/23212196/get-file-to-send-as-attachment-from-byte-array). – CodeCaster

ответ

2

Если файл PDF генерируется на внешнем сайте, вам нужно будет загрузить его в некотором роде, для этого вы можете использовать WebClient:

var client = new WebClient(); 

// Download the PDF file from external site (pdfUrl) 
// to your local file system (pdfLocalFileName) 
client.DownloadFile(pdfUrl, pdfLocalFileName); 

Затем вы можете использовать его на Attachment:

attachment = new Attachment(pdfLocalFileName, MediaTypeNames.Application.Pdf); 
msg.Attachments.Add(attachment) 
1

Рассмотрите возможность использования Postal Это открытый исходный код libriary для ASP.Net MVC позволяет отправлять электронные письма очень легко. Например, чтобы прикрепить файл можно использовать такой код:

dynamic email = new Email("Example"); 
email.Attach(new Attachment("c:\\attachment.txt")); 
email.Send(); 

Также вы можете использовать HangFire для отправки электронной почты в фоновом режиме, пожалуйста, посмотрите на Sending Mail in Background with ASP.NET MVC

Update: Для того, чтобы получить PDF file path вы можете использовать метод Server.MapPath для преобразования виртуального пути в соответствующий физический каталог на сервере.