如何检查电子邮件是草稿、已发送还是已接收? (开边 11)

How to check if an email is a draft, sent or received? (Openedge 11)

我正在尝试创建一种方法来检查给定的电子邮件(来自 Outlook 本身或 MSG 文件)是已发送、已接收还是草稿电子邮件。我有点想比较它是否是在其他地方发送或接收的,并且工作正常,但它是确定它是否是草稿的部分,这就是问题所在。以下是我目前拥有的。

        L-EMAIL = Aspose.Email.Mapi.MapiMessage:FromFile(P-FILENAME).
        L-EMAIL-FLAG = Integer(L-EMAIL:Properties[Aspose.Email.Mapi.MapiPropertyTag:PR_MESSAGE_FLAGS]:ToString()).
        IF L-EMAIL-FLAG = 8 THEN
            L-EMAIL-STATUS = "DRAFT".
        ELSE
            IF L-EMAIL:Properties[Aspose.Email.Mapi.MapiPropertyTag:PR_RECEIVED_BY_ENTRYID] = ? THEN
                L-EMAIL-STATUS = "SENT".
            ELSE
                L-EMAIL-STATUS = "RECEIVED".

如果电子邮件没有附件,它可以正常工作,因为草稿电子邮件的值始终为 8,但是一旦添加附件,它的值就会变得很奇怪,所以我无法缩小范围(我得到了 24 和 242613 之类的值,而带有附件的已发送电子邮件的值为 49)。有谁知道判断它是否是草稿的更聪明的方法?

我从来没有在内部使用 Outlook 和 Progress 的良好体验...我在我的项目中设法完成的是使用 C# 创建自定义 DLL 并将其集成到我的系统中。

因此,我有一个字符可以触发我的 DLL 中的一些过程并发送和接收电子邮件(另存为 .msg),使我的进度代码更易于管理。

在你的情况下,你应该尝试这样的事情: Outlook MailItem: How to distinguish whether mail is incoming or outgoing?

我找到的解决方案是使用 C# DLL 使用互操作将电子邮件转换为 Outlook 邮件项目:

public bool IsDraft(string path)
    {
        Outlook.Application oApp = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
        Outlook.MailItem email = oApp.Session.OpenSharedItem(path) as Outlook.MailItem;
        bool isSent = email.Sent;
        Marshal.ReleaseComObject(email);
        email = null;
        return !isSent;
    }

我不得不释放电子邮件对象,这样后面的代码就不会中断。