Как отправить письмо, используя почтовый клиент по умолчанию? - PullRequest
20 голосов
/ 01 мая 2009

Я хочу отправить электронное письмо из приложения форм Windows .net, используя системный почтовый клиент по умолчанию (thunderbird, outlook и т. Д.). Я хотел бы предварительно задать тему и основной текст - я думаю, что есть способ сделать это, отправив что-то подобное в проводник Windows: «mailto: test@example.invalid? Subject = mysubject & body = mymessage». У вас есть примеры по этому поводу?

Ответы [ 4 ]

31 голосов
/ 01 мая 2009

Попробуйте это:

    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "mailto:someone@somewhere.com?subject=hello&body=love my body";
    proc.Start();
10 голосов
/ 23 августа 2009

Правильный способ сделать это - использовать MAPI, но использование кода взаимодействия с dll MAPI на самом деле не поддерживается и не рекомендуется делать это . Я сделал это, и, пока вы очень осторожны с кодом взаимодействия и не делаете намного больше взаимодействия, чем открываете почтовый клиент для отправки письма, вы должны быть в порядке .

Существует несколько проблем с использованием подхода "mailto", наименьшая из которых заключается в том, что вы не можете прикреплять файлы.

10 голосов
/ 23 августа 2009

Если вы работаете только в среде MS Windows, вы можете использовать MAPI32.DLL. Управляемую оболочку можно найти здесь:

http://www.codeproject.com/KB/IP/SendFileToNET.aspx

Код выглядит так:

MAPI mapi = new MAPI();
mapi.AddAttachment("c:\\temp\\file1.txt");
mapi.AddAttachment("c:\\temp\\file2.txt");
mapi.AddRecipientTo("person1@somewhere.com");
mapi.AddRecipientTo("person2@somewhere.com");
mapi.SendMailPopup("testing", "body text");

// Or if you want try and do a direct send without displaying the mail dialog
// mapi.SendMailDirect("testing", "body text");
4 голосов
/ 01 мая 2009

Вот что я пробовал:

Process.Start("mailto:demo@example.invalid?subject=" +
    HttpUtility.HtmlAttributeEncode("Application error report") + 
    "&body=" + HttpUtility.HtmlAttributeEncode(memoEdit1.Text));

Но если основной текст слишком велик, я получаю исключение:

Win32Exception "Область данных, переданная системному вызову, слишком мала"

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

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