如何使用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循环内部。
我认为,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
中。因此,当下载完成时,他们会迷路。也许你应该把它搬到课堂上。。。