2013-10-28 4 views
1

У меня есть требование создать приложение .Net, которое отправит почтовое сообщение (с вложениями и, возможно, html-форматированием), но без использования System.Net.Mail (мы не можем запрашивать данные SMTP пользователя) или Outlook (это для ПК без установки Outlook).Отправить письмо без Outlook или System.Net.Mail

Я смотрел в MAPI сегодня, но кажется, что это может быть реализовано только путем создания C/C++ library and then using a .NET wrapper, который много работает в незнакомой области. Большая часть примерного кода и проектов вокруг тоже довольно старая, и некоторые полагаются на данные SMTP-сервера в любом случае, как только вы начнете копаться.

Есть ли подходящее решение для отправки электронной почты без SMTP, Outlook или вложения в C++ и MAPI? Может быть, сторонняя библиотека MAPI?

+0

Является ли проблема отправки SMTP по сети? Потому что существует более чем один способ использования SMTP. См. 'DeliveryMethod' http://msdn.microsoft.com/en-us/library/ms164240 (v = vs.110) .aspx –

+0

Нет проблемы в том, что мне сказали, что я не могу попросить пользователя заполнить любые SMTP-данные. –

+0

Считаете ли вы Amazon Simple Mail Service? –

ответ

2

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

В основном вы должны использовать System.Runtime.InteropServices для украшения различных классов, необходимых атрибуту StructLayout, чтобы они правильно обрабатывались в памяти. Это позволяет использовать функцию MAPI32.DLL SendMail:

<DllImport("MAPI32.DLL")> _ 
Private Shared Function MAPISendMail(ByVal sess As IntPtr, 
     ByVal hwnd As IntPtr, ByVal message As MapiMessage, 
     ByVal flg As Integer, ByVal rsv As Integer) As Integer 
End Function 

Я разработал некоторые .NET код, основанный на этом, который основном работает, но есть проблема в том, что managed code is simply not compatible with MAPI в конечном счете, что привело к this follow up question.

+0

После прочтения какой-либо документации по этому вопросу я частично исправлен. Это действительно может сработать, если у пользователя установлен клиент, совместимый с Mapi (Outlook, Thunderbird). – CodeCaster

0

Вы являетесь конусом smtp является http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol это протокол EMAIL.

ВЫ ДОЛЖНЫ использовать SMTP-сервер.

Send email using System.Net.Mail through gmail

+0

Возможно, если Outlook установлен, для отправки электронной почты с помощью Outlook без каких-либо SMTP-данных в коде .NET. Таким образом, использование SMTP-сервера напрямую не является необходимостью. –

0

SMTP-или другой почтовый сервер является необходимость, если вы хотите отправить почту. Чтобы вы перенаправляли свое почтовое сообщение с помощью почтового приложения, такого как Outlook, который, в свою очередь, разговаривает с Exchange, который, наконец, доставляет ваше сообщение с помощью SMTP, делает noet пренебрегать тем фактом, что SMTP используется в конце.

Вы хотите сделать невозможное: вы не хотите полагаться на уже установленное почтовое приложение (Outlook, Thunderbird) и не хотите подключаться к почтовому серверу: тогда вы не можете отправлять почту.

В этой части вашего описания проблемы:

мы не можем попросить пользователя детали SMTP

Вы можете тогда, возможно, написать WebService, что вы хозяин, который представляет собой слой над сервер SMTP или Exchange под вашим контролем. Вы пишете эту службу для приема почтового сообщения из своих приложений, поэтому клиенты могут вызывать его, не зная о базовом транспорте или конфигурации сервера; все, что им нужно знать, - это адрес вашей службы.

Ваши приложения могут затем отправить запрос SendEmail() к сервису без необходимости настройки SMTP-сервера или подключения Outlook на клиенте.

+0

Если электронное письмо является внутренним, а компания использует Exchange, нет необходимости подключать SMTP. Я получаю 10 писем в день от своих коллег, это делается через MAPI. –

+0

Очевидно, что SMTP-сервер необходим в какой-то момент, это заданный. Я уточнил вопрос, чтобы уточнить точные требования. –

+0

Вы правы в этом отношении, что я предположил, что OP хочет отправлять письма во внешний мир. – CodeCaster

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