我正在开发一个 Outlook 加载项,它可以以两种方式之一工作,具体取决于用户的选择 - 它可以处理选定的电子邮件,或者处理选定文件夹中的所有电子邮件。我已经让第一部分工作了,但第二部分给我带来了麻烦,可能是因为我只是错误地调整了第一部分的代码。我相信问题归根结底是在 C# Outlook 加载项中正确获取当前选定的文件夹。顺便说一句,我正在使用 .NET 3.5 和 Outlook 2007。
首先,电子邮件代码 - 如果用户在收件箱中选择一封或多封电子邮件,并使用“选定的电子邮件”选项运行我的加载项,则会运行以下代码(并且工作正常!):
public static void processSelectedEmails(Outlook.Explorer explorer)
{
//Run through every selected email
for (int i = 1; i <= explorer.Selection.Count; i++)
//alternatively, foreach (Object selectedObject in explorer.Selection)
{
Object selectedObject = explorer.Selection[i];
if (!(selectedObject is Outlook.Folder))
{
string errorMessage = "At least one of the items you have selected is not an email.";
//Code for displaying the error
return;
}
else
Outlook.MailItem email = (selectedObject …Run Code Online (Sandbox Code Playgroud) 我正在使用 Visual Studio 2008 (.Net 3.5) 创建一个要在 Outlook 2010 中使用的插件。我定义了两条单独的丝带。其中一个用于创建附件的上下文菜单,另一个用于向 TabReadMessage 添加按钮。
我对如何加载它们感到困惑。我在 ThisAddIn.vb 中有一个函数,它不可能执行我想要的操作 - 加载两个功能区:
Protected Overrides Function CreateRibbonExtensibilityObject() As _
Microsoft.Office.Core.IRibbonExtensibility
Return New RibbonAttachAttachmentToPO()
Return New RibbonOutlook14ReadMail()
End Function
Run Code Online (Sandbox Code Playgroud)
这个问题的最佳解决方案是什么?
我想创建 Outlook 2010 的加载项以将所选邮件的 Message-Id 标头发送到我的应用程序,如何访问 Outlook 2010 邮件项目中的 Message-ID 标头?
我正在开发 Outlook 插件,它将与共享邮箱一起使用。目前,Office 加载项不适用于代表场景,但 MS 已发布支持这些场景的预览版。
https://learn.microsoft.com/en-us/office/dev/add-ins/reference/manifest/supportssharedfolders
我的问题是因为manifest.xml有预览元素;我无法在outlook.office365.com下面上传它my add-ins。我收到以下错误。
This app can't be installed. The manifest file doesn't conform to the schema definition. The element 'DesktopFormFactor' in namespace 'http://schemas.microsoft.com/office/mailappversionoverrides/1.1' has invalid child element 'SupportsSharedFolders' in namespace 'http://schemas.microsoft.com/office/mailappversionoverrides/1.1'. List of possible elements expected: 'ExtensionPoint' in namespace 'http://schemas.microsoft.com/office/mailappversionoverrides/1.1'... The element 'DesktopFormFactor' in namespace 'http://schemas.microsoft.com/office/mailappversionoverrides/1.1' has invalid child element 'SupportsSharedFolders' in namespace 'http://schemas.microsoft.com/office/mailappversionoverrides/1.1'. List of possible elements expected: 'ExtensionPoint' in namespace 'http://schemas.microsoft.com/office/mailappversionoverrides/1.1'.
任何人都知道任何其他方法来为用户部署加载项,甚至测试它而无需上传 xml 文件吗?
提前致谢。
我的manifest.xml 文件的副本位于此处。
<?xml …Run Code Online (Sandbox Code Playgroud) office-addins outlook-addin yeoman-generator outlook-web-addins
Marshal.ReleaseComObject在 Outlook 中与 MailItems 交互时使用的重要性是什么?
我参考了在https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in-for-outlook?view创建 C# VSTO Outlook 插件的演练 =vs-2019
他们有一个修改现有选定邮件项目主题和正文的示例。
void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
mailItem.Subject = "This text was added by using code";
mailItem.Body = "This text was added by using code";
}
}
}
Run Code Online (Sandbox Code Playgroud)
该示例结束时没有提及使用 释放邮件项目对象Marshal.ReleaseComObject。
但在https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.releasecomobject?view=netframework-4.8的 .Net API 参考中,他们提到:
您应该使用此方法及时或在必须以特定顺序释放对象时释放包含对资源的引用的基础 COM 对象。
因此,如果我们未能在我们引用的 MailItem 上使用 Marshal.ReleaseComObject,显然会有一些后果?
是否存在不使用 Marshal.ReleaseComObject 会导致问题的特定用例?
谢谢
但无论我做什么,我的自定义选项卡都不会显示。这是我尝试过的事情的列表:
有人有什么想法吗?
我正在使用 Visual Studio 2019 和目标 .NET Framework 4.7.2,并尝试为 Outlook 365 创建一个插件(如果有帮助的话)
我有一个问题,我们需要从Embarcadero Delphi 2010控制Outlook.
我们今天使用了一些第三方组件来打开邮件发送窗口,这工作了一些时间.但现在它似乎在较新的Outlook版本上失败了.
是否有任何组件专门用于控制Delphi的Outlook,或者是否有任何MAPI客户端可以作为更好的替代品.
我们需要做的基本上是:1.在Outlook中启动新消息(发送收件人作为参数)2.接收发送的消息,以便我们可以存储它3.将消息从outlook拖放到我们的应用程序.
如果最终用户不使用outlook,那么正常MAPI就足以作为替换.
我在哪里可以找到一个很好的组件来为我做这样的工作?
任何人都可以给我一些很好的参考或教程链接来开发visual studio的插件.
在VSTO Outlook 2013插件中,我使用此方法来获取发件人的电子邮件地址:
Inspector currentObject = Globals.ThisAddIn.Application.ActiveInspector();
Object currentItem = currentObject.CurrentItem;
MailItem message = currentItem as MailItem;
string senderMailAddress = message.SenderEmailAddress;
Run Code Online (Sandbox Code Playgroud)
除了在某些情况下,这总是很好用。我得到的字符串是他们的电子邮件地址。但是,如果发件人与使用该插件的人位于同一域中,那么我会得到一个字符串,其中包含一堆随机字符,反斜杠和不带大写字母的域的电子邮件地址。
示例:如果发件人是person@example.com,并且使用插件的人也是what@example.com(同一域)
我会得到类似:7GXaaJD \ 3x5FDd \ PERSON的信息,而不是普通的电子邮件地址字符串。
我在文档中的某处读到(似乎无法再次找到它),当发件人位于同一域中时,它将返回此字符串而不是正常的电子邮件地址,我不确定为什么,但是如何获取即使它们都属于同一个域,也将其转换为普通的电子邮件地址。还是有另一种方法来解决此问题,因为对我而言,为什么它起作用才是有意义的。如果有人碰巧知道背后的原因,我很想听听。但这不是我的问题。
编辑:
找到了这个,https: //msdn.microsoft.com/zh-cn/library/office/ff869674.aspx引用MailItem.SenderEmailType属性。如果EX是同一组织中的交换服务器,则该选择。因此,我可以进行测试以查看是否会得到该字符串或正常的电子邮件字符串(如果类型为SMTP)。
该示例似乎可以回答我的问题,但是它在VB中,并且在将其转换为C#时遇到了一些麻烦。我看到我可以从MailItem对象获取AddressEntry,然后使用x = GetExchangeUser()再做一次x.PrimarySMTPAdress来获取地址。但是我不确定这是否正确。
如果有人拥有有关SenderEmailType的任何信息并与同一域中的交换用户打交道,那么任何建议都将大有帮助。
谢谢。
我创建了Outlook插件。我使用WIX工具集创建了安装程序,以在客户端计算机上安装插件。我已经在HKCU配置单元中的路径** Software \ Microsoft \ Office \ Outlook \ AddIns **中注册了VSTO文件
当前注册组件的代码如下
<Component Id="Registry_Manifest">
<RegistryValue Id="RegKey_Manifest" Root="HKCU"
Key="Software\Microsoft\Office\Outlook\AddIns\xyz"
Name="Manifest" Value="[INSTALLFOLDER]xyz.vsto|vstolocal"
Type="string" KeyPath="yes" />
</Component>
Run Code Online (Sandbox Code Playgroud)
当前代码工作正常,但仅为当前用户注册插件。同一台计算机上的其他用户无法查看它。
我必须知道如何为系统上的所有用户启用插件。
outlook-addin ×10
outlook ×6
vsto ×5
c# ×4
.net ×2
outlook-2010 ×2
delphi ×1
mapi ×1
winapi ×1
wix ×1