問題 §
電子メール送信を行うと、送ったファイルがいつまでもロックされたままになっている。Webアプリはw3wp.exeが終了するまでロックされたままになっている。
原因 §
以下のようなコードで添付ファイルを指定していると、streamを閉じないで終わってしまうから。
var attachment = new MimePart()
{
ContentObject = new ContentObject(stream, ContentEncoding.Default),
};
間違った対策 §
ContentObject作成後にstreamを閉じる。streamが使用されるのは、その後。
正しい対策 §
電子メール送信後にstreamを全て閉じる。電子メール送信が終わるまで全ての添付ファイルのストリームを保存しなければならない。
感想 §
「死ぬほどめんどくさいバグであった」
「なぜめんどくさかったの?」
「当該ファイルを開く経路は限定してあったので、そこを調べるのは容易であったからだ。ただし、構造を意識せずにただ単に電子メールの添付ファイルにする時だけは別経路であった。そんなことは完全に忘れていた。盲点だった」