2015-01-16 2 views
1

У меня есть сайт ASP.NET, который должен иметь возможность динамически генерировать электронное письмо, которое будет отправлено обратно на локальную машину пользователя, а затем будет отправлено через Outlook. Код ниже делает именно это, но он использует Outlook Interop для создания сообщения, и я немного не решался использовать Interop в веб-приложении. Я просмотрел OpenXML, но не мог найти многого в Outlook.Создать Oulook Email с сервера

  // Creates a new Outlook Application Instance 
     Microsoft.Office.Interop.Outlook.Application objOutlook = new Microsoft.Office.Interop.Outlook.Application(); 

     // Creating a new Outlook Message from the Outlook Application Instance 
     Microsoft.Office.Interop.Outlook.MailItem mic = (Microsoft.Office.Interop.Outlook.MailItem)(objOutlook.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)); 

     mic.To = "[email protected]"; 
     mic.CC = "[email protected]"; 
     mic.Subject = "Test Subject"; 
     mic.HTMLBody = "Test Message Body"; 


     string strNewEmailPath = strEmailPath + "\\EmailMessages\\" + strUser + "_Message_PEI.msg"; 

     mic.SaveAs(strNewEmailPath, Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG); 

     HttpContext.Current.Response.ContentType = "application/vnd.ms-outlook"; 
     HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=Message.msg"); 
     HttpContext.Current.Response.TransmitFile(strNewEmailPath); 
     HttpContext.Current.Response.End(); 

Может ли кто-нибудь помочь с возможно лучшим предложением для автоматизации сообщения Outlook с помощью ASP.NET?

Update:

Я нашел код Javascript, который, кажется, имеют подобные функциональные возможности.

var theApp //Reference to Outlook.Application 
var theMailItem //Outlook.mailItem 
//Attach Files to the email, Construct the Email including  
//To(address),subject,body 
var subject = sub 
var msg = body 
//Create a object of Outlook.Application 
try 
{ 
    var theApp = new ActiveXObject("Outlook.Application") 
    var theMailItem = theApp.CreateItem(0) // value 0 = MailItem 
     //Bind the variables with the email 
     theMailItem.to = to 
     theMailItem.Subject = (subject); 
     theMailItem.Body = (msg); 
     //Show the mail before sending for review purpose 
     //You can directly use the theMailItem.send() function 
     //if you do not want to show the message. 
     theMailItem.display() 
    } 
catch(err) 
{ 
    alert("Error"); 
} 
+0

Вы должны сгенерировать MIME-файл напрямую, без Outlook. – SLaks

+0

Любой пример кода о том, как это делается? Файлы .msg Outlook не основаны на тексте. – chrisg229

+0

Если этот JavaScript работает для вас, тогда поставьте его как ответ (а не как часть вопроса). Если это не сработает, тогда объясните, почему. – mason

ответ

0

Я нашел код Javascript, который, похоже, имеет аналогичную функциональность. Я надеялся, что у кого-то может быть решение OpenXML, но это решение JS может работать и лучше, чем Outlook Interop.

var theApp //Reference to Outlook.Application 
var theMailItem //Outlook.mailItem 
//Attach Files to the email, Construct the Email including  
//To(address),subject,body 
var subject = sub 
var msg = body 
//Create a object of Outlook.Application 
try 
{ 
    var theApp = new ActiveXObject("Outlook.Application") 
    var theMailItem = theApp.CreateItem(0) // value 0 = MailItem 
     //Bind the variables with the email 
     theMailItem.to = to 
     theMailItem.Subject = (subject); 
     theMailItem.Body = (msg); 
     //Show the mail before sending for review purpose 
     //You can directly use the theMailItem.send() function 
     //if you do not want to show the message. 
     theMailItem.display() 
    } 
catch(err) 
{ 
    alert("Error"); 
} 
0

У меня была аналогичная потребность раньше. Я отложил эту идею из-за сложности создания файлов .msg (хотя я думаю, что есть some commercial libraries, которые могут это сделать). Один из вариантов, который вы можете рассмотреть, - это установка надстройки Outlook на машине пользователя. Опросите веб-сервер (или это будет отличный случай для SignalR, чтобы сервер мог передавать данные), и веб-сервер отправляет данные электронной почты на машину пользователя. Затем надстройка может генерировать электронную почту на основе сведений, полученных от сервера. Это позволит избежать использования Interop на сервере (что представляет собой идею bad). Однако теперь у вас будет сложность развертывания надстройки Outlook, но если это корпоративная среда, это не должно быть слишком сложно.

Если вы не хотели делать это как надстройку, вы все равно могли бы это сделать, просто написав приложение-службу, которое запускается на машине пользователя и использует Interop, но у этого все еще есть все сложности добавления в технике.

В качестве альтернативы, если ваша электронная почта действительно проста, вы можете просто use a mailto URI. Но я считаю, что они очень ограничены, так как трудно или невозможно отправить HTML-сообщение таким образом.

И, наконец, вы могли бы просто отправить электронное письмо от имени пользователя, а не включать код, запущенный на машине пользователя.

+0

Unfortunatley У меня есть довольно много ограничений на что и на веб-сервере, и на компьютере пользователя. Также это сообщение очень динамично, поэтому простое письмо не разрешит его. Наконец, пользователь ДОЛЖЕН быть в состоянии просмотреть, дополнительно уничтожить и затем зашифровать электронную почту. – chrisg229

+0

APOSE.Mail выглядит превосходно ... минус стоимость – chrisg229

Смежные вопросы