バイト配列からメールの添付ファイルを追加するにはどうすればよいですか?


110

byte[]ファイルの内容を持っています。を使用して添付ファイルとして送信しSystem.Net.Mailます。

添付クラスに、ストリームを受け入れるオーバーロードが1つあることに気付きました。

Attachment att = new Attachment(Stream contentStream,string name);

byte[]この過負荷を通過させることは可能ですか?


ところで、添付ファイルの他の属性(CreationDateなど)を設定する場合は、att.ContentDispositionを使用することもできます。
ジョンギルマー

回答:


214

最も簡単な方法:

Attachment att = new Attachment(new MemoryStream(bytes), name);

非同期操作でファンキーなことをしない限り、気にしないでMemoryStreamおくと安全です。これにより、作業が楽になります。確かに将来的にそうなる保証はありませが、変更される可能性は低いと思います。添付ファイルを破棄するとそのストリームが破棄されるかどうかについては何も表示されません:(


2
良い点は、ファイルベースの添付ファイルを追加するときに、ファイルのハンドルを解放するために添付ファイルオブジェクトを破棄する必要があることです。確かにストリームはIO操作ではないため、GCで処理する必要がありますか?
JL。

FWIW、MonoのAttachmentクラスはDisposeコンテンツストリームを呼び出します。クイックテストケースから、.NET 4.0は同じことを行います。私はこれが事実であることを非常に面白がっていませんが、あります。
Matt Enright、

34

適切なMemoryStreamコンストラクターのオーバーロードを使用byte[]してMemoryStreamをに変換する必要があります。

Attachment att = new Attachment(new MemoryStream(myBytes), name);

Attachmentのコンストラクタのnameパラメータは、添付ファイル自体の名前ではなく、添付ファイルのコンテンツタイプの名前を指定することに注意してください。


4
nameパラメータは、コンテンツタイプではなく、ファイルの名前のようです。:発言を参照してくださいmsdn.microsoft.com/en-us/library/...
UğurAldanmaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.