.Net 访问电子邮箱
访问电子邮件有两种协议
IMAP
- 客户端与服务端同步(包括阅读、标记、移动、删除等操作) 本质是从邮件服务读取邮件信息,而不是将其下载至本地客户端进行存储
- 仅在单击邮件时下载邮件 不会自动下载附件 相较于pop可以更快的检查邮件
- 删除 仅是将其标记为“已删除”,并在收件箱中隐藏;也可以通过设置在服务器、客户端中真正删除
- 实现代码
using System;
using MailKit.Net.Imap;
using MailKit;
using MimeKit;
// IMAP服务器地址
string imapServer = "imap.email.com";
// IMAP服务器端口号
int imapPort = 993;
// 邮箱账号
string email = "your@email.com";
// 邮箱密码
string password = "yourpassword";
// 创建IMAP客户端
using (var client = new ImapClient())
{
// 连接IMAP服务器
client.Connect(imapServer, imapPort, true);
// 登录邮箱
client.Authenticate(email, password);
// 获取收件箱
var inbox = client.Inbox;
// 打开收件箱
inbox.Open(FolderAccess.ReadOnly);
// 订阅收件箱更新事件
inbox.CountChanged += Inbox_CountChanged;
Console.WriteLine("已经订阅邮件更新事件。");
Console.ReadLine();
// 取消订阅
inbox.CountChanged -= Inbox_CountChanged;
// 断开连接
client.Disconnect(true);
}
// 收件箱更新事件处理函数
private static void Inbox_CountChanged(object sender, EventArgs e)
{
var inbox = (ImapFolder)sender;
Console.WriteLine("新邮件到达,当前共有 {0} 封邮件。", inbox.Count);
// 获取邮件数量
int count = inbox.Count;
// 循环获取每封邮件
for (int i = 0; i < count; i++)
{
var message = inbox.GetMessage(i);
Console.WriteLine("主题:" + message.Subject);
Console.WriteLine("发送人:" + message.From.DisplayName);
Console.WriteLine("时间:" + message.Date);
Console.WriteLine("内容:" + message.TextBody);
Console.WriteLine("---------------------------------------");
}
}
POP
- 工作原理是从邮件服务下载所有新邮件包括附件 至客户端电脑上 并将其从邮件服务器中进行删除 【所以 同一封邮件 只会被一台计算机客户端进行查看、操作 无法被第二台客户端获取到】 已发送的邮件也只存储在本地客户端 不会上传到邮件服务器上
- 删除 真正删除 无法恢复
- 代码
csharp
using System.Net.Mail;
using System.Net;
// POP3服务器地址
string popServer = "pop.email.com";
// POP3服务器端口号
int popPort = 995;
// 邮箱账号
string email = "your@email.com";
// 邮箱密码
string password = "yourpassword";
// 创建POP3客户端
using (var client = new Pop3Client())
{
// 连接POP3服务器
client.Connect(popServer, popPort, true);
// 登录邮箱
client.Authenticate(email, password);
// 获取邮件数量
int count = client.GetMessageCount();
// 循环获取每封邮件
for (int i = 1; i <= count; i++)
{
var message = client.GetMessage(i);
Console.WriteLine("主题:" + message.Subject);
Console.WriteLine("发送人:" + message.From.DisplayName);
Console.WriteLine("时间:" + message.Date);
Console.WriteLine("内容:" + message.Body);
Console.WriteLine("---------------------------------------");
}
// 断开连接
client.Disconnect(true);
}
两者区别
- IMAP是双向通信 可以订阅邮箱更新;POP是单向 仅支持获取简单-已读/未读状态
- IMAP 支持多台设备同时登录查看同一附件 但是POP仅支持一台设备查看某个邮件
- IMAP可以做到逻辑删除 可恢复;POP是物理删除 且服务器端无备份 不可恢复
- IMAP更灵活方便,POP3更适合独享邮件的场景