如何检查电子邮件是草稿、已发送还是已接收? (开边 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;
}
我不得不释放电子邮件对象,这样后面的代码就不会中断。
我正在尝试创建一种方法来检查给定的电子邮件(来自 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;
}
我不得不释放电子邮件对象,这样后面的代码就不会中断。