我需要程序启动Outlook,并将一个图片插入到邮件正文,然后让用户直接在Outlook上点击“发送”。为实现这个功能我发了好几个帖子了,如下:http://community.csdn.net/Expert/TopicView.asp?id=4863298
http://community.csdn.net/Expert/topic/4850/4850617.xml?temp=.9389612现在我已经实现得差不多了,下面是我的代码:Outlook::_ApplicationPtr m_pOutlookApplication = NULL;
Outlook::_MailItemPtr m_pOutlookMailItem = NULL;m_pOutlookApplication.CreateInstance("Outlook.Application");
m_pOutlookMailItem = m_pOutlookApplication->CreateItem(Outlook::olMailItem); Outlook::_NameSpacePtr pNameSpace = NULL;
pNameSpace = m_pOutlookApplication->GetNamespace(L"MAPI");_variant_t covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
pNameSpace->Logon(covOptional, covOptional, covOptional, covOptional);m_pOutlookMailItem->PutHTMLBody(_T("<HTML><img src=c:/Kaola.jpg height=200 width=200></HTML>"));
m_pOutlookMailItem->Display();代码可以把C:/Kaola.jpg添加到邮件正文,但是发送后对方看不到图片,估计Outlook在目标机器上也去找C:/Kaola.jpg这个图片文件了,当然找不到。然后我测试正确的情况:我先打开一个包含图片的htm页面,全选-〉复制,然后在Outlook里新建邮件,粘贴-〉发送。这样在目标机器上能看到正确的图片,我使用右键菜单view source察看邮件的html源代码,发现有这么一行:<img width=200 height=200 id="_x0000_i1025"src="cid:[email protected]">也就是说图片的源是:cid:image001.jpg
所以现在程序的问题就是如何创建正确的图片源,而不是在PutHTMLBody函数中制定硬盘上的文件。那位有过经验的,请指教,谢谢!如能解决,这几个帖子的分数都给他。

解决方案 »

  1.   

    我估计应该是先要把图片以OLE数据方式插入outlookmailitem,然后就会生成相应的CID,再之后你把这个CID插入到邮件内容中去就可以了。
    不过我这里没有装outlook,没法试。你看一下OUTLOOK的VBA帮助吧。
      

  2.   

    参考这个文章:To add an embedded image to an HTML message
    http://www.outlookcode.com/d/code/htmlimg.htm
      

  3.   

    一般来说的话,你也可以直接通过cid:文件名 的方式嵌入图片,比如:    Dim objMail As MailItem
        Set objMail = Application.CreateItem(olMailItem)
        objMail.Attachments.Add "C:\P1010244.JPG"
        objMail.HTMLBody = "<html><p>This is a picture.</p>" & _
                       "<img src='cid:P1010244.JPG' height=480 width=360>"
        objMail.Display上面的代码在VBA中运行通过