一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个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. mac 安装 php7 及扩展

    mac 版本号:10.12.3 (16D30) 安装内容 php7.0.18(配置apache),composer,phpunit,xdebug扩展,docopts,mongo和redis扩展 php ...

  2. Docker简易使用手册

    1. Docker介绍 Docker中文社区文档 Docker 是一个开源的软件部署解决方案. Docker 包括三个基本概念: 镜像(Image) Docker的镜像概念类似于虚拟机里的镜像,是一个 ...

  3. mybatis-plus简单了解

    mybatis-plus入门了解和简单使用 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 特性: ...

  4. 05 Django之模型层---单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  5. Java高并发程序设计学习笔记(二):多线程基础

    转自:https://blog.csdn.net/dataiyangu/article/details/86226835# 什么是线程?线程的基本操作线程的基本操作新建线程调用run的一种方式调用ru ...

  6. OpenSSL源码简介

    1.X.509标准 x509是由国际电信联盟(ITU-T)制定的数字证书标准:包含公钥和用户标志符.CA等: x509是数字证书的规范,P7和P12是两种封装形式:X.509是常见通用的证书格式.所有 ...

  7. 安卓端调用h5界面js方法和ios端调用h5界面js方法

      备注:本人为h5开发人员,不懂安卓和ios,这是开发小伙伴对接联调的主代码. 1.iOS端调用h5界面js方法:     2.安卓端调用h5界面js方法: @Override    protect ...

  8. Nginx(web服务器)与Tomcat(应用服务器)搭建集群

    Nginx作为互联网最常用的web服务器,高性能的HTTP和反向代理使它经常作为Tomcat集群的方案.Nginx官方只支持使用HTTP协议的集成,但是如果你想使用AJP协议集成,可以使用阿里开源的n ...

  9. Linux系统下C语言获取Time

    获取时间的函数有很多,具体包括如下: time()/gettimeofday()等等,下面是获取具体到usecond的时间程序: #include <iostream> #include ...

  10. python-装饰(高阶函数)

    python-装饰(高阶函数) 高阶函数 1.把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码) 2.返回值 中包含函数名 高阶函数实现1的功能 def bar(): print(&qu ...