您好,欢迎访问心蓝数据!    请登录  免费注册
技术文档 |  帮助文档 |  常用下载 |  新闻动态
分类 目标
当前位置: 文档 -> 帮助文档  

心蓝邮箱助手BHMailer HTTP API接口说明

加入时间: 2021/11/25 17:51:05


        新版接口说明,请移步到  >>>https://docs.bhdata.com/bhmailer/http-api-doc.html


        心蓝邮件助手远程HTTP API接口使用HTTP通讯,参数名称全部为小写。采用UTF-8编码,使用HTTPS访问。通过HTTP API请求可实现获取及添加邮箱,查收邮件,截取邮件内容中的关键字等便捷功能。


心蓝邮箱助手客户端: 打开登录后,点击左上角文件-插件管理-HTTP API插件菜单中勾选启用HTTP API接口,请勿关闭软件。 (如未安装请先下载)

API请求地址(第三方软件开发者首选,请根据邮件助手登录的授权服务器选择相应的地址):
内地:https://bsh.bhdata.com:30015/bhmailer
香港:https://authhk.bhdata.com:30015/bhmailer

请求方式:GET

API测试页面:https://www.bhdata.com/app/bhmailer.aspx(模拟点击及手机用户使用。建议点击软件击左上角文件-插件管理-HTTP API插件-API测试页面进入该网址。)

返回结果为JSON格式文本,其中code为0时表示执行成功,执行成功时msg或data标示执行结果。非0时表示失败,msg表示相应的错误描述。

返回code值参照下表说明:

Code 含意
0 执行成功
1 参数错误
2 时间戳错误,当前电脑时间与标准时间相差不能超过120秒
3 签名错误,检查MD5时字符串的拼接顺序和API KEY是否正确
4 邮件助手不在线,请先登录心蓝邮件助手,并确保登录的授权服务器和API请求地址服务器一致
5 等待执行结果超时,在msg中返回请求的ID,后续可以通过getResult接口根据此ID获取执行结果。如:{"code":5,"msg":"123456"}
6 读取新邮件失败(如没有新邮件,网络连接失败,登录失败等)
7 没有发现匹配的邮件
8 没有发现指定的请求ID
9 超出请求次数限制
255 非法操作


心蓝邮件助手远程HTTP API接口具有如下两种调用方式:


A、简易直链调用方式

1、心蓝邮箱助手“邮件规则”中设置规则,用来定义目标唯一邮件,如邮件标题,发件人,邮件发送时间(默认10分钟内)等;

2、规则的动作选择“HTTP API”;

3、“截取字段”即自定义导出字段,参照下方自定义邮件导出规则,可支持多个字段;

4、选择对应的邮箱,右键-导出HTTP API链接-选择上一步中建立的规则名称;

5、导出的结果即为每个对应邮箱的专属HTTP API链接,访问后可以得到符合该规则的10分钟内的最新目标邮件关键字;

链接格式:xxxxxxx@mailxw.com----https://bsh.bhdata.com:30015/?mail=VyJlGQcmEY7kXurEfqvbDAOkobSmxFBZUpAnpoIMTjihfx4y

B、高级定义调用方式

每个接口请求必须包含以下参数:

参数名

可选

说明
act 命令

命令值,不同功能对应不同命令值,区分大小写
uid 授权ID

在邮件助手文件-插件管理-HTTP API插件中查看
t 时间戳,从1970年1月1日(UTC/GMT的午夜)开始所经过的毫秒数

JavaScript:parseInt(new Date().getTime())
C#: (DateTime.UtcNow.Ticks - 621355968000000000) / 10000
sign 将前面所有字段值+其它参数值+API Key按顺序拼接后MD5,使用UNICODE编码。
也可以只将API Key直接MD5得到sign或者将API Key直接赋值给sign

API Key在邮件助手文件-插件管理-HTTP API插件中查看


1、获取API基本信息

命令:getApiInfo

功能:返回Api的到期时间,每日最大请求次数和当前已用请求次数。

额外参数表:

<无>

请求示例:https://bsh.bhdata.com:30015/bhmailer?uid=您的授权ID&sign=您的API Key&act=getApiInfo&t=1649780855934

