2010-11-20 2 views
3

У меня есть приложение для окон, которое я добавляю в форму поддержки запроса, и хотел бы, чтобы пользователь мог ввести значения и нажать кнопку. Как только кнопка нажата, я могу:C#: Каков наилучший способ отправки запроса поддержки по электронной почте?

  1. Открыть новое почтовое сообщение и автоматически заполнить сообщение. (Не знаете, как это сделать)
  2. Отправить запрос через http-форму на моем сайте. (Я знаю, как это сделать)
  3. Отправьте электронное письмо непосредственно из кода приложения. (Я знаю, как это сделать)

Что я хочу знать, что будет лучшим методом для использования? Я думаю, что вариант 1 является самым прозрачным, и пользователь увидит, что именно отправляется, но я не уверен, как обеспечить его работу независимо от того, какой почтовый клиент он использует.

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

Спасибо за помощь.

+0

вы можете отправить почту с помощью объектов System.Net.Mail, см. Http://www.systemnetmail.com для получения дополнительной информации. Не уверен, что рекомендовать по вариантам. –

+0

@Brian: Я думаю, что это вариант 3) –

ответ

2

Для варианта 1, как предлагается, используйте обработчик mailto.

Отформатируйте свою строку так: string.Format("mailto:[email protected]?subject={0}&body={1}", subject, body). Не забывайте UrlEncode значения объекта и тела.

Затем используйте System.Diagnostics.Process.Start() с вашей строкой.

Это запустит зарегистрированный почтовый обработчик (Outlook, Windows Live Mail, Thunderbird и т. Д.) В системе.

0

Вариант 2) является лучшим, чтобы избежать проблем с брандмауэром предприятия, поскольку HTTP-порт не может быть заблокирован.

Вариант 2) является лучшим для простой конфигурации. Единственный конфигурационный ключ, который у вас будет, - это URL-адрес службы/страницы. Затем ваша конфигурация SMTP останется на вашем веб-сервере.

Теперь вам нужно будет выбрать между веб-страницей (если она уже существует) или веб-сервисом (который лучше всего подходит для вашей функции).

0

Для варианта (1) быть готовым к решению проблем с версией Outlook. Но это не сложно (опять же, если мы говорим о Outlook, последняя версия)

 //using Microsoft.Office.Interop.Outlook;  
     private void OutlookMail(string Subject, string Body) 
     { 

     ApplicationClass app = new ApplicationClass(); 
     NameSpaceClass ns = (NameSpaceClass)app.GetNamespace("mapi"); 
     ns.Logon("", "", true, true); 
     MailItem mi = 
      (MailItem)app.CreateItem(OlItemType.olMailItem); 
     mi.Subject = Subject; 

     int EOFPos = Body.IndexOf(char.Parse("\0")); 
     if (EOFPos != -1) 
     { 
      log.Error("EOF found in Mail body"); 
      ErrorDialog ed = new ErrorDialog(TietoEnator.Common.ErrorDialog.ErrorDialog.Style.OK, "Export Error", "File could not be exported correctly, please inform responsible person", "", "EOF char detected in the body of email message."); 
      ed.ShowDialog(); 
     Body=Body.Replace("\0", ""); 
     } 
     mi.HTMLBody = "<html><head><META content='text/html; charset=CP1257' http-equiv=Content-Type></head><body><table>"+Body+"</table></body></html>"; 

     mi.BodyFormat = OlBodyFormat.olFormatHTML;//.olFormatPlain; 
     mi.Display(0); // show it non - modally 
     ns.Logoff(); 
    } 

BTW для автоматических запросов поддержки, которые я планирую использовать в моем текущем проекте «Microsoft Enterprise Logging Блок поддержки» Отправка электронной почты функциональность ,

+0

не забудьте добавить правильные ссылки –

1

Для варианта 1: если тело сообщения является коротким, то при вызове обработчика mailto внутри вашего кода больше не требуется, чтобы он использовал внешний вид. Это своего рода дешевый взлом, но он полностью кросс-платформенный для местных почтовых клиентов. (Если они используют что-то вроде gmail, вы все равно SOL, хотя)

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