Создать сообщение электронной почты в .NET - PullRequest
3 голосов
/ 12 мая 2009

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

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

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

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

Ответы [ 6 ]

5 голосов
/ 12 мая 2009

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

Редактировать: Кажется, вы можете указать вложение, используя ссылку mailto , кстати. Пример:

mailto:foo@bar.com?subject=foo&body=bar&attachment="C:/foo/bar.txt"

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

4 голосов
/ 12 мая 2009

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

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

    outlook.exe /c ipm.note

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

    outlook.exe /c ipm.note /m someone@example.com

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

    outlook.exe /c ipm.note /a filename

Комбинация:

    outlook.exe /c ipm.note /m someone@example.com&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
1 голос
/ 12 мая 2009

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

0 голосов
/ 09 июля 2012

Легко:

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);
}
0 голосов
/ 12 мая 2009

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

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

0 голосов
/ 12 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...