正常返回结果:{"code":0,"data":{"uid":123456789,"endTime":"2022-11-23 23:48:36","maxTimes":10000,"times":3,"timesTime":"2021-11-26 00:38:07"}}



2、获取一个邮箱账号

命令:getAccount

功能:从已登录的心蓝邮件助手中按顺序获取一个邮箱地址,同时返回邮箱账号总数和当前序号

额外参数表:

参数名

可选

说明
email 指定要获取的邮箱账号

pass 是否返回邮箱密码,默认0不返回,为1返回。如果账号有clientid和refreshtoken,在返回密码的同时也一同返回。


请求示例:https://bsh.bhdata.com:30015/bhmailer?uid=您的授权ID&sign=您的API Key&act=getAccount&pass=0&t=1649778851581

正常返回结果:{"code":0,"data":{"email":"asdfasf@126.com","total":14,"no":2}}



3、请求检查新邮件

命令:checkMail

功能:指定从某个邮箱账号中获取满足指定条件的邮件,返回按截取规则截取到的邮件内容。

额外参数表:

参数名

可选

说明
email 邮箱账号,即邮箱地址

请求检查新邮件的邮箱账号
pass 邮箱账号的密码

如果指定了密码,在助手中邮箱账号不存在时自动添加
clientid OAuth登录的ClientId

OAuth中用于获取access_token的clientid
refreshtoken OAuth登录的refresh_token

如果指定了clientid和refreshtoken,则使用OAuth登录邮箱账号
proofemail 辅助邮箱

当需要自动OAuth登录且需要辅助邮箱时
proofemailpwd 辅助邮箱密码

当需要自动OAuth登录且需要辅助邮箱时
rule 邮件客户端定义的邮件规则名称

根据该规则的定义查找符合条件的邮件
title 邮件标题查找关键字

标题中包含指定关键字即为满足条件
多个关键字用|分隔,每个关键字为或者关系。
from 发件人查找关键字

发件人中包含指定关键字即为满足条件
多个关键字用|分隔,每个关键字为或者关系。
to 收件人查找关键字

收件人中包含指定关键字即为满足条件
多个关键字用|分隔,每个关键字为或者关系。
cc 抄送人查找关键字

抄送人中包含指定关键字即为满足条件
多个关键字用|分隔,每个关键字为或者关系。
sent 邮件发送时间,可使用三种赋值方式。
1.使用时间戳表示,即从1970年1月1日(UTC/GMT的午夜)开始所经过的毫秒数。
2.使用负整数,即表示当前时间减去相应的秒数。如sent=-180,表示三分钟内的邮件。
3.使用格式化的时间值,如2024-06-20 10:20:35(仅支持v182及以后版本)。

注:推荐使用该参数,以便小于该参数时间的邮件将不接收,加快API返回速度。

邮件发送时间大于或等于此时间时为满足条件。如果指定了此参数,则如果在新邮件中没有找到匹配的邮件时则搜索已下载的邮件。
注意:rule,title,from,sent必须指定一个,推荐使用title+from+sent,当指定了rule时,title,from,sent三个参数无效,使用rule中的定义。
tempkeys 临时关键字

临时关键字,多个用换行符号(\n)分隔。用于替换导出字段中的$TEMPKEY#$。
fields 截取内容定义,定义规则参照邮件助手中的自定义导出规则说明。
如果不指定则默认为$BODYTEXT$

导出规则说明请查看附:自定义邮件导出规则
exmode 是否为扩展模式,1或0。默认为0。

当为1时,正常返回结果值在Json对象中的data属性中,返回结果包含邮件id,可用于delMail命令。

请求示例:https://bsh.bhdata.com:30015/bhmailer?uid=您的授权ID&sign=您的API Key&act=checkMail&email=asdfasf@126.com&from=xxx@xxx.com&fields=$BODYTEXT-R|[0-9]{6}$&t=1649780119125

正常返回结果:exmode为0时返回{"code":0,"msg":"截取到的连续的6个数字"},exmode为1时返回{"code":0,"data":{"result":"截取到的连续的6个数字","id":"abcdefgxx"}}

