【问题标题】:How to open outlook mail object as a draft email before sending?如何在发送前将 Outlook 邮件对象作为草稿电子邮件打开?
【发布时间】:2021-08-08 20:11:48
【问题描述】:
void send_reply(Outlook.MailItem item, HashSet<string> names)
    {
        Outlook.MailItem eMail = item.Reply();
        // want to open an email draft box for user to type in the email's content then return to the program here
        eMail.Display();
        foreach (string s in names)
        {
            eMail.To = s;
            //MessageBox.Show("this is the guy we are sending to " + item.To);
            eMail.Importance = Outlook.OlImportance.olImportanceHigh;
            ((Outlook._MailItem)eMail).Send();

        }
    }

想要回复给定的邮件,但只回复到名称中指定的电子邮件地址。我遇到的问题是,当我调用 eMail.Display() 时,它最多只显示半秒钟,然后草稿自动关闭,我向所有人发送一封空白回复电子邮件。

大家有什么建议吗?

【问题讨论】:

  • 我认为Display() 不会等待用户关闭窗口并突然继续执行代码。这就是为什么它被关闭并立即发送......
  • @Seididieci 有没有办法暂停执行直到用户关闭窗口?
  • 我从未使用过 Outlook 互操作,但您可以调查是否在某些用户交互(可能是关闭或发送按钮)上引发了事件并将您的逻辑移到那里...
  • 这里docs.microsoft.com/en-us/office/vba/api/Outlook.MailItem 似乎您可以获得发送和关闭事件,因此您可以尝试在那里添加“收件人”地址......当用户简单地“关闭”消息时撤消操作......

标签: c# outlook outlook-addin


【解决方案1】:

Display() 函数立即返回并使您发送的消息为空。

您可以通过将true 传递给函数来等待:

//...
  Outlook.MailItem eMail = item.Reply();
  eMail.Display(true); // <-- here
//...

这将使窗口成为模态并等待用户关闭它。

也许您还必须检查用户是否在没有文本的情况下关闭它或打算撤消操作...

为此,您可以检查消息状态或为Close(和Send)事件中的一个(或两者)注册一个处理程序。

【讨论】:

  • 这绝对是完美的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2014-09-03
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多