mailkit----163邮箱登录拉取邮件的坑
在使用mailkit的ImapClient拉取邮件的时候,如果我们使用的是网易的邮箱(如:163、126等),如果你没有按照网易的设置去打开IMAP协议,那么将无法登录邮箱,并且发送一封使用不安全的客户端登录邮箱的邮件到你的邮箱,但是使用网易自己的邮箱大师的话,可以轻易的登录,并不会提示。
这其实是网易故意设置的障碍,其实是网易需要我们表明我们登录的客户端身份,具体的原理和命令参照我上一篇文章查看IMAP ID COMMAND命令,下面只具体说说mailkit如何使用到这条命令,其实mailkit是提供这个命令的,足见mailkit的强大。
ImapClient client = new ImapClient(); string account = "xxxxxx@163.com";
string passWord = "xxxxxx"; try
{
client.Connect("imap.163.com", , true);
}
catch (ImapCommandException ex)
{
Console.WriteLine($"---------尝试连接时出错:{0}------------" + ex.Message);
}
catch (ImapProtocolException ex)
{
Console.WriteLine($"---------尝试连接时的协议错误:{0}------------" + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine($"---------服务器连接错误:{0}------------" + ex.Message);
} try
{
client.Authenticate(account, passWord);
}
catch (AuthenticationException ex)
{
Console.WriteLine($"---------无效的用户名或密码:{0}------------" + ex.Message);
}
catch (ImapCommandException ex)
{
Console.WriteLine($"---------尝试验证错误:{0}------------" + ex.Message);
}
catch (ImapProtocolException ex)
{
Console.WriteLine($"---------尝试验证时的协议错误:{0}------------" + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine($"---------账户认证错误:{0}------------" + ex.Message);
} var clientImplementation = new ImapImplementation
{
Name = "xxxxe",
Version = "2.0"
};
var serverImplementation = imapClient.Identify(clientImplementation); List<IMailFolder> mailFolderList = imapClient.GetFolders(imapClient.PersonalNamespaces[]).ToList();
if (mailFolderList != null)
{
IMailFolder InBoxFolder = mailFolderList.Find(o => o.FullName.ToUpper() == "INBOX");
}
注意下面这段代码:
var clientImplementation = new ImapImplementation
{
Name = "sssssd",
Version = "2.0"
};
var serverImplementation = imapClient.Identify(clientImplementation);
这句代码在登录完后需要执行,不然无法拉取文件夹。
mailkit还提供查询是否支持命令的语句,如果你不知道邮箱是否支持这个命令可以使用下面的函数来判断:
private static bool HasImapCapabilitiesId(ImapCapabilities sourceFlag, ImapCapabilities targetFlag)
{
return ((sourceFlag | targetFlag) == sourceFlag);
}
如上面的例子:则可以这样写:
//判断是否 添加ID COMMOND命令
if (HasImapCapabilitiesId(imapClient.Capabilities, ImapCapabilities.Id))
{
var clientImplementation = new ImapImplementation
{
Name = "dddddd",
Version = "2.0"
};
var serverImplementation = imapClient.Identify(clientImplementation);
}
则判断是否支持ID COMMAND,
这个命令主要是表面客户端身份的,参数name和version的值,可以按照需要去写,如上面的163邮箱就没有要求,可以随便填,但有些邮件服务器是有要求的,只有服务器认可的客户端和版本才可以正常使用,服务器会拒绝非法客户端的,一切看邮件服务端的要求。
mailkit----163邮箱登录拉取邮件的坑的更多相关文章
- python登录网易163邮箱,爬取邮件
from common import MyRequests,LoggerUntil,handle_exception myRequests.update_headers({ 'Accept':'tex ...
- 自动化测试基础篇--Selenium简单的163邮箱登录实例
摘自https://www.cnblogs.com/sanzangTst/p/7472556.html 前面几篇内容一直讲解Selenium Python的基本使用方法.学习了什么是selenium: ...
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- Python selenium登录163邮箱示例
思路:使用python自带的unittest单元测试框架测试163邮箱登录成功的case import unittestfrom selenium import webdriverimport tim ...
- java邮件发送 qq与163邮箱互发和qq和163邮箱发送其他邮箱实例
研究了近一天的时间,通过查阅相关资料,终于对java发送邮件的机制,原理有了一点点的理解,希望能够帮到大家! 1.首先要向你的项目里导入1个jar包:mail-1.4.4.jar即可(实现qq和163 ...
- Thinkphp3.2版本使用163邮箱发(验证码)邮件
今天忽然想写一个用户修改密码的功能,又没有短信接口,只能选择用邮箱发送验证码啦,穷啊,没办法,哈哈,以下为正文. ------------------------------------------- ...
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
- Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)
Thinkphp5本身并没有实现发邮件的功能,至少据我所知. 本文利用网易邮箱作为发邮件的邮箱.作为发送邮件的前提是需要开启SMTP服务,打开网易邮件,点击设置按钮,如下图所示 勾选smtp服务 保存 ...
- 5、Selenium+Python自动登录163邮箱发送邮件
1.Selenium实现自动化,需要定位元素,以下查看163邮箱的登录元素 (1)登录(定位到登录框,登录框是一个iframe,如果没有定位到iframe,是无法定位到账号框与密码框) 定位到邮箱框( ...
随机推荐
- HTTPS和HTTP的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议http和https使用的是完全不同的连接方式用的 ...
- 【bzoj2770】YY的Treap 权值线段树
题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...
- flutter channel master
flutter可能是未来跨平台开发的又一技术框架,那么对于一个app,我们不可能完全用flutter来开发,那么就意味着我们需要在已有的Android和iOS代码中去集成flutter.目前这一技术还 ...
- 洛谷 P2114 [NOI2014]起床困难综合症 解题报告
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作 ...
- JAVA File方法各类文件复制操作
import java.io.*; public class AllFile { public static void main(String[] args) throws Exception {// ...
- 浅谈Visitor Pattern
第一步: 在介绍Visitor Pattern (访问者模式)之前,先简要介绍一下:双重分派. 在Visitor Pattern中双重分派是指:数据结构的每一个节点都可以接受一个访问者的调用(这句 ...
- 封装removeClass()
<div class="box haha xixi">123</div> <script> function removeClass(eleme ...
- ubuntu 解压
.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ---------------------- ...
- tcpreplay 缓存算法研究
一. 缓存算法 1.1 算法目的 流量拆分算法的运算会明显影响包的发送速率,为了提高发送速率, tcpreplay 使用了缓存机制,该部分代码也封装在tcpprep工具里,运行 tcpprep ( ...
- 自定义topo遇到的坑
错误:TypeError: __init__() got an unexpected keyword argument 'delay' 解决办法:在创建topo的地方加一个link=TCLink即可, ...