异常返回结果:{"code":3,"msg":"sign error"}

如果code为5表示超时,可以后续尝试获取结果。

注:如果使用同一个邮箱测试,请求一次后务必在该邮箱上右键-删除所有邮件(仅本地),再右键-清空本地的删除标志以便可以再次请求获取新邮件。

特别提醒:如果没有指定sent参数,此命令仅搜索命令请求后软件收到的邮件,即请确保软件中没有收到目标邮件之前去请求API,以便请求后软件开始收邮件,有目标邮件就返回。



4、获取执行结果

命令:getResult

功能:当执行结果code的值为5时,表示在等待的时间内,动作还没有执行完成,需要稍后主动发起获取结果请求。
比如检查新邮件,默认只有10秒时间,如果10秒收取到需要的邮件则立即返回截取结果。
如果因网络慢或邮件过多,需要时间超过10秒,则返回code为5,需要此接口主动发起请求获取执行结果。

额外参数表:

参数名

可选

说明
id 请求ID,即请求检查新邮件时返回的ID


请求示例:https://bsh.bhdata.com:30015/bhmailer?uid=您的授权ID&sign=您的API Key&act=getResult&id=xxxxx&t=1649780751911

正常返回结果:exmode为0时返回{"code":0,"msg":"这是结果"},exmode为1时返回{"code":0,"data":{"result":"这是结果","id":"abcdefgxx"}}



5、删除邮件

命令:delMail

功能:删除checkMail返回的邮件。

额外参数表:

参数名

可选

说明
email 邮箱账号,即邮箱地址

请求删除的邮件所在的邮箱账号
id 邮件id,即请求检查新邮件时返回的邮件id

mode 删除方式: 0为本地删除,1为本地和服务器删除,2为仅服务器删除。默认为0


请求示例:https://bsh.bhdata.com:30015/bhmailer?uid=您的授权ID&sign=您的API Key&act=delMail&email=xxxxxx&id=xxxxx&mode=1&t=1649780751911

正常返回结果:{"code":0,"msg":"Done"}



6、删除邮箱账号

命令:delAccount

功能:删除指定的邮箱账号。已收取的邮件将被同时删除(仅本地)。

额外参数表:

参数名

可选

说明
email 邮箱账号,即邮箱地址

指定要删除的邮箱账号

请求示例:https://bsh.bhdata.com:30015/bhmailer?uid=您的授权ID&sign=您的API Key&act=delAccount&email=xxxxxx&t=1649780751911

正常返回结果:{"code":0,"msg":"Done"}



附:自定义邮件导出内置字段

说明:自定义导出的内置字段以$标识符作为开头和结尾,在截取内容中会被替换为相应的内容,如$EMAIL$会被替换为邮箱。



支持的内置字段:

  • $EMAIL$:邮箱
  • $PASS$:密码
  • $COMMENTS$:备注
  • $TITLE$:邮件标题
  • $RECEIVED$:邮件接收时间
  • $FROMEMAIL$或$FROM$:发件人
  • $RECEIVER$或$TO$:收件人
  • $CC$:抄送
  • $IP$: 发件人IP

$ATTACHMENTS$: 邮件附件,格式为:附件1名称|附件1大小|附件2名称|附件2大小...

$TEMPKEY#$: 临时关键字,#为序号,从1开始。如省略序号,则表示第1个关键字,即$TEMPKEY$等同于$TEMPKEY1$。

$DATE$: 当前日期,格式为yyyyMMdd,如20241101

$TIME$: 当前时间,格式为HHmmss,如130532

$SOURCE$:包含邮件头的邮件原始内容

$HEADER$:邮件头源代码

$BODYHTML$: 如果是纯文本格式则返回邮件内容,如果是HTML格式,返回HTML源代码中的BODY部分源代码

$BODY$:不包含邮件头的邮件内容源代码

$BODYTEXT$:邮件文本内容,如果是HTML格式将被转换为文本格式

$BODYCLEAR$: 邮件文本内容且去掉所有空白换行符号,如果是HTML格式将被转换为文本格式

$FILETEXT$: Pdf,Office文档等附件解析出来的纯文本内容,可用于提取附件。

