一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是你一个很大工作量的内容”,现在问题已经出现了,那么我在这里给大家提供一些解决方案思路和结果。

首先我想到的是通过一些爬虫技术模拟登录进入邮箱获取邮件内容,我想一般人的解决思路也都是这样的吧。但是这样有一系列的难题,本事爬虫也不会,网上找了一下案例多是别人发的部分代码,而且相互转载的特别多(题外话,真正的一个需求解决方案我建议拆分到各个技术点去上网查是最优办法,而不是一开始直接网上找),这里这种思路我就不继续说一下去了,我之前也在网上找了一些别人php些的模拟登录邮箱,可能时间比较久了,现在根本没法用,故放弃。

其次还有找到一种可以满足需求的办法,IMAP协议获取邮件内容,这种方法前提邮箱设置过一些权限,比如:

不过问题不大,一般邮箱协议默认有的,我这里现在有一个栗子是,获取hotmail邮箱的激活链接的,代码如下

 [HttpPost]
public IActionResult GetLink([FromBody] JObject value)
{
try
{
string link = "";
string mail = value["mail"].Value<string>();
string pwd = value["pwd"].Value<string>();
IList<string> emailLst = new List<string>();
using (ImapClient client = new ImapClient("imap-mail.outlook.com", , mail, pwd, AuthMethod.Login, true))
{ IEnumerable<uint> uids = client.Search(SearchCondition.All(), "junk");
// 也可以使用通过其它条件进行检索你的邮件
if (uids.Count() > )
{
System.Net.Mail.MailMessage msg = client.GetMessage(uids.Single(), true, "junk");
string body = msg.Body; Regex reg = new Regex(@"((https?|ftp|file))[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]", RegexOptions.IgnoreCase); var mc = reg.Match(body);
if (mc.Success)
{
link = mc.Groups[].ToString();
}
}
}
return Ok(new { success = true, data = link });
}
catch (Exception ex)
{
return Ok(new { success = false, data = ex.Message });
}
}

看上面代码,核心的方法就是  ImapClient,具体用法大家要看一下官方文档,这里提供一些解决思路并简单结合栗子说明一下用法

ImapClient参数可以看到,第一个是host名称,第二个是端口号,

这里不懂的人提供一个获取这些信息的方法,下载一个foxmail客户端,登录邮箱,查看系统设置中服务器就可以看到上面的信息,具体为什么这些东西有什么用,查看imap协议,本人不求甚解并不了解这些东西具体原因,

再回到参数介绍上面来,后面的参数都是固定的,邮箱名称,密码,最后面两固定的这么写就可以。

 IEnumerable<uint> uids = client.Search(SearchCondition.All(), "junk"); 获取邮件uid

方法参数,第一个参数就是设定获取邮件那一部分,我这里直接写的ALL,后面一个参数就是指定获取那个文件的邮件,比如收信箱,发信箱,垃圾箱,草稿等待,我这里获取的垃圾箱(junk),说明一下,各种邮箱有些文件对应的字符串是不一样的,比如hotmail的垃圾箱是junk,gamil的是spam,这里是个坑,我也是摸石头过河试出来的,所以特别说明一下。

 client.GetMessage(uids.Single(), true, "junk");
根据uid获取邮件内容, 差不多就这几行代码就可以了,在实现需求以后回头想想如果最早用爬虫来实现效果的话,估计代码量复杂度要翻好几倍。归根结底,技术终究只是给需求提供最佳解决办法的工具嘛,这篇文章是给大家一个思路参考和问题解决方案,如果你有自动获取邮件这么个需求的话,希望你一定要搜到这篇文章,

C#程序模拟登录批量获取各种邮件内容信息的更多相关文章

  1. Python手动构造Cookie模拟登录后获取网站页面内容

    最近有个好友让我帮忙爬取个小说,这个小说是前三十章直接可读,后面章节需要充值VIP可见.所以就需要利用VIP账户登录后,构造Cookie,再用Python的获取每章节的url,得到内容后再使用 PyQ ...

  2. PHP模拟登录并获取数据

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  3. PHP中使用CURL模拟登录并获取数据实例

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  4. Python结合NC.exe 实现模拟登录&批量填表

    1.工作需求 有很多事项,每个事项分为:名称.种类.时间等,需要把每个事项逐个输入到网页中并提交. 如果用人肉操作的话,流程就是先登录到网站后台,点击“添加”——>输入各项内容——>点击“ ...

  5. 用python实现批量获取Linux主机简要信息并保存到Excel中 unstable 1.1

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- #filename get_linux_info.py #获取Linux主机的信息 # titles=[' ...

  6. 微信小程序调用微信登陆获取openid及用户信息 java做为服务端

    转载的文章,很不错 https://blog.csdn.net/weilai_zhilu/article/details/77932630

  7. Python爬虫之模拟登录微信wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  8. 使用selenium模拟登录知乎

    网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...

  9. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

随机推荐

  1. 了解MyISAM与InnoDB的索引差异(转)

    出处原文: 1分钟了解MyISAM与InnoDB的索引差异 数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index).InnoDB和MyISAM是怎么利用B+ ...

  2. java对象的几种创建过程

    java对象的创建过程 (1)用new 语句创建对象,这是最常用的创建对象方法. 下面用一个简单的存在继承关系的实例的创建,来叙述对象创建过程中的细节 概括如下: 执行顺序:(优先级从高到低.)静态代 ...

  3. js文件的框架

    Ext.define("BeidaSoft.SFJCGL.rcjwgl.bdgl.BdglGrid", { extend : "BeidaSoft.XTGL.base.Q ...

  4. git简易操作手册

    从远程仓库新建 $ git clone https://github.com/xxxr/Repository.git $ cd Repository/ $ git config --global us ...

  5. k8s的一些基本命令

    kubernetes用到的一些命令 kubectl管理工具以及命令 基础命令:create,delete,get,run,expose,set,explain,edit. create命令:根据文件或 ...

  6. jquery中的obj.attr()和obj.data

    实例一 obj.attr('data-max-width','aa'): obj.data('max-width') 问题 data只会获取第一次select赋值的值 区别 .data每次是从jque ...

  7. python之multiprocessing多进程

    multiprocessing 充分利用cpu多核一般情况下cpu密集使用进程池,IO密集使用线程池.python下想要充分利用多核CPU,就用多进程. Process 类Process 类用来描述一 ...

  8. Linux学习篇之OpenKM的安装(汉化)

    OpenKM是一个开放源代码的电子文档管理系统,它的特点是可用于大型公司或是中小企业, 适应性比较强. 并且在知识管理方面的加工,提供了更加灵活和成本较低的替代应用,下面讲一下搭建方法. 一.以下都是 ...

  9. Ansible安装部署和常用命令,及其主机清单inventory(二)

    1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...

  10. c++ 简单的动态银河星空绘制(类应用)

    话不多说直接贴代码: #include <graphics.h> #include <time.h> #include <conio.h> #define MAXS ...