【问题标题】:Capture when an email is actually sent捕获实际发送电子邮件的时间
【发布时间】:2013-12-30 23:01:09
【问题描述】:

我正在开发一个捕获一些 Outlook 事件的应用程序。发送电子邮件时是否可以检测到事件。我的意思不是当用户点击“发送”按钮时,而是当电子邮件实际发送并且不再在发件箱中时。提前致谢。

更新

我设法在已发送邮件文件夹中捕获了Items.ItemAdd 事件。为了检查添加到已发送邮件文件夹的最后一封电子邮件是否是我感兴趣的邮件,我尝试了这个:

STDMETHODIMP CItemsEventListener::HandleItemAdd(CString p_date, CString p_time)
{
    CComPtr<Outlook::_Application> spApplication;
    CComPtr<Outlook::_NameSpace> spSession;
    CComPtr<Outlook::MAPIFolder> spSentMailsFolder;
    CComPtr<Outlook::_Items> pSentboxItems;
    spSentMailsFolder->get_Items(&pSentboxItems);
    CComPtr<Outlook::_MailItem> pSentMail;
    pSentMail = pSentboxItems->GetLast();
    //do staff
    return S_OK;
}`

我收到编译器错误:

error C2660: 'Outlook::_Items::GetLast' : the function doesn't take 0 arguments

我应该将哪个参数传递给函数?

【问题讨论】:

    标签: c++ outlook


    【解决方案1】:

    MailItem.Send 和 Application.ItemSend 事件在消息实际发送之前发生。

    要捕获实际发送消息的时间,请使用 Sent Items 文件夹上的 Items.ItemAdd 事件。

    【讨论】:

    • 感谢您的回答@Dimtry,我从未使用过 Outlook 项目事件和文件夹,对于其他事件,例如 SyncEvents 和应用程序事件,我正在实现 IDispatch 接口。同样的方法适用于 Items.ItemAdd 事件吗?我应该遵循哪些步骤。我搜索了示例,但只找到了 VB 示例或加载项示例,但我正在开发一个 c++ 单独的应用程序。
    • 如果您导入 Outlook 对象模型库,您应该获得公开事件的包装类。否则,您可以采用低级方式(QI 为 IConnectionPointerContainer 引发事件的对象,调用 IConnectionPointerContainer::FindConnectionPoint 传递适当的事件分配接口 GUID,调用 IConnectionPointer::Advise 传递将通过 IDispatch 接收事件通知的 IDispatch 接口的实现::调用)
    • 谢谢@Dimtry,像往常一样我的救命稻草:) 你对我帮助很大
    • re @Dmitry,我想将最后一项添加到 olFolderSentMail 文件夹中,请检查我的更新。
    • 为什么需要使用GetLast?有问题的项目将传递给您的 ItemAdd 事件处理程序。
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 2017-06-11
    • 2014-09-28
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2012-02-04
    相关资源
    最近更新 更多