0

この質問にはしばらくお待ちください。電子メールクライアントが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>

私の質問は、受信した電子メールをクライアントに保存する方法ですか?データベースを使用しますか、それともサーバーにファイルとして保存しますか?

私はどこでも見つけられるすべての例を探していましたが、クライアントでの電子メールの保存に関する部分を見つけることができませんでした。

4

1 に答える 1

0

さて、あなたはまだ何も試していませんので、多かれ少なかれ概念的な答えを提供しようとします...そしてそれはあなたのアーカイブの定義に依存します。「データ」をデータベース、または通常はxmlファイルにアーカイブできます。あなたがしているのは、電子メールをオブジェクトに分割することです。あなたがしなければならないのは、それらのオブジェクトを取得できる場所に保存することだけです。データベースがない場合は、xmlファイルのアプローチを使用し、一連のxmlファイルを作成することを検討してください。そうすることで、1つが大きくなりすぎて遅くならないようにします。もう1つのアプローチは、従来の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 に答える