性格悪い人が優勝

作ったイメージデータをファイルに落とし ------------(1)
そのファイルを添付ファイルとして送信しています ----(2)

Bitmap MyImage = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(MyImage);

ここから g に色々書込みます

MyImage.Save(@"MyImage.bmp", ImageFormat.Bmp); ----(1)

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.Host = "smtp.MyMail.com";

string MailSubject = "";
string MailBody = "";

MailMessage oMsg = new MailMessage("MyMail○○○@MyMail.com", "MyFreind□□□@FreindMail.com", MailSubject, MailBody);

oMsg.Attachments.Add(new Attachment(@"MyImage.bmp")); ----(2)

smtp.Send(oMsg); //メール送信

ご覧の通りイメージをファイルに書き出す目的は添付ファイル化する為だけです
ファイルに落とさずにイメージを送信することは可能でしょうか?

⇒ある特殊な理由によりイメージをファイルとして一瞬たりとも存在させたくないのです

A 回答 (3件)

暗号化して文字化してメールの文章として送信すれば添付ファイルではなくなります。


受け取る方では特殊な復号化が必要になりますが。
    • good
    • 0
この回答へのお礼

お教え有難うございます

でも、この方法では難しくて私には手が出ません

ありがとうございました

お礼日時:2011/10/09 23:50

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 …


次に,(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 …


これで,ファイルに保存する必要がなくなります。
    • good
    • 0
この回答へのお礼

大変分かり易い説明で良く理解出来ました

ありがとうございました

今後も宜しくご指導お願い申し上げます

お礼日時:2011/10/10 23:32

// 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/ …
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 ());
}
}
}
}
    • good
    • 0
この回答へのお礼

ありがとうございました

ご指導の通り MemoryStream を使用したら一発OKでした

本番プログラムでも利用させて頂きます

ありがとうございます

お礼日時:2011/10/10 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!