4

indy 9 でメールを送信しようとしています:

  • TRichEdit からフォーマットされた RTF としての本文
  • 単一のファイルが添付されています

コード:

 Message := TIdMessage.Create()
 Message.Recipients.EMailAddresses := 'someone@domain.dotcom';

 Message.ContentType := 'multipart/alternative';

 with TIdText.Create(Message.MessageParts) do
   ContentType := 'text/plain';

 with TIdText.Create(Message.MessageParts) do
 begin
   ContentType := 'text/richtext';
   Body.LoadFromFile('c:\bodymsg.rtf');
 end;

 TIdAttachment.Create(Message.MessageParts, 'c:\myattachment.zip');

 // send...

結果: 本文が空になります (Web Gmail と Outlook 2010 をクライアントとして使用)。

私はすでに成功せずに他のコンテンツタイプを試しました:

  • テキスト/rtf
  • テキスト/エンリッチ

注: Indy 10 にはアップグレードしません。

4

1 に答える 1

5

TIdMessage.ContentTypeが存在する場合、 を間違った値に設定していますTIdAttachment。パーツは代わりにパーツの子であるのに対し、同じトップレベルの MIME ネスト レベルでとパーツ'multipart/mixed'を混合しているため、代わりにに設定する必要があります。'multipart/alternative''application/x-zip-compressed''text/...''multipart/alternative'

Indy の Web サイトで私が書いた次のブログ記事をご覧ください。

HTML メッセージ

作成しようとしている電子メール構造は、「プレーン テキストと HTML および添付ファイル: 関連のない添付ファイルのみ」セクションで説明されています。HTML を RTF に置き換えるだけで、部分のTIdTextオブジェクトを無視します。これは、Indy 9 では内部的に作成されるためです (Indy 9 よりも MIME サポートが深いため、Indy 10 では明示的に必要です)。'multipart/alternative'TIdMessage

これを試して:

Message := TIdMessage.Create()
Message.Recipients.EMailAddresses := 'someone@domain.dotcom';

Message.ContentType := 'multipart/mixed';

with TIdText.Create(Message.MessageParts) do
begin
  ContentType := 'text/plain';
  Body.Text := 'You need an RTF reader to view this message';
end;

with TIdText.Create(Message.MessageParts) do
begin
  ContentType := 'text/richtext';
  Body.LoadFromFile('c:\bodymsg.rtf');
end;

TIdAttachment.Create(Message.MessageParts, 'c:\myattachment.zip');

// send...
于 2013-03-13T22:12:33.783 に答える