0

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

在尝试开发非常简单的网络邮件客户端时,我设法将脚本放在一起,从给定的服务器读取电子邮件。但是我正在努力寻找一种最简单的方法来在客户端上存档该电子邮件。

这是片段:

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>

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

我到处寻找可以找到的所有示例,但在任何地方都找不到有关在客户端上保留电子邮件的部分。

4

1 回答 1

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

于 2013-02-13T18:01:44.633 回答