Delphi 2006を使用して、添付ファイル付きの電子メールメッセージをパーソナル専用アプリケーションに作成して送信しています。 TIdSMTPのインスタンスでメッセージを送信し、TIdIMAP4のインスタンスを含む特定のIMAPフォルダにコピーを配置します。これはBDS2006で配布されたIndy 10のバージョンと非常にうまく動作しますが、1つの例外は例外です。電子メールヘッダーの時刻は常に間違っています。マルチパート/混合メッセージの境界文字列が正しくありません
解決策を探して解決した後、最新のIndy 10スナップショットを入手して使用するのが最も合理的だったようです。
これは、電子メールのヘッダーに正しい時刻を置きますが、新しい問題があります。 IMAPフォルダに追加されたメッセージのヘッダーの境界文字列は、電子メールの本文に含まれているものとは異なります。 (SMTPを介して送信されたメッセージが正しいことに注意してください。)
これは、インディ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"
、これはインディ10.5から同一のヘッダ情報であります0.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を使用して、私のコードにkludgeの何かを組み込みました。メッセージの日付/時刻を送信する前にUTC/GMT時間に設定するだけで、受信者の最後にメッセージが正しい時刻を含むことができます。
これは影響がありましたが、私が探していたものではありません。 FTheMsg.NoEncode:= Falseに設定し、ストリームにメッセージを保存し、FTheMsg.NoEncode:= Trueをリセットしてメッセージを再読み込みし、TIdSMTP.Send()とTIdIMAP4.AppendMsg()で送信して渡したメモリストリームを作成しました。 'AdditionalHeaders'パラメータとしてNILを指定します。その結果、添付ファイルがまったくなく、メッセージにテキストが表示されません! – pejurgenson
これは、NoEncode = Falseで保存した後、NoEncode = Trueの 'code'でリロードした後の完全なメッセージです。件名:グルコース読み取り値11/07/11 - 11/20/11 To:[email protected] コンテンツタイプ:multipart/mixed;境界= "D9uTCLury1wVu8hlPEcf = _0afpyB9eNLrK" MIME-バージョン:1.0 日:火、2011年11月22日午前15時00分10秒-0600 これは、MIME形式 でマルチパートメッセージです。 NoEncode = Falseの場合、保存されたメッセージは完了したように見えます。 – pejurgenson
申し訳ありませんが、私はNoEncodeを設定することについて誤解しました - 私はそれをNoDecodeとして読んでいます!おっとっと。あなたのメモのように正しく行うと、メッセージは受信者と私の '送信済みアイテム'フォルダの両方に正しく到着します。非常に多くの助けをありがとう、それは非常に感謝しています!私はこの答えを間違いなく受け入れます。 – pejurgenson