将邮件从Outlook数据库存储到本地数据库

本文介绍了如何从Outlook Express数据库中获取邮件并存储到本地数据库中。首先,需要添加Outlook库的引用。接着,创建Windows应用程序,利用Form1类和按钮点击事件进行操作。邮件和附件分别存储在两个表中,邮件表的主键由fromID和Date组成。通过getOutlook()方法获取每个文件夹的邮件,然后将邮件数据和附件保存到数据库中,以便在网页或窗口应用中展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,

在这里,我将解释如何从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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值