2010-07-13 3 views
4

. Одним из требований к приложению, над которым я работаю, является предоставление пользователям отчета об отладке в нашу службу поддержки для фатальных ошибок (как отчеты об ошибках Windows).Создайте электронное письмо, которое будет загружено клиентом и отправлено со своей учетной записи Outlook.

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

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

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

+0

У вас попробовал ли они загрузить файл .eml и открыть его с помощью Outlook? – Borealid

+0

Вы пробовали 'System.Net.Mail' с включенной олицетворением? Вы можете попробовать http://stackoverflow.com/questions/1448019/send-email-from-outlook-express-in-c –

+0

@Borealid - я не пробовал файл .eml. В принципе, до тех пор, как открывается в Outlook, я не беспокоюсь. @Jaroslav Мне удалось получить сообщение с помощью System.Net.Mail, с которым я столкнулся, - как преобразовать его в загружаемый файл. –

ответ

1

В одном из наших приложений пользователь нажимает кнопку генерации и создает и открывает электронную почту в Outlook. Все, что им нужно сделать, это нажать кнопку отправки. Функции ниже.

public static void generateEmail(string emailTo, string ccTo, string subject, string body, bool bcc) 
     { 
      Outlook.Application objOutlook = new Outlook.Application(); 
      Outlook.MailItem mailItem = (Outlook.MailItem)(objOutlook.CreateItem(OlItemType.olMailItem)); 

      /* Sets the recipient e-mails to be either sent by 'To:' or 'BCC:' 
      * depending on the boolean called 'bcc' passed. */ 
      if (!(bcc)) 
      { 
       mailItem.To = emailTo; 
      } 
      else 
      { 
       mailItem.BCC = emailTo; 
      } 
      mailItem.CC = ccTo; 
      mailItem.Subject = subject; 
      mailItem.Body = body; 
      mailItem.BodyFormat = OlBodyFormat.olFormatPlain; 
      mailItem.Display(mailItem); 
     } 

Как вы можете видеть, он выводит электронное письмо в виде открытого текста на данный момент, поскольку он должен быть дружелюбным к ежевике. Вы можете легко изменить формат HTML или richtext, если хотите некоторые параметры форматирования. Для использования в HTML mailItem.HTMLBody

Надеюсь, это поможет.

EDIT:.

Я хотел бы отметить, что это используется в C# Применение и что он ссылается Microsoft.Office.Core и using Outlook в классе Email функция находится в

+1

Несомненно, это приложение клиента, а не приложение ASP.NET, как в вопросе? – bruceboughton

+0

Читать редактирование ... – Gage

4

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

У вас есть два варианта:

  1. mailto:[email protected]?subject=Error&body=Error message here...

  2. ПОЛУЧИТЬ пользователю загрузить электронную почту в каком-то формате, откройте его в своем клиенте и отправить его

Вариант 1, вероятно, сломать сложные тела. В варианте 2 вам необходимо найти формат, поддерживаемый всеми почтовыми клиентами (которые используют ваши пользователи).

С опцией 1, вы можете сохранить данные электронной почты на локальном сервере против некоторых ошибок ID и просто отправить письмо с идентификатором ошибки в теме:

mailto:[email protected]?subject=Error 987771 encountered

+0

Спасибо за ваш вход Брюс. Ранее я пытался использовать ссылку mailto, но, как вы совершенно справедливо отмечаете, она очень быстро ломается, когда я пытаюсь добавить такие вещи, как Trace Stack. Плюс в IE8, есть явно ограничение на 512 символов на mailto ссылки. Я пытаюсь достичь варианта 2, как описано в моем первоначальном вопросе, по какой-либо другой причине, чем это требование из-за того, как работает наш справочный центр. –

2

Простой ответ является то, что вы пытаетесь достичь, нереалистично достижимы на всех платформах и почтовых клиентах. Когда его попросят сделать невероятное, разумно придумать альтернативу и предложить это.

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

Я всегда обрабатывал это, регистрируя ошибку и текст в базе данных и интегрируя это с системой продажи билетов. Возможно, у вас также есть mailto: как Bruce предлагает с subject = ID & body = текст, чтобы позволить пользователю отправлять что-либо по электронной почте.

Я не думаю, что файл формата .eml поможет либо - потому что им нужно будет переслать его, и большинство пользователей, вероятно, путают.

A .eml - это простой текст сообщения, включая заголовки в соответствии с RFC-5322.

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