如何将剪贴板中的图像粘贴到Outlook电子邮件正文?
这是我的情况。 我做了一个应用程序Windows窗体,它根据用户在做什么(按钮/切换/文本框/等等)来编辑Excel工作表。如何将剪贴板中的图像粘贴到Outlook电子邮件正文?
完成编辑后,会生成新的Excel文件。
我的程序然后选择一个单元格范围,并复制它。 它去剪贴板。
我已经做了多个测试(如果(){}其他{} /保存到一个.jpg /等),并且一切都被检查为真。
我不想附加我的图片。 我不想保存它,即使是暂时的,然后通过保存的.jpg文件将其粘贴到主体中。 我“只是”想将Ctrl + V放入我的Outlook电子邮件正文中。
以下是我从我的剪贴板中获取图像(“消息体”在顶部作为公共字符串声明,这样我可以把它通过不同的地区):
public void ReadData()
{
Excel excel = new Excel(@"E:\c#\Project#XX\Resources\TEST.xlsx", 1);
excel.CopyRange(0, 0, 32, 12);
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap MessageBody = (iData.GetData(DataFormats.Bitmap, true) as Bitmap);
//pbx.Image = Image;
//image.Save(@"E:\c#\Project#XX\Resources\bitmap1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
//MessageBody = image;
}
excel.Close();
excel.Quit();
}
这里是我的消息大楼的代码:
private void flatCustButton013_Click(object sender, EventArgs e)
{
ReadData();
string MessageSubject = $"SomeSubject";
Outlook.MailItem newMail = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem);
newMail.Subject = MessageSubject;
newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
MessageHTMLBody = "<html><body>SomeText.<img src="cid:MessageBody"</img></body></html>";
newMail.HTMLBody = MessageHTMLBody;
//newMail.Body = System.Windows.Input.ApplicationCommands.Paste;
//newMail.Display(false);
//newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; ;
//newMail.HTMLBody = System.Windows.Input.ApplicationCommands.Paste;
//newMail.Body = MessageBody;
newMail.To = ToAddress;
newMail.SentOnBehalfOfName = FromAddress;
newMail.CC = CcAddress;
newMail.BCC = BccAddress;
//System.Windows.Input.ApplicationCommands.Paste;
//wrdEdit = application._Inspector.WordEditor
newMail.Send();
}
在以前的版本中,人们不得不打开一个Excel文件,手动更改单元格,然后单击一个按钮(在VB宏)。 它会打开一个Outlook电子邮件项目(显示:真的)与图片已经粘贴,然后只需点击“发送”,它是好的。
我的2.0版本旨在通过点击“发送//生成的Excel表//”按钮来自动完成此操作。
这里的宏代码在VB:
Sub SendMail()
Dim Messager As New Outlook.Application
Dim Mail As Outlook.MailItem
Dim WrdEdit
Range("my_range").CopyPicture
Set Messager = New Outlook.Application
Set Mail = Messager.CreateItem(olMailItem)
With Mail
.To = "some folks"
.CC = "some folks"
'.BCC = ""
.Subject = "SomeSubject"
.Display
.HTMLBody = Mess + .HTMLBody
End With
Set WrdEdit = Messager.ActiveInspector.WordEditor
WrdEdit.Application.Selection.Paste
Set WrdEdit = Nothing
Set Messager = Nothing
Set Mail = Nothing
ActiveWorkbook.Close SaveChanges:=False
End Sub
但我不知道为什么我会通过检查(这我不知道的知识),如果我在获取剪贴板中的图像正在取得成功。
我找到了一种方法,将附件从本地保存的文件添加到邮件中,并用HTML将其显示到正文中。
像这样:
newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
Outlook.Attachment attachment = newMail.Attachments.Add(@"path.imageformat", Outlook.OlAttachmentType.olEmbeddeditem, null, $"someTitle");
string imagecid = "whatever";
attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3613041E", imagecid);
newMail.HTMLBody = String.Format("<body><img src=\"cid:{0}\"></body>", imageCid);
的 “http://schemas.microsoft.com/mapi/proptag/0x3712001E” 代码是在这里:http://www.outlookcode.com/codedetail.aspx?id=1915。
它的工作原理。
但是,我真的不喜欢在我的代码中有urls,有没有另一种方式?
而且,它看起来像我放入我的'imagecid'字符串中的任何东西都没有改变。
我努力去理解我对代码做了什么,而不是让它按原样工作。
看起来我需要Office的某些授权来完成应用程序?特别是当我想将图像粘贴到一个正文(可以包含其他内容而不仅仅是像素数据)时。
如果我不需要这个VB脚本的自动化,我想,这是因为我不得不“在physicly/humanly”在Outlook按“发送邮件”按钮?
还有其他的可能吗?我仍然在使用一个文件粘贴在我的身体,我不能只编程一个Ctrl + C Ctrl + V? :(
我试图用这个: '| newMail.Attachments.Add(@“E:\ C#\#项目XX \资源\ bitmap1.jpg,Outlook.OlAttachmentType.olEmbeddeditem,1, Type.Missing);' 和消息发送空的身体,用附加的文件,而它是在MSDN来源指定它把附着于机身顶部 我不明白这一点。 。 –