是否可以使用C#读取.PST文件?我想将此作为一个独立的应用程序,而不是作为Outlook插件(如果可能的话).
如果已经看到类似于提及MailNavigator的其他 SO 问题 ,但我希望在C#中以编程方式执行此操作.
我查看了Microsoft.Office.Interop.Outlook命名空间,但它似乎只适用于Outlook插件.LibPST似乎能够读取PST文件,但这是在C中(对不起Joel,我毕业前没有学过C).
任何帮助将不胜感激,谢谢!
编辑:
谢谢大家的回复!我接受了Matthew Ruston的回答作为答案,因为它最终导致我找到了我正在寻找的代码.这是我工作的一个简单示例(您需要添加对Microsoft.Office.Interop.Outlook的引用):
using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Outlook;
namespace PSTReader {
class Program {
static void Main () {
try {
IEnumerable<MailItem> mailItems = readPst(@"C:\temp\PST\Test.pst", "Test PST");
foreach (MailItem mailItem in mailItems) {
Console.WriteLine(mailItem.SenderName + " - " + mailItem.Subject);
}
} catch (System.Exception ex) {
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private static IEnumerable<MailItem> readPst(string pstFilePath, string pstName) {
List<MailItem> mailItems …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在Outlook窗口中打开新邮件的方法.
我需要以编程方式填写:from,to,subject,body information,但是保持这个新的邮件窗口打开,这样用户就可以验证内容/添加内容然后像普通的Outlook邮件一样发送.
发现:
Process.Start(String.Format(
"mailto:{0}?subject={1}&cc={2}&bcc={3}&body={4}",
address, subject, cc, bcc, body))
Run Code Online (Sandbox Code Playgroud)
但是没有"发件人"选项(我的用户有多个邮箱...)
有什么建议吗?
我正在使用它Microsoft.Office.Interop.Outlook.Application来生成电子邮件并在用户发送之前将其显示在屏幕上.应用程序是一个winform编码的应用C#中.NET Framework 3.5 SP1,它是Microsoft Outlook 2003.我使用以下代码:
public static void GenerateEmail(string emailTo, string ccTo, string subject, string body)
{
var objOutlook = new Application();
var mailItem = (MailItem)(objOutlook.CreateItem(OlItemType.olMailItem));
mailItem.To = emailTo;
mailItem.CC = ccTo;
mailItem.Subject = subject;
mailItem.HTMLBody = body;
mailItem.Display(mailItem);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如何在body生成的电子邮件中插入/添加正在使用该应用程序的用户的默认签名?
任何帮助赞赏.
我已编写此代码以查看Outlook邮箱中的未读项目,以下是代码:
Microsoft.Office.Interop.Outlook.Application app;
Microsoft.Office.Interop.Outlook.Items items;
Microsoft.Office.Interop.Outlook.NameSpace ns;
Microsoft.Office.Interop.Outlook.MAPIFolder inbox;
Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application();
app = application;
ns = application.Session;
inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
items = inbox.Items;
foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items)
{
if (mail.UnRead == true)
{
MessageBox.Show(mail.Subject.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
但在foreach循环中我收到此错误:
"无法将类型为'System .__ ComObject'的COM对象转换为接口类型'Microsoft.Office.Interop.Outlook.MailItem'.此操作失败,因为QueryInterface调用COM组件上的接口与IID'{00063034-0000- 0000-C000-000000000046}由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)).
你能帮我解决一下这个错误吗?
我已经为2003,2007和2010创建了一个Outlook加载项.这个加载项在2007年和2010年运行良好,但在2003年没有在我自己的开发机器之外的任何机器上正确加载.没有代码问题,因为加载行为中没有显示错误,并且它不是禁用的项目.加载项也未显示在COM加载项列表中.这个加载项在2003年之前已经有效.
这是奇怪的部分.我有一个早期时间点的加载项副本,因此不包含完整版本的某些功能.这个加载项在2003年正确加载.因此,作为我的测试的一部分,在VM上,我安装了早期版本(我称之为测试)和当前版本不起作用(我将其称为完整版) .在HKCU>软件>类> CLSID> [[guid]]> InprocServer32下的注册表中,对于测试版本,我将"Manifest Location"和"Manifest Name"键更改为完整版的值.然后我运行Outlook,完整版完美运行.
我无法看到完整的加载项在它自己的注册表设置下是如何工作的,但在测试版下工作正常,并且仅在Outlook 2003上工作.
这是基本信息:
我的开发设置是:
安装项目中包含以下预先要求:
任何提示都会非常感激,因为我已经花了将近4天的时间来解决这个问题!
TIA.
更新1:
根据@JoaoAngelo评论我检查了注册表设置,它们如下:
HKCU>软件>类> CLSID> {加载项CLSID}> InprocServer32
- (default) - '%CommonProgramFiles%\Microsoft Shared\VSTO\8.0\AddinLoader.dll'
- ManifestLocation - path to the containing folder
- ManifestName - the .dll.manifest file name
- ThreadingModel - 'Both'
Run Code Online (Sandbox Code Playgroud)
HKCU>软件>微软> Office> Outlook> Addins> MyAddin …
我在Outlook的Visual Basic(我们使用的是Outlook 2003和Exchange Server)中编写了一个消息处理函数来帮助我整理收到的电子邮件.
它对我有用,除非有时规则失败并且Outlook停用它.
然后我重新打开规则并在我的收件箱中手动运行以赶上.该规则自发地失败并且每天停用几次.
我想一劳永逸地解决这个问题.
在为Outlook 2013编写电子邮件时指定font-family的最佳方法是什么?我发现font-family在内联时会被忽略,如下所示:
<span style="font-family: Helvetica, Arial, sans-serif;">Text</span>
Run Code Online (Sandbox Code Playgroud)
我发现这有效:
<span><font face="Helvetica, Arial, sans-serif">Text</font></span>
Run Code Online (Sandbox Code Playgroud)
但是,这很痛苦,因为我必须在添加文本的任何地方添加标记.围绕几个元素包装标记将被忽略.有没有办法我可以设置一次字体而忘记它?
我试图创建在Microsoft Outlook中的约会使用下面的code.While运行这个程序(2003),另一人的压延机,该任命是得到保存在我的calender.But不会发送给收件人.
try
{
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook.AppointmentItem appt = null;
app = new Microsoft.Office.Interop.Outlook.Application();
appt = (Microsoft.Office.Interop.Outlook.AppointmentItem)app
.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem);
appt.Subject = "Meeting ";
appt.Body = "Test Appointment body";
appt.Location = "TBD";
appt.Start = Convert.ToDateTime("12/23/2009 05:00:00 PM");
appt.Recipients.Add("smuthumari@mycompany.com");
appt.End = Convert.ToDateTime("12/23/2009 6:00:00 PM");
appt.ReminderSet = true;
appt.ReminderMinutesBeforeStart = 15;
appt.Importance = Microsoft.Office.Interop.Outlook.OlImportance.olImportanceHigh;
appt.BusyStatus = Microsoft.Office.Interop.Outlook.OlBusyStatus.olBusy;
appt.Save();
appt.Send();
}
catch (COMException ex)
{
Response.Write(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?任何人都可以帮我解决这个问题吗?
我正在使用outloook 2003和visual studio 2008.我想开发一个将电子邮件发送到任何域的应用程序.但是当我尝试向gmail,hotmail等发送电子邮件时,我的代码失败了,实际上所有的消息都存储在C:\Inetpub\mailroot\Queue目录中.请帮我如何将电子邮件发送到gmail,hotmail a/c.
提前致谢
代码是
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add("sumitdawar@hotmail.com");
message.To.Add("sumitdawar@gmail.com");
message.Subject = "This is sample mail";
message.From = new System.Net.Mail.MailAddress("Sumit.Dhingra@niit.com");
message.Body = "this is the message body";
System.Net.Mail.SmtpClient sss = new System.Net.Mail.SmtpClient("HO-KKJ-MAIL.in.niit.com");
sss.UseDefaultCredentials = false;
sss.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
sss.Credentials = new System.Net.NetworkCredential("Sumit.Dhingrar", "password","domain");
Run Code Online (Sandbox Code Playgroud) 我和我的客户有一些问题.我已经构建了(未设计)一个电子邮件模板,供他们使用Create/Send.我已经使用了Create/Send中的设计测试服务,所有这些服务都按预期进行.但是,当客户端在Outlook 2003中查看电子邮件时,文本格式将丢失(请参阅屏幕抓取).
文档的头部中只有非常少的CSS,当然没有什么可以影响到内部完成的样式.
alt text http://citywest.bangtest.co.uk/stackoverflow/okay.png
alt text http://citywest.bangtest.co.uk/stackoverflow/bad.png
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Run Code Online (Sandbox Code Playgroud)
City West电子公告
<style type="text/css" media="screen">
* { font-family: Arial, san-serif; }
a {color:#000000;}
a img {border:none;}
h3 a { color: #BD2C16; }
.topbannercopy a {color:#ffffff;}
.unsub a {color: #555555; text-decoration:none;}
.unsub a:hover {text-decoration:underline;}
</style>
</head>
<body style="text-align: left;">
<table border="0" bgcolor="#ffffff" cellspacing="0" cellpadding="0" width="591" align="center" style="font-family: Arial, san-serif;">
<tr bgcolor="#e95c55">
<td colspan="4"><img src="img/top-trust.gif" alt="City West Housing Trust. e-Bulletin for …Run Code Online (Sandbox Code Playgroud) outlook-2003 ×10
c# ×7
outlook ×4
email ×2
html ×2
.net ×1
.net-3.5 ×1
.net-4.0 ×1
automation ×1
c#-2.0 ×1
css ×1
deployment ×1
email-client ×1
html-email ×1
mailitem ×1
outlook-2007 ×1
outlook-vba ×1
pst ×1
typeof ×1
vba ×1
vsto ×1
winforms ×1