Неправильная граничная строка в составном / смешанном сообщении

Я использую Delphi 2006 для создания и отправки сообщения электронной почты с вложением в приложении, предназначенном только для личного использования. Я отправляю сообщение с экземпляром TIdSMTP, а затем помещаю копию в определенную папку IMAP с экземпляром TIdIMAP4. Все это очень хорошо работает с версией Indy 10, которая распространялась с BDS2006, за одним исключением: время в заголовке письма всегда неверно.

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

Таким образом, правильное время помещается в заголовок электронного письма, но возникает новая проблема. Теперь граничная строка в заголовке сообщения, добавляемого в папку IMAP, отличается от той, которая содержится в теле письма! (Обратите внимание, что сообщение, которое было отправлено через SMTP, является правильным.)

Это соответствующая информация заголовка из более старой версии Indy 10:

Content-Type: multipart/mixed; boundary="XNlC6OyS4QSiHY2U=_jsXyps6TR34pFNsh"
MIME-Version: 1.0
Date: Tue, 22 Nov 2011 09:11:58 +0000

A test of the BDS2006-bundled version of Indy

--XNlC6OyS4QSiHY2U=_jsXyps6TR34pFNsh
Content-Type: application/octet-stream;
        name="20111122.xls"

И это та же информация заголовка из Indy 10.5.8 (снимок 10_4702) который я установил вчера):

Content-Type: multipart/mixed; boundary="CDbEncbFvL7RZdOJ3DOIRoRBs=_nBsbZms"
MIME-Version: 1.0
Date: Tue, 22 Nov 2011 07:33:46 -0600

investigating more deeply, why does the boundary indicator change?

--h=_WzGWJei29fng7SqdPpDh1nkJxJZhiGc
Content-Type: application/octet-stream;
    name="20111122.xls"

Отметка времени исправлена, но теперь граничная строка неверна. В результате в сообщении, которое добавляется в мою папку IMAP, похоже, вообще ничего нет.

Вот соответствующий код, который создает сообщение электронной почты и вложение, отправляет его и помещает копию в папку IMAP:

  FTheMsg.Date := Now;  // FTheMsg is a component dropped onto the form
  FTheMsg.Recipients.EMailAddresses := edMailTo.Text;
  FTheMsg.ClearBody;
  FTheMsg.Subject := 'Glucose Readings ' + FormatDateTime('mm/dd/yy', FStartDate) + ' - ' +
              FormatDateTime('mm/dd/yy', FEndDate);
  FTheMsg.Body.Assign(FMemo.Lines);

  // create the attachment
  TIdAttachmentFile.Create(FTheMsg.MessageParts, fileName);

  // send the mail!
  FSmtp.Host := FSMTPHost;  // values set up elsewhere, FSmtp is a component on the form
  FImap.Host := FIMAPHost;  // FImap is also a component on the form

  FSmtp.Connect;
  try
    FSmtp.Send(FTheMsg);
    FImap.Connect;
    try
      if (not FImap.AppendMsg('Sent Items', FTheMsg, FTheMsg.LastGeneratedHeaders, [mfSeen]))     then
        StatusBar1.Panels[4].Text := 'Failed append msg';
    finally
      FImap.Disconnect;
    end;
  finally
    FSmtp.Disconnect;
  end;

Как я уже сказал, отправленное электронное письмо в порядке и отображается правильно. Но тот, который добавлен в мою папку IMAP (в FImap.AppendMsg () выше), неверен. Я попытался отследить код, чтобы увидеть, где что-то пошло не так, но, честно говоря, я недостаточно знаком с Indy и различными протоколами электронной почты / RFC, чтобы определить, что идет не так. Все, что я могу сказать, это то, что старая версия сохраняет сообщение во временном файле перед добавлением его в папку, а более новая версия вместо этого сохраняет его в потоке памяти. Очевидно, в этом что-то другое, но в настоящее время я слишком невежественен, чтобы определить, что именно.

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

(Поскольку это приложение предназначено исключительно для моего личного использования, я могу жить с неправильной датой, если мне нужно, но не с «пустой» копией в моей папке «Отправленные».)

Если потребуется дополнительная информация, я с радостью предоставлю все, что смогу.

[Изменить: я действительно включил что-то вроде кладжа в МОЙ код, используя старую версию Indy. Я просто устанавливаю дату / время сообщения на время UTC / GMT перед его отправкой, и это, по крайней мере, позволяет сообщению содержать правильное время на стороне получателя. Я не особо забочусь об этом исправлении, но оно помогает.]

5
задан pejurgenson 22 November 2011 в 18:56
поделиться