2009-05-12 3 views
3

Я хочу, чтобы иметь возможность создать сообщение электронной почты с приложением, но не отправлять его. Электронная почта должна открываться в Outlook, где пользователь может отправить себя.Создайте сообщение электронной почты в .NET

Я играл с командой Mailto: для открытия нового почтового сообщения, однако Outlook-клиент, похоже, не поддерживает добавление вложений с помощью команды Mailto :.

Я не хочу использовать COM для этого.

Кто-нибудь знает, как это достичь? Я думаю, что это может быть невозможно без COM.

ответ

4

Единственный способ, с которым я столкнулся (или VSTO), - это использовать параметры командной строки Outlook.Использование Process.Start можно запустить Outlook, с параметрами, описанными в this answer (по VonC):

Открыть новое сообщение электронной почты:

outlook.exe /c ipm.note 

Открыть новое сообщение электронной почты и заполнить отправителя:

outlook.exe /c ipm.note /m [email protected] 

Открыть новое почтовое сообщение с вложение:

outlook.exe /c ipm.note /a filename 

Комбинация:

outlook.exe /c ipm.note /m [email protected]&subject=test%20subject&body=test%20body 

Вы можете получить папку установки в Outlook, из следующих ключей реестра:

Outlook 2007:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot 

Outlook 2003:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Outlook\InstallRoot 

Outlook XP:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\10.0\Outlook\InstallRoot 
+0

Это именно то, что я искал. outlook.exe/c ipm.note/имя файла работает отлично. Спасибо! – jgallant

5

Если вы хотите открыть почтовое сообщение в Outlook, то я уверен, что вам потребуется COM. Есть ли какая-то конкретная причина, по которой вы хотите взаимодействовать с Outlook, а не автоматизировать отправку с использованием SMTP и пространства имен System.Net.Mail?

Edit: Кажется, вы можете указать вложение с помощью ссылки MAILTO, кстати. Пример:

mailto:[email protected]?subject=foo&body=bar&attachment="C:/foo/bar.txt" 

Вы пробовали это с помощью Outlook? Тем не менее, я бы по-прежнему рекомендовал COM как способ, поскольку он дает вам гораздо больше контроля над тем, что вы можете делать с Outlook и почтовыми сообщениями.

+0

Да. Чтобы отправить через SMTP с моим текущим работодателем, мне нужно сделать запрос SMTP-ретрансляции для получения доступа. Я надеялся разрешить пользователям самостоятельно отправлять электронную почту, так как у них уже есть учетные данные. – jgallant

+0

@Jon: Достаточно справедливо. Я бы рекомендовал COM как способ взаимодействия с Outlook. Это не очень сложно сделать, и должно быть достаточно примеров (например, в MSDN). – Noldorin

+0

Задание вложения через mailto не работает с Outlook 2007 afaik. –

1

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

0

I Не уверен, что вы можете связать его с Outlook (я предполагаю, что вам нужно будет использовать MAPI), но System.Net.Mail отлично.

0

вы также можете сохранить сообщение в папку вместо отправки только путем настройки параметров SMTP

<system.net> 
<mailSettings> 
    <smtp deliveryMethod="SpecifiedPickupDirectory"> 
    <specifiedPickupDirectory pickupDirectoryLocation="c:\pickup-smtp\"/>   
    </smtp> 
</mailSettings> 

0

Easy:

using Microsoft.Office.Interop.Outlook; 

private void CreateMailItem() 
{ 
    Outlook.MailItem mailItem = (Outlook.MailItem) 
     this.CreateItem(Outlook.OlItemType.olMailItem); 
    mailItem.Subject = "This is the subject"; 
    mailItem.To = Environment.UserName + "@example.com"; 
    mailItem.Body = "This is the message."; 
    mailItem.Importance = Outlook.OlImportance.olImportanceLow; 
    mailItem.Display(false); 
} 
Смежные вопросы