C# · 12月 20, 2021

c# 利用IMap 收取163邮件

@H_419_0@最近我要做一个爬虫。这个爬虫需要如下几个步骤:

@H_419_0@1 填写注册内容(需要邮箱注册)

@H_4190@2 过拖拽验证码(geetest)

@H419_0@3 注册成功会给邮箱发一封确认邮箱

@H_419_0@4 点击确认邮箱中的链接 完成注册

@H_419_0@我这里就采用163邮箱注册。

@H_4190@邮箱协议有 pop3 和 imap 和 smtp

@H419_0@我试了pop3  不能够筛选邮件 例如筛选未读 和 发件人这2个条件 所以放弃用pop3

@H_419_0@imap协议是支持的。

@H_419_0@我就找了一个开源的第三方lib:S22.Imap

@H_419_0@用法很简单:

<div class=”cnblogs_code”>

uids = messages = Console.WriteLine(@H_<a href=”https://www.jb51.cc/tag/404/” target=”_blank” class=”keywords”>404</a>_23@<span style=”color: #800000;”&gt;”@H_<a href=”https://www.jb51.cc/tag/404/” target=”_blank” class=”keywords”>404</a>_23@<span style=”color: #800000;”&gt;We are connected!@H_<a href=”https://www.jb51.cc/tag/404/” target=”_blank” class=”keywords”>404</a>_23@<span style=”color: #800000;”&gt;”@H_<a href=”https://www.jb51.cc/tag/404/” target=”_blank” class=”keywords”>404</a>_23@<span style=”color: #000000;”&gt;); } }@H_<a href=”https://www.jb51.cc/tag/404/” target=”_blank” class=”keywords”>404</a>_23@</pre>

@H_4190@发现 在login的时候 报错了:

@H419_0@提示<span style=”color: #ff0000;”>“NO Select Unsafe Login. Please contact kefu@188.com for help”。@H_40423@

@H419_0@163邮箱也会收到一个告警邮件

@H_419_0@ 

<img src=”https://www.jb51.cc/res/2019/02-15/23/e5468a68a6ab22e192f6ba7d14220afa.png” alt=””>

@H_4190@经过查证 发现得需要在发送 login 命令之前 得先发送 id 命令

@H419_0@至于为什么要这么做 我的理解是得先伪装成普通的客户端吧(有理解错误请指出谢谢)

@H_419_0@我fork了一份SS2.imap的代码 打算兼容163的这个特殊情况改掉源码

@H_419_0@

<img src=”https://www.jb51.cc/res/2019/02-15/23/1b9596744d0187e96607e81bd239f065.png” alt=””>

@H_419_0@ 

<img src=”https://www.jb51.cc/res/2019/02-15/23/9f070a2154e63408ff0a0b8dac2fbe91.png” alt=””>

@H_419_0@然后走Login方法就不会报错了

@H_419_0@

<img src=”https://www.jb51.cc/res/2019/02-15/23/c82ff6a92ef45cc5be3f054821b5beba.png” alt=””>

@H_419_0@Github地址:https://github.com/yuzd/S22.Imap