标签: mapi

MAPI Windows 7 64位

我有一个遗留应用程序,用于创建带附件的电子邮件.代码使用MAPI接口来创建消息.这段代码已经工作了很长时间.

当应用程序在Windows 7 64位计算机上运行时,对MAPILogon的调用失败,并显示一般错误代码.

是否与MAPI和Win7 64不兼容?或者是否有一些我不知道的COM问题?

email com 64-bit mapi windows-7

4
推荐指数
1
解决办法
2万
查看次数

如何通过 PowerShell 从 Oulook 文件夹内的电子邮件中获取电子邮件地址?

我有一个 Outlook 文件夹,我们称之为LoremIpsum,其中有 1000 多个电子邮件草稿,我想对其进行枚举并通过 PowerShell 进行一些过滤。我可以使用以下脚本访问该文件夹并查看电子邮件:

Function HandleRemaining {
    [CmdletBinding()]
    Param()

    BEGIN {
        Clear-Host
    }

    PROCESS {
        $outlook = New-Object -ComObject outlook.application
        $mapi = $outlook.getnamespace("MAPI");

        $email = $mapi.Folders.Item(1).Folders.Item('LoremIpsum').Items(1)

        foreach ($recip in $email.Recipients) {
           $recip 
        }

        $email.To
        $email.CC
    }

    END {
    }
}

HandleRemaining
Run Code Online (Sandbox Code Playgroud)

问题是,既不$recip也不$email.To返回的电子邮件地址To或者CC是电子邮件,而不是我得到这个人的解析名称,例如:

Application           : Microsoft.Office.Interop.Outlook.ApplicationClass
Class                 : 4
Session               : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent                : System.__ComObject
Address               : /o=ExchangeLabs/ou=Exchange Administrative Group (ALPHA-NUMERIC)/cn=Recipients/cn=LONG-ALPHANUMERIC-HERE
AddressEntry          : System.__ComObject
AutoResponse          : 
DisplayType           : …
Run Code Online (Sandbox Code Playgroud)

email powershell mapi outlook

4
推荐指数
1
解决办法
1643
查看次数

获取contact.LastName时System.Runtime.InteropServices.COMException(0x800706BE)

我们的一些用户有时会遇到此异常(不是针对每个联系人):

System.Runtime.InteropServices.COMException (0x800706BE): 
   The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
   at Microsoft.Office.Interop.Outlook._ContactItem.get_LastName()
Run Code Online (Sandbox Code Playgroud)

当我们尝试获取联系人的姓氏(ContactItem类型)时会发生这种情况.

有谁知道问题是什么?

任何帮助,将不胜感激.谢谢!

.net c# mapi outlook comexception

3
推荐指数
1
解决办法
2万
查看次数

有没有一种简单的方法可以使用默认邮件客户端发送带有附件的电子邮件?

我的问题是我需要使用 C# 将文件附加到默认邮件客户端并将其显示给用户,就像使用mailto:.

我读过这篇关于这个主题的文章,但有几个问题:

  1. 我不想使用,mailto因为附件不受官方支持。
  2. 当使用 System.Net.Mail 和 SMTP 类(接受的答案中提供的代码)时,我不确定如何弹出消息供用户处理,而不仅仅是邮寄它。不确定这是否可能。
  3. 另外,当使用上面的解决方案(#2)时,我不确定如何获取用户的电子邮件服务器。
  4. 在下面提供的答案中,使用 MAPI32.DLL 的自定义包装器提供了代码项目解决方案。这里的问题是,文章作者为此解决方案指定的许可协议与我的项目要求相冲突。
  5. 由于时间限制,我无法编写自己的 MAPI 包装器

那么,有没有其他简单的方法来解决这个问题呢?是否有另一种简单的方法来弹出默认邮件客户端,其中附件预先填充有 .NET?也许是另一种 MAPI 包装器,但许可证非常宽松?

c# mapi email-client email-attachments

3
推荐指数
2
解决办法
1万
查看次数

什么是IPM.Note及其用途?

关于IPM,我有几个问题。如果有人能消除我的疑虑,那就太好了

1)什么是IPM.Note?那是一个日志文件吗?很少的详细信息,以便我能理解

2)当我键入IPM时,在Windows搜索中请注意,它显示了我所有在MS Outlook中的电子邮件。但是我看不到IPM这个词,请注意任何地方。我如何搜索IPM.Note,我如何获取所有email.msg文件

3)IPM是否有可能。注意将在Exchange Server 2007中,还是在本地计算机中?

4)我们将如何从IPM中获悉。请注意所有邮件或未读状态。

5)我们将如何从IPM获悉请注意我们已回复的所有邮件

提前致谢

mapi exchange-server exchange-server-2007 exchangewebservices

3
推荐指数
1
解决办法
3万
查看次数

通过Java(或C#)发送MAPI电子邮件

我有一个java程序,它发送一些当前使用SMTP的电子邮件.我有一个客户的公司网络被锁定,只允许通过MAPI1和MAPI4协议发送电子邮件.

浏览互联网后,我无法找到从Java程序发送MAPI电子邮件的任何示例.如果我们必须支付一些第三方组件,它不是世界末日,但免费显然更好:)

另一点需要补充的是,如果C#中的任务更容易,则可以在C#中创建发送电子邮件功能,并从Java主应用程序调用C#程序.

如果您需要更多信息,请告诉我.

c# java email mapi

3
推荐指数
1
解决办法
5407
查看次数

WIndows MAPI unicode问题

在我看来,MAPI(Windows Mail API)存在UTF8问题(或者我做错了).

代码示例:

HMODULE m_hLib = LoadLibraryA("MAPI32.DLL");
if (m_hLib == NULL)
    return SEND_MAIL_CANCELED;
