LAN 内の PC 同士でメッセージをやり取りするソフトを作っている。
まず公開するようにしたが、次のバージョンでは、添付ファイルを扱えるようにしたい。
調べてみると、まずインターネットメールで添付ファイルに関わる仕様について書かれている記事をみつけた。
メールにかけられた呪文「MIME~前編」
さて、これを Delphi の Indy で実現するには、どうするか。調べてみると、
Indy9でメール送信
さすがに、添付ファイルは、ヘルプだけではわからず、サンプルをダウンロードしました。
添付ファイルを使う方法は、TIdAttachment.Create( TIdMessageParts, FileName ) のように書きます。 これは、なかなかに、意外な方法ですよね。
確かにこの仕様は意外……というか、こんな仕様でいいのか。
添付ファイルの名前も、ヘッダと同じようにエンコード する必要があるのですが、(中略) Create とした後に、再度、ファイル名を指定します。
なるほど、分かった。Indy のサンプルも参考にして、プログラムを書いてみた。
実行してみると、ファイルを添付したメッセージができた。そのメッセージを Outlook Express で開いてみると、ちゃんとファイルが添付されている。
そのメッセージを今度は読込してみる。すると、
添付ファイルがなくなった (涙) 。
どういうことかとソースを順に追っていくと、
TIdMessage の NoDecode プロパティを True にしていると、添付ファイルを MessageParts プロパティに登録するルーチンが実行されない。
う~ん。NoDecode を True にしてきたが、False にしないといけないか。
更に確認していくと、サーバ部分では NoEncode と NoDecode を True にしないとまずかった。クライアント部分では False にしても大丈夫。とりあえず、クライアント部分では False にした。