$RNDFILE$: 随机文件路径。在程序的Data\Files目录中放置多个任意文件,程序将随机使用其中某个文件的路径。

$RNDLINE$: 随机文本行。在程序的Data目录中放一个名字为Lines.txt的文本文件,程序将随机读取里面的某一行。

$RNDCONTENT$: 随机内容。在程序的Data\Letters目录中放置多个*.txt文件,程序将随机使用其中某个文件的内容。

${随机字符类型,随机个数起-随机个数止}$:生成指定类型和数量的随机字符串。如${A,3-16}$表示随机3到16个大写字母,${Aa#,6}$表示随机6位大小写字母和数字。

随机字符类型:
A:大写字母
a:小写字母
#:数字
Aa:大小写字母
A#:大写字母和数字
a#:小写字母和数字
Aa#:大小写字母和数字
汉:简体中文
漢:繁体中文



以上字段为常见的邮件的标准字段,直接调用即可导出。如需要提取特殊的关键字内容,请使用下面的几种方法。

1、从指定内容(参照上述内置字段)中按正则表达式提取符合的结果:

$TITLE-R|<正则表达式>$
$BODY-R|<正则表达式>$
$BODYTEXT-R|<正则表达式>$
$BODYCLEAR-R|<正则表达式>$
$HEADER-R|<正则表达式>$
$SOURCE-R|<正则表达式>$
$FILETEXT-R|<正则表达式>$
说明:提取满足正则表达式的第一个结果内容。如果需返回所有符合的结果,将"-R"替换为"-RA"

  

举例:
如从邮件显示所见的文本内容中提取6位连续的数字:$BODYTEXT-R|\d{6}$;获取连续10位数字或英文字符串:$BODYTEXT-R|[\da-zA-Z]{10}$。



2、从指定内容中按起始与结束关键字提取第一个符合的结果:

$TITLE|<START1>|<END1>|[START2]|[END2]|......|[STARTn]|[ENDn]$
$BODY|<START>|<END>$
$BODYTEXT|<START>|<END>$
$BODYCLEAR|<START>|<END>$
$HEADER|<START>|<END>$
$SOURCE|<START>|<END>$
$FILETEXT|<START>|<END>$
说明:提取满足字段定义的第一个内容,即提取到满足的第一个内容就终止。

  

举例:
A、如从标题中提取: 如果邮件标题为"欢迎abc成为会员",要截取出abc,则字段定义为: $TITLE|欢迎|成$

如邮件内容为:"您的激活码为123456。",要提取的内容是123456,则字段定义为:$BODYTEXT|激活码为|。$

B、如果邮件内容为HTML格式,需要提取HTML中的字符,如提取HTML代码中的某个链接,则定义为:$BODY| href="|"$

C、如果要提取邮件标头中的Message-ID,则可以从源代码中提取,定义为: $SOURCE|Message-ID:|\n$



3、从指定内容中按起始与结束关键字提取所有符合的结果:

$BODY-A|<START>|<END>$
$BODY-A-EX|<BODY-START>|<BODY-END>|<START>|<END>$
$BODYTEXT-A|<START>|<END>$
$BODYTEXT-A-EX|<BODY-START>|<BODY-END>|<START>|<END>$
$BODYCLEAR-A|<START>|<END>$
$BODYCLEAR-A-EX|<BODY-START>|<BODY-END>|<START>|<END>$
$HEADER-A|<START>|<END>$
$HEADER-A-EX|<BODY-START>|<BODY-END>|<START>|<END>$
$SOURCE-A|<START>|<END>$
$SOURCE-A-EX|<BODY-START>|<BODY-END>|<START>|<END>$
$FILETEXT-A|<START>|<END>$
$FILETEXT-A-EX|<BODY-START>|<BODY-END>|<START>|<END>$
说明:提取满足字段定义的所有内容,即提取到满足的第一个后,继续提取,直到邮件尾。
BODY-A-EX先将邮件内容进行<BODY-START>|<BODY-END>截取后再进行BODY-A的相同截取。  

  

举例:
如邮件内容中多次出现:"您的可用KEY是:XXXXXX。",要提取每个不同的XXXXXX,则字段定义为:$BODY-A|KEY是:|。$



其他说明:

1、推荐使用$BODYTEXT$,即HTML格式将被转换为文本格式再做提取。

2、<START>与<END>是一组起始和结尾关键字组合,可以有多个组合,即在第一组截取后再对第一组的截取结果进行第2组关键字截取,依次进行N次截取。

      如:原始文本为"您的激活码为ABC-123456。",如果要提取"123456",则字段定义为"$BODY|您的激活码为|。|-|"

3、有三个常用的符号:\r表示回车,\n表示换行,\t表示制表符。实际应用中很多看到的换行是由回车+换行组成的,即使用\r\n来表示。

4、可以对截取结果进制编码或解码,只需要在字段名称前加编码类型即可。支持以下4种编/解码: URLENCODE,URLDECODE,HTMLENCODE,HTMLDECODE。

      如需对发件人进行HTML编码,则使用$HTMLENCODE-FROM$。(从v275版本开始支持)



代码示例:

C# Demo代码示例:

Demo程序实现了每个接口的调用,可在自己的工程中直接使用。下载C# Demo程序



触动代码示例:
tim = ts.ms() 
str = tim  ---获取时间戳 触动
str = tostring(str)
new = str:split(".")
tim=new[1]---精确分割
local url = "https://bsh.bhdata.com:30015/bhmailer"

status,header,content = http.get(url,{headers={},params={uid=用户ID,sign=apikey,act='checkMail',email=收件邮箱,title=邮件标题,from=发件邮箱,sent=-999999,fields='$BODYTEXT-R|[0-9]{6}$',t=tim}
  }
)


按键代码示例:
Dim 邮箱名称 = "xxxxxx@yahoo.com"
Dim 邮箱密码="xxxxxxxx"

邮箱_取指定邮箱最新验证码(授权ID,key,邮箱名称,邮箱密码)
Function 邮箱_取指定邮箱最新验证码(授权ID,key,邮箱名称,邮箱密码)
    Dim 时间戳=time()*1000
    Dim  请求网址="https://bsh.bhdata.com:30015/bhmailer?uid="&授权ID&"&sign="&key&"&act=checkMail&sent=-999999&exmode=1&email="&邮箱名称&"&pass="&邮箱密码&"&title=xxxxxxx&fields=$BODYCLEAR|验证码是:|($&t="&时间戳
    Dim 发送请求 = URL.Get(请求网址, 60)
    TracePrint  发送请求
    Dim 返回结果 = Encode.JsonToTable(发送请求)
    Dim code = 返回结果["code"]
    Dim msg= 返回结果["msg"]
    TracePrint code
    TracePrint msg
    If CInt(code) = 5 Then 
        请求网址= "https://bsh.bhdata.com:30015/bhmailer?uid="&授权ID&"&sign="&key&"&act=getResult&id="&msg&"&t="&时间
        Dim 再次发送请求 = URL.Get(请求网址, 60)
        TracePrint  再次发送请求
    End If
End Function


易语言代码示例(需引用精易模块):
.版本 2
.支持库 spec

.程序集 程序集1

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 请求网址, 文本型
.局部变量 授权ID, 文本型
.局部变量 APIKey, 文本型
.局部变量 API地址, 文本型
.局部变量 email, 文本型
.局部变量 局_返回, 文本型
.局部变量 json, 类_json
.局部变量 code, 文本型
.局部变量 msg, 文本型
.局部变量 bool, 逻辑型
.局部变量 title, 文本型
.局部变量 from, 文本型
.局部变量 fields, 文本型
.局部变量 sent, 文本型


' 1、基本信息
email = “xxxxxx@outlook.com”  ' 要接收邮件的邮箱地址
授权ID = “123456789”  ' 左上角文件-插件管理 HTTP API插件中查看
APIKey = “xxxxxxxxxxxxxxxxxx”  ' 同上
API地址 = “https://bsh.bhdata.com:30015/bhmailer”
' 2、确定目标邮件
title = “xxxx xxx”  ' 目标邮件的标题
from = “xxxxxxx@xxxx.com”  ' 目标邮件的发件人
sent = “-180”  ' 距离当前请求时间3分钟内发送的邮件
' 3、定义需截取的返回字段
fields = “$TITLE-R|[0-9]{5,}$”  ' 从邮件标题中截取返回连续5个以上数字 详见官网接口说明自定义邮件导出规则部分
请求网址 = API地址 + “?uid=” + 授权ID + “&sign=” + APIKey + “&act=checkMail&title=” + title + “&from=” + from + “&email=” + email + “&fields=” + fields + “&sent=” + sent + “&t=” + 时间_取现行时间戳 ()
' 调试输出 (请求网址)
局_返回 = 到文本 (网页_访问_对象 (请求网址, 0, , , , , , , , , , 30))
局_返回 = 编码_utf8到gb2312 (局_返回)  ' 转码,不然乱码显示
bool = json.解析 (局_返回)
.如果真 (bool)
    调试输出 (局_返回)
    code = json.取通用属性 (“code”)
    msg = json.取通用属性 (“msg”)
    ' 调试输出 (code)
    ' 调试输出 (msg)
.如果真结束

.判断循环首 (code = “5”)  ' 当返回code 5时说明邮件还没接收完成,延时10秒后再次获取结果
    延时 (10000)
    请求网址 = API地址 + “?uid=” + 授权ID + “&sign=” + APIKey + “&act=getResult&id=” + msg + “&t=” + 时间_取现行时间戳 ()
    调试输出 (请求网址)
    局_返回 = 到文本 (网页_访问_对象 (请求网址, 0, , , , , , , , , , 30))
    局_返回 = 编码_utf8到gb2312 (局_返回)  ' 转码,不然乱码显示
    bool = json.解析 (局_返回)
    .如果真 (bool)
        code = json.取通用属性 (“code”)
        msg = json.取通用属性 (“msg”)
    .如果真结束

.判断循环尾 ()
调试输出 (code)
调试输出 (msg)
返回 (0)  ' 可以根据您的需要返回任意数值



python代码示例:
import requests
import time

# 修改为自己的基本信息
uid='xxxxxxxxx' #左上角文件-插件管理 HTTP API插件中查看
sign='xxxxxxxxxxxxxxxxxx' #同上
APIurl = 'https://bsh.bhdata.com:30015/bhmailer'

# 修改为自己需求的目标邮件
title = 'security code' #目标邮件的标题
from1 = 'microsoft.com' #目标邮件的发件人 from不能用作python变量,所以用了任意如from1
fields = '$BODY|href="|"$' #从邮件HTML源代码中截取第一个链接 详见官网接口说明自定义邮件导出规则部分

# 定义函数无需修改       
def checkMail(email,password):
    timestamp = round(time.time()*1000) # 13位时间戳
    sent = timestamp - 60000 #指定邮件发送时间为当前请求时间减去60秒防止时差
    # 发送GET请求
    response = requests.get(APIurl+'?uid='+uid+'&sign='+sign+'&act=checkMail&email='+email+'&pass='+password+'&title='+title+'&from='+from1+'&sent='+str(sent)+'&fields='+fields+'&t='+str(timestamp))
    # 获取接口返回的JSON数据
    jsonlist = response.json()
    # 解析返回值
    code = jsonlist["code"]
    msg = jsonlist["msg"]

    while code == 5:
        # print(jsonlist)
        time.sleep(15)
        response = requests.get(APIurl+'?uid='+uid+'&sign='+sign+'&act=getResult&id=' +msg+'&t='+str(timestamp))
        # 获取接口返回的JSON数据
        jsonlist = response.json()
        # 解析返回值
        code=jsonlist["code"]
        msg=jsonlist["msg"]         
    else:
        print(msg)


# 调用函数 密码为空时则邮箱必须提前导入到心蓝助手里,带上密码则自动添加邮箱到心蓝里收信
checkMail('xxxxx@hotmail.com','')




上一篇: BHMailer HTTP POST说明
下一篇: 网站用户名密码忘记了怎么找回?
关于我们   联系我们   法律声明   如何付款  
版权所有© 2003-2022 心蓝数据  ICP备案: 粤ICP备05016924号