byte[] として表される Excel ドキュメントがあり、それを電子メールの添付ファイルとして送信したいと考えています。
添付ファイルを作成するのに少し問題があります。
次のコンストラクタを持つ Attachment を作成できます。
(Stream contentStream, ContentType contentType)
(Stream contentStream, string name)
(Stream contentStream, string name, string mediaType)
現時点での私の考えは、byte[] から MemoryStream を作成し、添付ファイルを作成するメソッドに渡すことです。
残念ながら、MemoryStream から目的のファイル名とコンテンツ タイプを取得する方法がわかりません。また、正しいコンテンツ タイプを提供する方法もわかりません。プレーンテキスト、Pdf、Rtf などのオプションがありますが、Excel ドキュメントに使用する必要があるものとしてすぐに思いつくものはありません。
私が見つけることができる最も近いのはMediaTypeNames.Application.Octetで、次のように述べています。
Octet メンバーは、添付ファイルに一般的なバイナリ データが含まれていることを指定します。
ただし、これを使用する場合でも、ストリームのプロパティとして渡すことができない限り、電子メールを送信するための私の方法は、Excel ドキュメントとしてバイト [] しか送信できません...
おそらく他の種類のストリームを使用できますか? または、必要な詳細を含む独自のタイプのストリームを作成する必要がありますか。
確かに誰かが以前にこのことをしたことがあり、Microsoft はこれをこのレベルまで考え抜いていたに違いありません....
どんな助けでも大歓迎です。
更新: ファイル名を文字列として受け取るコンストラクターを使用する回答には投票しないでください。ストリームを使用するものを使用して本当に助けが必要です...ファイルをディスクに書き込んで電子メールで送信し、すぐに削除する必要がないようにしたいです。それを可能にする方法があるので、できればそれを使いたいです。
ソリューションの更新
コンラッドは私が探していたものを見つけることができました! ありがとう山盛り!
提供されたリンクのコンテンツに何かが起こった場合に備えて、提案された解決策を文書化します.
このソリューションの功績はwww.systemnetmail.comにあります
static void AttachmentFromStream()
{
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");
//set the content
mail.Subject = "This is an email";
mail.Body = "this content is in the body";
//Get some binary data
byte[] data = GetData();
//save the data to a memory stream
MemoryStream ms = new MemoryStream(data);
//create the attachment from a stream. Be sure to name the data
//with a file and
//media type that is respective of the data
mail.Attachments.Add( new Attachment( ms, "example.txt", "text/plain" ));
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);
}
私の場合、ファイル名とファイル形式を文字列として取得するようにメソッドを変更する必要があることを意味します。Octet を使用してみます...しかし、失敗した場合は、公式の MIME タイプを渡します。
すべてを考慮すると、これは非常に明白な解決策です...しかし、私はそれを解決する助けに感謝しています...そして良いことは、この解決策が同じ問題を抱えている将来のプログラマーのために文書化されることです.
助けてくれてありがとう!