• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:添付ファイルはファイルでなければならないのか?)

添付ファイルは必要?イメージをファイルに書き出さずに送信可能?

このQ&Aのポイント
  • イメージデータをファイルに落とした後、それを添付ファイルとして送信する方法について質問です。
  • イメージをファイルに書き出す目的は添付ファイル化することですが、特殊な理由によりイメージをファイルとして存在させたくない場合、そのままイメージを送信することは可能でしょうか?
  • 質問の要点は、イメージデータをファイルに落とさずに送信できるかどうかについてです。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

暗号化して文字化してメールの文章として送信すれば添付ファイルではなくなります。 受け取る方では特殊な復号化が必要になりますが。

sato-may
質問者

お礼

お教え有難うございます でも、この方法では難しくて私には手が出ません ありがとうございました

その他の回答 (2)

回答No.3

AttachmentにはStreamを引数に取る物があります。これを使うことになります。 まず,(1)をストリームに出力するように変更します。 MemoryStream ms = new MemoryStream(); MyImage.Save(ms, ImageFormat.Bmp); ms.Seek(0L, SeekOrigin,Begin); // ストリームの先頭に戻る ref) MSDN: Image.Save メソッド (Stream, ImageFormat) (System.Drawing) http://msdn.microsoft.com/ja-jp/library/ms142147.aspx 次に,(2)をストリームを元に作るように変更します。 oMsg.Attachments.Add(new Attachment(ms, @"MyImage.bmp", null)); // 第2引数は ref) MSDN: Attachment コンストラクター (Stream, String, String) (System.Net.Mail) http://msdn.microsoft.com/ja-jp/library/5ds708xx.aspx これで,ファイルに保存する必要がなくなります。

sato-may
質問者

お礼

大変分かり易い説明で良く理解出来ました ありがとうございました 今後も宜しくご指導お願い申し上げます

回答No.2

// MemoryStreamを使うって話じゃないの? // ライブラリがキャッシュファイル作ってたら知らんよ? using System; using System.Net.Mail; using System.Net.Mime; using System.IO; using System.Drawing; using System.Text; namespace Q7057981 { class MainClass { public static void Main (string[] args) { try{ //でかいファイルで実験するの面倒。 System.Drawing.Bitmap MyImage = new System.Drawing.Bitmap(3, 3); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(MyImage); g.Clear (System.Drawing.Color.Red); System.IO.MemoryStream ms = new System.IO.MemoryStream(); MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(); smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtp.EnableSsl = true; smtp.Host = "smtp.example.com"; //実験はGmailを用いて行ったのだが、何故か465はダメらしい。 smtp.Port = 587; smtp.UseDefaultCredentials = false; smtp.Credentials = new System.Net.NetworkCredential("himajin100000@example.com","example"); System.Net.Mail.MailMessage oMsg = new System.Net.Mail.MailMessage("himajin100000@example.com", "himajin100000@example.com", "test", "test2"); //個人的な好み oMsg.SubjectEncoding = System.Text.Encoding.UTF8; oMsg.BodyEncoding = System.Text.Encoding.UTF8; // http://blogs.wankuma.com/youryella/archive/2010/01/07/184753.aspx ms.Seek (0,System.IO.SeekOrigin.Begin); System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(ms,new ContentType("image/gif")); attach.ContentDisposition.FileName = "hoge.gif"; oMsg.Attachments.Add(attach); smtp.Send(oMsg); oMsg.Dispose(); System.Console.WriteLine ("fin"); }catch(System.Exception e){ System.Console.WriteLine (e.ToString ()); } } } }

sato-may
質問者

お礼

ありがとうございました ご指導の通り MemoryStream を使用したら一発OKでした 本番プログラムでも利用させて頂きます ありがとうございます

関連するQ&A