2017年06月29日
川俣晶の縁側ソフトウェア技術雑記 total 2712 count

MailKitで電子メールを送信すると添付ファイルがロックされたままになる問題

Written By: 川俣 晶連絡先

問題 §

 電子メール送信を行うと、送ったファイルがいつまでもロックされたままになっている。Webアプリはw3wp.exeが終了するまでロックされたままになっている。

原因 §

 以下のようなコードで添付ファイルを指定していると、streamを閉じないで終わってしまうから。

                        var attachment = new MimePart()

                        {

                            ContentObject = new ContentObject(stream, ContentEncoding.Default),

                        };

間違った対策 §

 ContentObject作成後にstreamを閉じる。streamが使用されるのは、その後。

正しい対策 §

 電子メール送信後にstreamを全て閉じる。電子メール送信が終わるまで全ての添付ファイルのストリームを保存しなければならない。

感想 §

「死ぬほどめんどくさいバグであった」

「なぜめんどくさかったの?」

「当該ファイルを開く経路は限定してあったので、そこを調べるのは容易であったからだ。ただし、構造を意識せずにただ単に電子メールの添付ファイルにする時だけは別経路であった。そんなことは完全に忘れていた。盲点だった」