0

Outlook ボックスからすべてのメッセージを復元する必要があります。私は OpenPop オープン ソースを使用していますが、プレーン テキスト (値が null) を復元できません。メールをチェックするとプレーン テキストが存在するため、その理由がわかりません。HTMLバージョンを試してみると動作しますが、私のプロジェクトではこれは必要ありません。私を助けることができる人に感謝します。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using System.Net.Security;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;
using OpenPop.Mime;
using OpenPop.Pop3;

namespace EmailGmail
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string hostname = ***;
            int port = **;
            bool useSsl = true;
            string username = ***;
            string password = ***;

            List<OpenPop.Mime.Message> allaEmail = FetchAllMessages(hostname, port, useSsl, username, password);

            foreach (OpenPop.Mime.Message message in allaEmail)
            {
                OpenPop.Mime.MessagePart plainText = message.FindFirstPlainTextVersion();

                OpenPop.Mime.MessagePart html = message.FindFirstHtmlVersion();

            }
        }

        public static List<OpenPop.Mime.Message> FetchAllMessages(string hostname, int port, bool useSsl, string username, string password)
        {

            // The client disconnects from the server when being disposed
            using (Pop3Client client = new Pop3Client())
            {
                try
                {

                // Connect to the server
                client.Connect(hostname, port, useSsl);

                // Authenticate ourselves towards the server
                client.Authenticate(username, password);

                // Get the number of messages in the inbox
                int messageCount = client.GetMessageCount();

                // We want to download all messages
                List<OpenPop.Mime.Message> allMessages = new List<OpenPop.Mime.Message>(messageCount);

                // Messages are numbered in the interval: [1, messageCount]
                // Ergo: message numbers are 1-based.
                // Most servers give the latest message the highest number
                for (int i = messageCount; i > 0; i--)
                {
                    allMessages.Add(client.GetMessage(i));
                }

                // Now return the fetched messages
                return allMessages;
                }
                catch (Exception ex)
                {
                    return null;
                }

            }

        }
    }
}
4

2 に答える 2

1

私も同じ問題を抱えていました。本文の生データを選択し、メソッドを使用してそのバイトを読み取り可能なテキスト (文字列) に変換することで解決しました。

string Body = msgList[0].MessagePart.MessageParts[0].GetBodyAsText();

本文を取得すると、次のようになります。

msgList は、メッセージの配列を提供する FetchAllMe メッセージを呼び出した結果です。すべてのメッセージには、本文を含む MessagePart があります。本文テキストを取得するには、GetBodyAsText を使用します。GetBodyAsText は OpenPop ライブラリに既に含まれているため、私の方法ではありません。

これで疑問が解消されることを願っています。

于 2013-05-20T07:30:17.080 に答える
1
private void button7_Click(object sender, EventArgs e)
{
    List<OpenPop.Mime.Message> allaEmail = FetchAllMessages(...);

    StringBuilder builder = new StringBuilder();
    foreach(OpenPop.Mime.Message message in allaEmail)
    {
         OpenPop.Mime.MessagePart plainText = message.FindFirstPlainTextVersion();
         if(plainText != null)
         {
             // We found some plaintext!
             builder.Append(plainText.GetBodyAsText());
         } else
         {
             // Might include a part holding html instead
             OpenPop.Mime.MessagePart html = message.FindFirstHtmlVersion();
             if(html != null)
             {
                 // We found some html!
                 builder.Append(html.GetBodyAsText());
             }
         }
    }
    MessageBox.Show(builder.ToString());
}
于 2016-06-06T07:21:48.397 に答える