请耐心等待这个问题。据我了解,如果电子邮件客户端从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>
我的问题是如何在客户端保留收到的电子邮件? 使用数据库还是将它们存储在服务器上?
我到处寻找我能找到的所有例子,但我无处可寻找有关在客户端保留电子邮件的部分。
答案 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