4

MFCアプリケーションでMAPISendMail()を使用していますが、ウェブメールクライアントが「実際の」添付ファイルではなくwinmail.dat添付ファイルを受信することがあるという問題があります。

私は多くの調査を行い、他の人もこの問題を経験していることを発見しましたが、解決策を見つけられませんでした。

メールプログラム(私の場合はOutlook 2010)にファイルの種類を自動的に判断させるために、lpFileTypeメンバーをNULLにしたままにする MapiFileDesc構造に問題がある可能性があると思います。lpFiletypeMapiFileTagExt構造であり、ドキュメントには次のように記載 されています。NULLの値は、不明なファイルタイプまたはオペレーティングシステムによって決定されたファイルタイプを示します。

したがって、これはJPEGやGIFなどの一般的なタイプで機能するはずです。

winmail.datは、OutlookがMicrosoft独自のms-tnefエンコーディングでエンコードされたメールを送信したことが原因であると読みました。ただし、電子メールを送信すると、OutlookはRTFではなく「HTML」を強調表示して表示します。

誰かがこの問題に遭遇し、適切に解決しましたか?

ユーザーは送信済みアイテムフォルダにメッセージのコピーを持っている必要があるため、SMTPなどを介して送信することはできません。Outlookオブジェクトモデルを使用することはできません。これは、ユーザーがOutlookをインストールしている必要があり、MAPI互換のクライアントが必要ないためです。

4

3 に答える 3

5

私も同様の問題を抱えていました。

「1回限りのアドレス指定」セクションに興味深い情報が含まれているKB記事を見つけました。アドレスが[SMTP:SMTPアドレス]の形式で提供されると、電子メールは常にリッチテキスト形式で送信されます。

私にとっての修正は、MapiRecipDescオブジェクトの「Address」プロパティをまったく設定しないことでした。代わりに、Nameプロパティにアドレスを入力します。開いたダイアログは最初はアドレスを解決しませんが、送信する直前に解決し、RTFで送信されません。

私はそれをアドレスと一緒に受信者の名前で動作させることさえしました:

MapiRecipDesc.Name = "Firstname Lastname <mail@address.com>";
于 2012-10-04T13:49:40.880 に答える
1

私も、jclEmail.Sendによって呼び出されるjclMapi.JclEmail、InternalSendOrSaveルーチンのWinMail.Datファイルとしてすべての添付ファイルを取得していました。

私がしたことは、本質的にjtmntの答えに従い、変更することでした。

 RealAddresses[I] := FAddress; //do not add the Recipients.AddressesType +     AddressTypeDelimiter

そして私は変更しました:

lpszName := PAnsiChar('"' + AnsiString(RealNames[I])+'" <' +
            AnsiString(RealAddresses[I]) + '>');
lpszAddress := '';

これは、WinMail.datファイルを添付ファイルとして送信するのではなく、目的のPDFとMP3を送信するように機能しました。

私が本当に報告したいのは、Windows7では正常に機能していてWindows8では機能しなくなったOLEルーチンを使用していたことです。したがって、MAPIソリューションを調べ始めましたが、Winmail.datファイルが添付されているとこの問題が見つかりました。OLE(Outlookを使用)がWindows8で正しく機能しない場合のこの問題についての言及は見つかりませんでした。

(両方:

OutlookApp := GetActiveOleObject('Outlook.Application') and  
OutlookApp := CreateOleObject('Outlook.Application') 

Windows 8では機能しなくなりましたが、Windows 7では引き続き正常に機能しました。)

解決してくれてありがとう。あなたはそれをjclMapiコードに適用する方法とWin8のOLEに関するこの問題を知りたいと思うかもしれません。

于 2014-05-27T10:26:08.460 に答える
1

Outlookの動作に興味があるのは、受信者のドメイン名の長さが重要であるということです。電子メールアドレスドメインが12文字以上の場合(正確に制限が何であるかはわかりません)、問題のあるTNEFコーディングに直面します。
だから:a@hutsfluts.nlがうまくいかない。abacadabraandmore@hf.nlは、プレーンテキストエンコーディングになります。これは仕様によるものではないと思います…。

上記の解決策:受信者の電子メールアドレスをMapiRecipDescのlpszNameに入れ、lpszAddressが空の文字列(nullではない!)を指すようにすることで問題が解決します。理由を聞かないでください。なぜこれがエンコーディングに影響を与えるのかわかりません。

于 2015-06-19T12:58:18.137 に答える