вторник, 7 мая 2013 г.

Automaticaly detect user ticket based on email headers

Введение

Часто мне приходят письма из службы технической поддержки и они меня сильно раздражают такими фразами“Это письмо сгенерировано автоматически, при последующих обращениях указывайте в теме письма номер тикета xxx-1977”. По моему это бред. Сегодня мой коллега столкнулся с этой проблемой, как передать информацию в письме? После работы я посидел покурил RFC И решение пришло

Немного стандартов

http://tools.ietf.org/html/rfc822 собственно это наше все, уникальный заголовок письма описывается в 4.6.1.  MESSAGE-ID / RESENT-MESSAGE-ID это нам и нужно. В вольном переводе:

Данный заголовок должен представлять из себя уникальную строку формируемую сервером при ее отсутствии либо клиентом (Бинго!!!). Смотри дальше  видим заголовки

4.6.2. IN-REPLY-TO
 
4.6.3. REFERENCES

 

Конечно они опциональные, но таки нормальные клиенты их ставят (Бинго!!!)

 

Сам код

этот код стандартный C#, но я думаю на любом другом ЯП можно с легкостью его повторить

using (var client = new SmtpClient())
using(var message = new MailMessage("test@ya.ru",model.To,model.Subject,model.Body))
{
  int requestId = 1977;
  var messageid = string.Format("<{0}_{1}>", Guid.NewGuid().ToString("D"), requestId);
  message.Headers.Add("Message-ID", messageid);
                    client.Send(message);
}

Комментариев нет: