我使用ResourceWriter 生成了一个resource文件,里面包含了很多bmp图片.现在的问题是,我在我的另外一个工程里面使用到这个resource文件
如下代码可以生成我想要的图片:Assembly   myAssem   =   Assembly.GetEntryAssembly();  
   
  ResourceManager   rm   =   new   ResourceManager("resouce文件名",myAssem);    这样我就可以成功地得到这个图片了 (Image)rm.GetObject("MyLogo");   接下来就是我如何把这个图片以附件的方式添加到我的email里面呢?
一般的做法是使用文件名:
MailMessage msg = new MailMessage();
Attachment blue = new Attachment("pix\\blue.bmp");
msg.Attachments.Add(blue);
但是我通过resource文件生成的是object,不是文件,我应该如何解决?  谢谢

解决方案 »

  1.   

    初始化 Attachment 类的新实例。  重载列表 
    名称  说明  
    Attachment (String)  使用指定的内容字符串初始化 Attachment 类的新实例。  
    Attachment (Stream, ContentType)  使用指定的流和内容类型初始化 Attachment 类的新实例。  
    Attachment (Stream, String)  使用指定的流和名称初始化 Attachment 类的新实例。  
    Attachment (String, ContentType)  使用指定的内容字符串和 ContentType 初始化 Attachment 类的新实例。  
    Attachment (String, String)  使用指定的内容字符串和 MIME 类型信息初始化 Attachment 类的新实例。  
    Attachment (Stream, String, String)  使用指定的流、名称和 MIME 类型信息初始化 Attachment 类的新实例。  
      

  2.   

                Assembly myAssem = Assembly.GetEntryAssembly();
                ResourceManager rm = new ResourceManager(typeof(Resources));
                Image a = (Image)rm.GetObject("button101");
                
                Stream s = new MemoryStream();
                a.Save(s, ImageFormat.Gif);            MailMessage message = new MailMessage("[email protected]", "[email protected]");
                Attachment data = new Attachment(s, System.Net.Mime.MediaTypeNames.Application.Octet);
                message.Attachments.Add(data);把图片读到内存流里,然后放到附件中.
    LZ可以试下.
      

  3.   

    使用如下代码:
    Image img =(Image)rm.GetObject("MyLogo");  MemoryStream strm = new MemoryStream();
    img.Save(img, System.Drawing.Imaging.ImageFormat.Bmp);
    strm.Flush();Attachment blue = new Attachment(strm, "blue.bmp");
    msg.Attachments.Add(blue);
    这样的话,可以实现插入这个图片到email里面.但是这样生成的图片大小和原来不一样了,比如原来是650k,生成的附件图片只有646k.这样的话,图片在email里面也就不显示了.
    很奇怪!!但是我在debug的时候,去检查那个MemoryStream的长度却是650k.为什么添加到email里面就变化了呢?
      

  4.   

    ContentType 这个参数有很多值, 我看有压缩,还有不做处理的, 是否是这里的原因?
      

  5.   

    这句不对Attachment blue = new Attachment(strm, "blue.bmp"); ,这里的第二个参数不是文件名,是类型名,你用的函数是
    Attachment (Stream, String)  使用指定的流和名称初始化 Attachment 类的新实例。  
    这里的string不是随便一个文件名就可以的,不清楚不如直接换成如下的方法,
    Attachment (Stream, ContentType)  使用指定的流和内容类型初始化 Attachment 类的新实例。  
    仔细查查ContentType
      

  6.   

    ContentType 我都试过了,没有用,出来的size比原来的图片小.
      

  7.   

    代码如下:ResourceManager rm = new ResourceManager("test.ShareMed", myAssem);
    Image img = (Image)rm.GetObject("logo2");
    MemoryStream strm = new MemoryStream();
    img.Save(strm, System.Drawing.Imaging.ImageFormat.Jpeg);
    strm.Flush();System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Image.Jpeg);
    Attachment blue = new Attachment(strm, ct);
    blue.ContentDisposition.FileName = "logo2.JPG";msg.Attachments.Add(blue);
    就是不对  !!!ps,图片我用画笔工具重新save过了,选择的是jpg格式
      

  8.   

    Note: Attachments can only be created from files on the file system. System.Web.Mail does not support creating attachments directly from strings, byte arrays, streams, or from uploaded files. To directly create attachments from these types, use aspNetEmail, otherwise, the attachment contents must first be saved to the file system. check it here http://www.systemwebmail.com/faq/2.3.aspx