我想使用VBA无人值守地从Microsoft Access发送电子邮件.据我所知,内置方法"SendObject"使用MAPI意味着安全提示和Outlook配置之类的东西.由于我想使用任务计划程序启动不同的报告,我倾向于远离MAPI并且更喜欢其他一些解决方案.不是运输申请,而是内部申请.想法?
我正在创建一个应用程序来访问Exchange 2003服务器上托管的特定电子邮件帐户,并对找到的未读电子邮件执行一些操作.我真的不太了解MAPI是如何工作的,所以如果我错过了一些非常明显的东西,我也不会感到惊讶!我(不幸的是)我正在使用C#,我已经阅读了这可能导致的问题(我担心会产生影响,但是我的老板希望它能像这样完成......).
我很难找到关于如何连接到特定帐户的任何好消息!该应用程序将从someones笔记本电脑运行(比如说我的),因此打开时会有一个Outlook连接的默认帐户.所以:
是否可以从用户已拥有自己的帐户且可能已打开Outlook的计算机连接到另一个帐户?
如果有可能.我该怎么做呢?启动Outlook互操作对象时,应用程序会自动获取用户帐户并将当前用户设置为该帐户.我曾希望这种Logon()方法可以对此进行排序,但不是.即使只是运行
Outlook.Application olApp = new Outlook.Application();
Goes并将当前用户设置为标准帐户.
我希望我有意义(可能不是),但随时可以在评论中提出更详细的问题,我会尽快回复.就像我说的,我对MAPI和Exchange知之甚少,所以我正在努力解决我的问题.
我编写此代码以查找指定时间范围内指定类别的所有约会的总持续时间:
private readonly MAPIFolder _timing;
private int CalculateTotalDuration(DateTime start, DateTime end, string category)
{
string filter = String.Format(
"([Start] >= '{0:g}') AND ([End] <= '{1:g}') AND ([Categories] = '{2}')",
start, end, category);
return _timing.Items.Restrict(filter).Cast<AppointmentItem>().
Sum(appt => appt.Duration);
}
Run Code Online (Sandbox Code Playgroud)
当与俄语版本的Outlook一起使用时,此代码会导致以下异常(虽然我没有使用英文版测试它):
System.Runtime.InteropServices.COMException was unhandled
Message=??????? ???????.
Source=Microsoft Outlook
ErrorCode=-2147352567
StackTrace:
at Microsoft.Office.Interop.Outlook._Items.Restrict(String Filter)
...
Run Code Online (Sandbox Code Playgroud)
当我更换[Categories]使用[?????????],即
string filter = String.Format(
"([Start] >= '{0:g}') AND ([End] <= '{1:g}') AND ([?????????] = '{2}')",
start, end, category);
Run Code Online (Sandbox Code Playgroud)
它适用于俄语版的Outlook.但显然它不适用于其他语言.
如何以多语言方式按类别筛选Outlook约会?
我正在尝试使用此页面上的功能:http://www.outlookcode.com/d/code/getfolder.htm使用文件夹路径导航到文件夹.(我会把这个代码复制到这个问题的底部 - 我原样使用它,完全没有修改.)我需要使用它的原因是Outlook中的默认收件箱与我需要的收件箱不同积极点.通过右键单击并点击属性并查看位置,我知道相关收件箱的路径.
这是我使用的代码:
Set objOutlook = CreateObject("Outlook.Application", "localhost")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set Inbox = GetFolder("\\itadmin@email.org\inbox")
Debug.Print Inbox '<-- This fails
Set InboxItems = Inbox.Items '<-- This also fails
InboxItems.SetColumns ("SentOn")
Run Code Online (Sandbox Code Playgroud)
这将返回运行时错误91,对象变量或未设置块变量.
我不知道这是什么意思.如果你可以帮我解决这个错误,那就太棒了,如果你有办法让我完全避免这个问题,那也很棒.谢谢!
Public Function GetFolder(strFolderPath As String)As MAPIFolder
' strFolderPath needs to be something like
' "Public Folders\All Public Folders\Company\Sales" or
' "Personal Folders\Inbox\My Folder"
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim colFolders As Outlook.Folders
Dim objFolder As Outlook.MAPIFolder
Dim arrFolders() As …Run Code Online (Sandbox Code Playgroud) 我正在使用Windows Search API,它返回mapi URL.
如何找到包含URL数据的文件?例如,该消息来自PST文件的路径?
我如何以编程方式获取MAPI消息的内容或数据(即,而不是仅使用shell打开它).
从哪里可以下载MAPI33.dll.我从一个网站获得了链接http://www.mapi33.adexsolutions.com/但似乎这是不正确的.
我有一个用Delphi编写的联系人管理应用程序,它具有我10年前开发的"与Outlook同步"功能.现在,我将回过头来添加一些功能并修复一些错误.此同步功能使用Outlook对象模型开始,但它有一个名为"使用MAPI增强功能"的可选模式,它使用纯MAPI来加速查找更改的方式,并允许使用RTF同步注释而不是只是纯文本.
我想知道是否支持两个并行执行路径是一个好主意.
如果我使用所有MAPI,我相信我会避免一些安全提示,并且我会避免使用防病毒具有阻止我的应用程序连接到Outlook的"脚本阻止"功能的情况.但我相信,在不利方面,我的32位应用程序将无法使用MAPI连接64位Outlook 2010.我总是想知道MAPI的未来.
如果我坚持使用Outlook对象模型,我的32位应用程序是否能够连接到Outlook对象模型(因为它不在进程COM中)?如果是这样,这是保持我的Outlook对象模型执行路径到位的一个令人信服的理由.但如果没有,如果我的应用程序需要为x64编译,那么为什么不选择纯MAPI呢?
在Outlook 2010中,您可以创建联系人并将其添加到组.有没有办法获得这些群组及其中的联系人列表?以下是我访问联系人的方式:
var outlook = new Outlook.Application().GetNamespace("MAPI");
var folder = outlook.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
foreach (var curr in folder.Items.OfType<Outlook.ContactItem>())
{
...
}
Run Code Online (Sandbox Code Playgroud)
我不是指默认联系人文件夹,例如"联系人"和"建议的联系人".
我目前正在评估redemption将 MSG 文件转换为 EML 文件的库。
RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(msgFile);
msg.SaveAs(emlFile, rdoSaveAsType.olRFC822);
Run Code Online (Sandbox Code Playgroud)
到目前为止,与我针对“野生 MSG 文件语料库”测试过的其他所有内容相比,Redemption 在这里做得非常好。
然而,内部电子邮件地址存在问题。对于内部电子邮件地址,生成的 EML 文件personal仅包含地址的一部分,但不包含带有符号的真实电子邮件地址@。
在任何情况下,我都可以看到RDOMail的收件人对象包含SMTPAddress属性中的真实电子邮件地址。但是Address包含外部地址的“真实电子邮件地址”的属性有所不同,但类似于/O=EXAMPLE ORGANIZAION/OU=SOME GROUP/cn=Recipients/cn=FBarney内部地址的属性。
后者正是在生成的 EML 文件中缺少真实电子邮件地址的地址。
所以我试图覆盖这样的Address属性:
recipient.Address = recipient.SMTPAddress;
Run Code Online (Sandbox Code Playgroud)
但这对最后生成的 EML 文件没有任何影响。
如何在不丢失内部地址的真实电子邮件地址的情况下将 MSG 转换为 EML 并进行兑换?