大家好,
在这里,我将解释如何从Outlook Express数据库获取邮件并将其存储在我们自己的数据库中(本地)
最初,您必须从添加参考添加参考Outlook库10.0或11.0。
如果找不到,请从此处下载dll并安装。
点击这里打开和Windows应用程序(或ASP.NET)
在Form1类代码(声明)中,
Microsoft.Office.Interop.Outlook.Application outlk = new Microsoft.Office.Interop.Outlook.ApplicationClass();
MailItem t;
string constr = "Data Source=.\\SQLEXPRESS;Initial Catalog=backstage;Integrated Security=True";
SqlDataAdapter da = new SqlDataAdapter("select * from mail", "Data Source=.\\SQLEXPRESS;Initial Catalog=backstage;Integrated Security=True");
SqlDataAdapter da2 = new SqlDataAdapter("select * from attachment", "Data Source=.\\SQLEXPRESS;Initial Catalog=backstage;Integrated Security=True");
DataSet ds = new DataSet();
DataSet ds2 = new DataSet();
然后,
在按钮中单击事件代码this,
private void button1_Click(object sender, EventArgs e)
{
getOutlook();
}
public void getOutlook()
{
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.UpdateCommand = cb.GetUpdateCommand();
SqlCommandBuilder cb2 = new SqlCommandBuilder(da2);
da2.UpdateCommand = cb2.GetUpdateCommand();
da.Fill(ds);
da2.Fill(ds2);
NameSpace NS = outlk.GetNamespace("MAPI");
MAPIFolder inboxFld = NS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
getFolderMail(inboxFld, "Inbox");
MAPIFolder junkFld = NS.GetDefaultFolder(OlDefaultFolders.olFolderJunk);
getFolderMail(junkFld, "Junk");
MAPIFolder sentFld = NS.GetDefaultFolder(OlDefaultFolders.olFolderSentMail);
getFolderMail(sentFld, "Sent");
MAPIFolder outboxFld = NS.GetDefaultFolder(OlDefaultFolders.olFolderOutbox);
getFolderMail(outboxFld, "Outbox");
MAPIFolder draftFld = NS.GetDefaultFolder(OlDefaultFolders.olFolderDrafts);
getFolderMail(draftFld, "Draft");
MAPIFolder deleteFld = NS.GetDefaultFolder(OlDefaultFolders.olFolderDeletedItems);
getFolderMail(deleteFld, "Delete");
}
public void getFolderMail(MAPIFolder folder, string foldername)
{
int mailID = 0;
for (int i = 1; i <= folder.Items.Count; i++)
{
try
{
DataRow dr = ds.Tables[0].NewRow();
t = (MailItem)folder.Items[i];
int size = t.Size / 1000;
string sizeinK = size.ToString() + "K";
dr["folder"] = foldername;
dr["fromName"] = t.SenderName;
dr["fromID"] = t.SenderEmailAddress;
dr["toName"] = t.ReceivedByName;
dr["toID"] = t.To;
dr["cc"] = t.CC;
dr["bcc"] = t.BCC;
dr["subject"] = t.Subject;
dr["body"] = t.Body;
dr["date"] = t.SentOn ;
dr["attachment"] = t.Attachments.Count;
dr["size"] = sizeinK;
dr["readStatus"] = t.UnRead;
ds.Tables [0].Rows.Add(dr);
da.Update(ds);
if (t.Attachments.Count > 0)
{
mailID = getMailID();
for (int j = 1; j <= t.Attachments.Count; j++)
{
DataRow dra = ds2.Tables[0].NewRow();
dra["mailID"] = mailID;
dra["Name"] = t.Attachments[j].DisplayName;
string filePath =Path.GetDirectoryName(System.Windows.Forms.Application.StartupPath ) +t.Attachments[j].FileName; // @"G:/prabu"
t.Attachments[j].SaveAsFile(filePath);
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
int length = (int)fs.Length;
byte[] content = new byte[length];
fs.Read(content, 0, length);
dra["contents"] = content;
dra["contentSize"] = length;
fs.Close();
FileInfo f = new FileInfo(filePath);
f.Delete();
ds2.Tables[0].Rows.Add(dra);
da2.Update(ds2);
}
}
}
catch (System .Exception ex)
{
}
}
}
public int getMailID()
{
int mailID = 0;
SqlDataAdapter da1 = new SqlDataAdapter("select max(mailID) as newMailID from mail", constr);
DataSet ds1 = new DataSet();
da1.Fill(ds1);
foreach (DataRow dr in ds1.Tables[0].Rows)
{
mailID =Convert .ToInt32 ( dr["newMailID"]);
}
return mailID;
}
好吧,让我解释一下为什么我编码上面的代码,
好的..每个人都知道我在Form1类中编码的内容。 多数民众赞成我创建类的实例,我要使用。
哦..我忘了讲我的餐桌设计了。 我创建了2个表。 一个用于邮件,另一个用于附件
邮件表的字段mailID作为Identity(AutoIncrement)字段,但不作为主键。 主键是(fromID和Date)的组合。 因此我们可以避免在第二次获取时存储邮件。
好,现在到代码
参见getOutlook()方法,我为每个文件夹创建实例,并通过调用方法“ getFolderMail(MAPIFolder文件夹,字符串文件夹名)”从中获取邮件
我通过了2个参数
1. MAPIFolder指示文件夹
2.文件夹名称字符串。 我将其作为一个字段存储在邮件表中,以便在显示时过滤邮件
我正在获取每个邮件的所有数据,并将其存储在数据库中。 之后,我正在获取max(mailID),仅此而已,是当前附件的mailID以存储附件(mailID用作获取附件的外键)
具有属性“ SaveAsFile(String Filepath)”的附件。 所以我将其保存在一个位置并转换为字节数组并存储到数据库中
现在,Outlook数据库中的邮件将在我们的表中。
因此,我们可以使用它来在我们的网页或窗口页面中显示。
Rajendra Prabu E,
程序员,
格罗夫有限公司
喀拉拉邦高知
印度。
From: https://bytes.com/topic/net/insights/652583-store-mails-outlook-database-local-database