使用webmail客户端归档POP3电子邮件

时间:2013-02-13 17:55:18

标签: c# asp.net email client webmail

请耐心等待这个问题。据我了解,如果电子邮件客户端从POP3服务器读取电子邮件,该电子邮件将从服务器中删除,并且仅存在于电子邮件客户端中。

在尝试开发非常简单的Web邮件客户端时,我已经设法整理了将从给定服务器读取电子邮件的脚本。但我很难找到一种最简单的方法来存档客户端上的电子邮件。

以下是摘录:

protected void Read_Emails()
{
    Pop3Client pop3Client;
    if (Session["Pop3Client"] == null)
    {
        pop3Client = new Pop3Client();
        pop3Client.Connect("mail.mail.com", 110, false);
        pop3Client.Authenticate("user@mail.com", "password");
        Session["Pop3Client"] = pop3Client;
    }
    else
    {
        pop3Client = (Pop3Client)Session["Pop3Client"];
    }
    int count = pop3Client.GetMessageCount();
    DataTable dtMessages = new DataTable();
    dtMessages.Columns.Add("Number");
    dtMessages.Columns.Add("MessageNumber");
    dtMessages.Columns.Add("From");
    dtMessages.Columns.Add("Subject");
    dtMessages.Columns.Add("DateSent");

    for (int i = 1; i <= count; i++)
    {
        try
        {
            Message message = pop3Client.GetMessage(i);
            dtMessages.Rows.Add();
            dtMessages.Rows[dtMessages.Rows.Count - 1]["Number"] = i;
            dtMessages.Rows[dtMessages.Rows.Count - 1]["From"] = message.Headers.From;
            dtMessages.Rows[dtMessages.Rows.Count - 1]["Subject"] = message.Headers.Subject;
            dtMessages.Rows[dtMessages.Rows.Count - 1]["DateSent"] = message.Headers.DateSent;
        }catch{}


    }
    gvEmails.DataSource = dtMessages;
    gvEmails.DataBind();


}

和ASP.NET部分

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="MA2._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">


        <asp:GridView ID="gvEmails" runat="server" AutoGenerateColumns = "false">
            <Columns>
            <asp:BoundField HeaderText = "#" DataField = "Number" />
            <asp:BoundField HeaderText = "From" DataField = "From" />
            <asp:HyperLinkField HeaderText = "Subject" DataNavigateUrlFields = "MessageNumber" DataNavigateUrlFormatString = "~/ShowMessageCS.aspx?MessageNumber={0}" DataTextField = "Subject" />
            <asp:BoundField HeaderText = "Date" DataField = "DateSent" />
            </Columns>
        </asp:GridView>

</asp:Content>

我的问题是如何在客户端保留收到的电子邮件? 使用数据库还是将它们存储在服务器上?

我到处寻找我能找到的所有例子,但我无处可寻找有关在客户端保留电子邮件的部分。

1 个答案:

答案 0 :(得分:0)

好的,所以我或多或少会尝试为你提供一个概念性的答案,因为你还没有尝试过任何东西......这取决于你对档案的定义。您可以将“数据”归档到数据库或xml文件。你正在做的是将电子邮件分解为对象,而你所要做的就是将这些对象存储在可以检索它们的地方。如果您没有数据库,请使用xml文件方法,考虑制作一系列xml文件,这样一个文件不会变得太大然后变慢。另一种方法是传统的Outlook档案,我只能在这里为您提供路径:

您能够创建/附加到.pst二进制文件的唯一方法是通过互操作服务。这里有一些链接可以帮助您入门:

http://www.codeproject.com/Questions/441470/how-to-read-emails-from-outlook-using-csharp

http://www.codeproject.com/Questions/461801/Open-Outlook-asp-net

http://forums.asp.net/t/1041781.aspx/1