如何使用OpenPop获取所有电子邮件,并在进度栏上显示邮件检索进度

本文关键字:显示 检索 获取 OpenPop 何使用 电子邮件 | 更新日期: 2023-09-27 18:28:45

这是我在项目中使用的OpenPop的链接:

OpenPop

这是一个包含示例的页面:

示例

这是我的密码。在form1设计器中,我添加了一个progressBar。

我想做的是获取服务器上的所有消息,并在progressBar中显示消息检索的进度。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Pop3_Emails
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.RunWorkerAsync();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            OpenPop.Pop3.Pop3Client PopClient = new OpenPop.Pop3.Pop3Client();
            PopClient.Connect("mail.bezeqint.net", 110, false);
            PopClient.Authenticate("meemail", "password",
                OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword);
            int messageCount = PopClient.GetMessageCount();
            List<Message> allMessages = new List<Message>(messageCount);
            for (int i = messageCount; i > 0; i--)
            {
                allMessages.Add(PopClient.GetMessage(i));
            }
            backgroundWorker1.ReportProgress(0,PopClient.GetMessageCount().ToString());
        }
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            label1.Text = e.UserState.ToString();
        }
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
        }
    }
}

第一个问题是我收到了两个错误:

allMessages.Add(PopClient.GetMessage(i));

错误1的最佳重载方法匹配'System.Collections.Generic.List.Add(System.Windows.Forms.Message)'有一些无效的参数

错误2参数1:无法从"OpenPop.Mime.Message"转换为"System.Windows.Forms.Message"

第二个问题是如何向进度条报告进度?不知怎的,从FOR循环内部。

如何使用OpenPop获取所有电子邮件,并在进度栏上显示邮件检索进度

我认为,AlexK解决了第一个问题。

第二个问题可以通过设置来解决:

backgroundWorker1.WorkerReportsProgress = true;

在for循环中,您可以通过以下方式计算和报告进度:

int nProgress = (messageCount - i) * 100 / messageCount;
backgroundWorker1.ReportProgress(0, nProgress);

所以现在,你可以展示你的进展:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    int nProgress = (int)e.UserState;
    label1.Text = nProgress.ToString();
    progressBar1.Value = nProgress;
}

但我也看到,您正在将所有下载的消息添加到本地变量List<Message> allMessages中。因此,当下载完成时,他们会迷路。也许你应该把它搬到课堂上。。。