【问题标题】:How to paste image from clipboard to Outlook email Body?如何将剪贴板中的图像粘贴到 Outlook 电子邮件正文?
【发布时间】:2017-11-04 07:03:30
【问题描述】:

这是我的情况。 我制作了一个应用程序 Windows 表单,它根据用户的操作(按钮/切换/文本框/等)编辑 Excel 工作表。

一旦编辑完成,就会生成新的 Excel 文件。

然后我的程序会选择一系列单元格并复制它。 它进入剪贴板。

我已经进行了多次测试(if(){}else{} / 保存到 .jpg / 等),并且所有内容都检查为 true。

我不想附加我的图像。 我不想保存它,即使是暂时的,然后通过保存的 .jpg 文件将其粘贴到正文中。 我“只是”想在我的 Outlook 电子邮件正文中添加一个 Ctrl+V。

这是我从剪贴板获取图像的方法(“MessageBody”在顶部声明为公共字符串,以便我可以通过不同区域调用它):

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 电子邮件项目(显示:true),然后只需单击“发送”就可以了。

我的 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

但我不明白如果我成功检索到剪贴板图像,为什么我会通过检查器(我对此一无所知)。

【问题讨论】:

  • 我试过用这个:|newMail.Attachments.Add(@"E:\c#\Project#XX\Resources\bitmap1.jpg, Outlook.OlAttachmentType.olEmbeddeditem, 1, Type.Missing); 并且消息是空的,带有一个附件,而在 MSDN 源中指定它将附件放在正文的顶部.我不明白。

标签: c# excel email outlook


【解决方案1】:

我找到了一种方法,将本地保存文件中的附件添加到邮件中,并使用 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

而且它有效。

但是,我真的不喜欢在我的代码中包含 url,还有其他方法吗?

而且,看起来我在“imagecid”字符串中输入的任何内容都没有任何变化。

我正在努力理解我对代码做了什么,而不是让它按原样工作。

看起来我需要 Office 的一些授权才能通过应用程序工作?尤其是当我想将图像粘贴到正文中时(其中可以包含像素数据以外的其他内容)。

如果我不需要 VB 脚本的这种自动化,我想,那是因为我必须“物理/人工”按下 Outlook 中的“发送邮件”按钮?

还有其他可能吗?尽管我仍在使用文件粘贴到我的身体中,但我不能以编程方式制作 Ctrl+C Ctrl+V 吗? :(

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 2019-02-04
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    相关资源
    最近更新 更多