LPMAPISENDMAIL SendMail;
SendMail = (LPMAPISENDMAIL) GetProcAddress(m_hLib, "MAPISendMail");
if (!SendMail)
    return;

MapiFileDesc fileDesc;
ZeroMemory(&fileDesc, sizeof(fileDesc));
fileDesc.nPosition = (ULONG) -1;
fileDesc.lpszPathName = (LPSTR) filePath.toUtf8();
fileDesc.lpszFileName = (LPSTR) fileName.toUtf8();

MapiRecipDesc recipientData;
ZeroMemory(&recipientData, sizeof(recipientData));
recipientData.lpszName = (LPSTR) recipient.toUtf8();
recipientData.ulRecipClass = MAPI_TO;

MapiMessage message;
ZeroMemory(&message, sizeof(message));
message.ulReserved = CP_UTF8;
message.lpszSubject = (LPSTR) title.toUtf8();
message.nFileCount = 1;
message.lpFiles = &fileDesc;
message.nRecipCount = 1;
message.lpRecips = &recipientData;

int nError = SendMail(0, NULL, &message, …
Run Code Online (Sandbox Code Playgroud)

windows unicode mapi winapi

3
推荐指数
1
解决办法
3324
查看次数

如何将COM对象作为IntPtr传递给P/Invoke方法?

目前正在使用Add-in Express开发Outlook加载项,我必须恢复一些纯MAPI函数来读取MAPI属性.

将此P/Invoke包装器添加到HrGetOneProp函数中:

[DllImport(@"MAPI32.DLL")]
static extern int HrGetOneProp(IntPtr pmp, uint ulPropTag, out IntPtr ppProp);
Run Code Online (Sandbox Code Playgroud)

我正在尝试将类型的Outlook附件对象IMAPIProp作为第一个参数传递给函数.

我目前失败的是如何将该对象"转换"为一个,IntPtr以便我可以将它作为函数的第一个参数传递给我.我试图使用,Marshal.StructureToPtr但显然这失败了一个例外,因为我没有传递结构,而只是一个非托管COM对象的引用.

所以我的问题是:

如何HrGetOneProp通过传递COM对象成功调用该方法?

.net c# mapi pinvoke outlook-addin

3
推荐指数
1
解决办法
1006
查看次数

为什么安装Office 2013在使用MAPI后会破坏WinForms RichTextBox?

我有三个程序 -

程序1:另外使用MAPI的Microsoft Outlook加载项.

程序2:使用MAPI 的独立exe

程序3:确实使用MAPI 的独立exe .

这三个程序都是用C#编写的,并且在某些时候使用WinForms RichTextBox.

在使用Office 365程序"1"和"3"的x64 Windows 8安装上没有问题,但只要使用以下堆栈构造RichTextBox控件,程序"2"就会崩溃:

System.IO.FileNotFoundException : C:\Program Files (x86)\Common Files\Microsoft Shared\Office15\riched20.dll
at System.Diagnostics.FileVersionInfo.GetVersionInfo(String fileName)
at System.Windows.Forms.RichTextBox.get_CreateParams()
at System.Windows.Forms.Control..ctor(Boolean autoInstallSyncContext)
at System.Windows.Forms.TextBoxBase..ctor()
at System.Windows.Forms.RichTextBox..ctor()
<snip>
Run Code Online (Sandbox Code Playgroud)

反汇编RichTextBox.get_CreateParams()显示它在'riched20.dll'上调用LoadLibrary,然后在加载的模块上调用GetModuleFileName.

对于程序2,Visual Studio告诉我它已从路径"C:\ Program Files\Microsoft Office 15\root\vfs\ProgramFilesCommonX86\Microsoft Shared\OFFICE15\RICHED20.DLL"加载了riched20.dll.

然后调用FileVersionInfo.GetVersionInfo()失败,因为它给出的路径不存在.

但是 - 程序1(outlook-addin)也从同一路径加载了riched20.dll - 但不知何故成功了!

程序2没有加载MAPI工作正常,它从C:\ Windows\syswow62加载riched20.dll

程序3在创建富文本框之前初始化MAPI,我知道某些MAPI函数会将当前工作目录更改为MAPI目录.这可能解释了为什么程序3加载office的riched20.dll并且程序2加载system32副本.

我怀疑程序1工作和程序3失败的区别在于路径中的vfs代表"虚拟文件系统",因此作为Outlook插件运行的程序1可以某种方式使用不具有的路径找到riched20.dll确实存在.

这三个程序都适用于以前版本的办公室.

作为一种解决方法,在初始化MAPI之前自己调用'LoadLibrary("riched20.dll")会使问题消失 - 但感觉就像一个可怕的黑客.

我也找不到有关此'vfs'文件路径的任何信息以及它在Internet上的含义.

对于我自己的教育,是否有人能够更好地解释这里发生了什么?

更新:我已经解决了与"点击运行"功能有关的问题.

.net mapi pinvoke richtextbox loadlibrary

3
推荐指数
1
解决办法
1426
查看次数

将Outlook REST API项目ID转换为MAPI EntryID

是否有正式支持的方法将项目ID从Outlook RESTAPI转换为MAPIEntryID?

我说的GET是邮箱端点上http的json响应中返回的项目的“ Id”字段,如下所示:

https://outlook.office365.com/api/v2.0/me/messages

Id字段包含base64值。当我将其转换为十六进制并将其PR_ENTRY_ID与相同项目的值进行比较时,例如使用MFCMAPI,我可以发现EntryID包含在Id字段的十六进制版本中。

有官方文档如何在id格式之间转换?

还是要调用的API?希望使用本地转换函数来避免其他REST往返。

感谢您的任何提示SvenC

rest mapi outlook json exchange-server

3
推荐指数
2
解决办法
799
查看次数