众所周知,在注册一些账户时,比较常见的验证方式就是邮箱,但是在进行一些小众和不知名网站注册时,邮箱的泄露可能预示着不休止的邮件推送。尤其是当我们只是想临时使用邮箱这种情况,第二种,批量注册账号的情况。在这两业务需求之下。我们开始另辟蹊径,临时邮箱成了我们此刻的不二选择。
1.十分钟邮箱网站
临时邮箱有时也叫10分钟邮箱,寓意着短暂和时效性,当然,作为一次性用品。我们也不用去关注历史数据的找回,能解我们当下的燃眉之急,接收邮箱验证码 即可。下面是一些最新可用,且邮件响应速度很快的一些临时邮箱:
截止2024-07-12可用:
https://mail.td/ 界面简洁,速度快,多种后缀可选(推荐)
https://mailtemp.net/ 随机邮件的获取需要刷新页面,不太方便
https://email10min.com/zh 界面简洁,可以手动延长过期时间,还行
https://tenminutesmail.net/en# 和上一个一个模板,能用
https://10-minutemail.com/ 界面简洁,支持手动延时
https://temp-mail.org/zh/ 快跑,有广告,网速还慢
https://10minutemail.com 有广告,加载慢,使用体验不行
https://tempmail.plus/zh/#! 界面简洁,速度还行
2.临时邮箱API
作为开发者,秉着万物皆对象的辩证思维来看待临时邮箱,那么我们就只能通过临时邮箱网址去手动申请邮箱,获取验证码吗?不能通过API对接的方式来获取吗?答案可能让你失望了。lz通过调研,暂时在网上还没发现可用的类似临时邮箱的API。
我也想过通过解析临时邮箱的接口,将其转化为api来可供调用。但是,经过lz不懈的努力,终于发现。这个方法百分之九十九很难行得通。因为每个临时邮箱的网站或多或少针对这种行为都做了一些防范。也可能是我技不如人吧。
直到现在,我命由我不由天,皇天不负苦心人。我终于找到了哪个百分之一的可能漏网之鱼。这个临时邮箱api提供三种接口。
1.随机获取一个邮箱
api地址:http://xxx.com/email.php?act=getRandomEmail
参数 | 类型 | 是否必填 | 默认值 | 示例值 | 描述 |
---|---|---|---|---|---|
act | string | 是 | * | getRandomEmail | 随机获取一个邮箱方法标识 |
返回结果如下:
{
code: 0,
msg: "随机邮箱获取成功",
email: "6690e0e2a42e1@nqmo.com"
}
2. 获取邮件列表
api地址:http://xxx.com/email.php?act=getEmailMsg&email=随机邮箱
参数 | 类型 | 是否必填 | 默认值 | 示例值 | 描述 |
---|---|---|---|---|---|
act | string | 是 | * | getEmailMsg | 获取邮箱列表方法标识 |
string | 是 | * | 6690e0e2a42e1@nqmo.com | 获取的随机邮箱 |
返回结果如下:
{
"email": "6690e0e2a42e1@nqmo.com",
"content": [{
"mailbox": "6690e0e2a42e1@nqmo.com",
"id": "20240712T075407-1118",
"from": "",
"to": ["<6690e0e2a42e1@nqmo.com>"],
"subject": "BetDog\u90ae\u7bb1\u9a8c\u8bc1\u7801",
"date": "2024-07-12T07:54:07.818646362Z",
"posix-millis": 1720770847818,
"size": 2996,
"seen": false
}]
}
3. 获取邮件正文
api地址:http://xxx.com/email.php?act=getEmailContent&email=随机邮箱&id=邮件id
参数 | 类型 | 是否必填 | 默认值 | 示例值 | 描述 |
---|---|---|---|---|---|
act | string | 是 | * | getEmailContent | 获取邮件正文方法标识 |
string | 是 | * | 6690e0e2a42e1@nqmo.com | 获取的随机邮箱 | |
id | string | 是 | * | 20240712T075407-1118 | 从邮件列表里获取的邮件id |
返回结果如下:
{
"id": "20240712T075407-1118",
"email": "6690e0e2a42e1@nqmo.com",
"content": {
"mailbox": "6690e0e2a42e1@nqmo.com",
"id": "20240712T075407-1118",
"from": "",
"to": ["<6690e0e2a42e1@nqmo.com>"],
"subject": "BetDog\u90ae\u7bb1\u9a8c\u8bc1\u7801",
"date": "2024-07-12T07:54:07.818646362Z",
"posix-millis": 1720770847818,
"size": 2996,
"seen": false,
"body": {
"text": "Dear User: \n Your verification code is 16685 Effective within 10 minutes \n Please do notshare this code with anyone, including customer service\n",
"html": ""
},
"header": {
"Content-Transfer-Encoding": ["7bit"],
"Content-Type": ["text\/plain; charset=\"utf-8\""],
"Date": ["Fri, 12 Jul 2024 07:54:05 -0000"],
"Dkim-Signature": ["v=1; a=rsa-sha256; c=relaxed\/relaxed; d=gmail.com; s=20230601; t=1720770846; x=1721375646; darn=nqmo.com; h=message-id:date:to:from:subject:content-transfer-encoding :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RunUR39HfOwcSrg2GWBBYroIpK6PuA0s7clhxbFdDlo=; b=dcQIXH2MX9tmmCADBVSG+V00zhiOmQtm+L8mklhQRLEpDnABYYnblm0aGfgle2Jxw5 2ur8l80KsqBX0l++7\/UY3KWSNDffbWA9EFqkp0L\/kVFKQEVISts8luuWdCk30cZEr8y\/ TSxgWHedIx4BSAdYoT5+mLpQCjnEjAp70HegasgP5kVviJy\/Hn7j7WBrobZD8saODckx MORAzJ6kwg\/ZmTkioGc7ioExj78zlVV1hjsx8XsHzTefMgdFIYKsnGEAent7iQiuZgKH \/NQSTtpqfCzHSDLYYuA7g7\/9bo1qTwBgHoerCAdkCiYyXnn1IyaOykgqDOJsGn8DdbNx MUDw=="],
"From": ["betdoghash@gmail.com"],
"Message-Id": ["<172077084512.197768.1093321075037059396@US01-XH320V2-DS020-01>"],
"Mime-Version": ["1.0"],
"Received": ["from mail-io1-f54.google.com ([209.85.166.54]) by hi.mail.cx for <6690e0e2a42e1@nqmo.com>; Fri, 12 Jul 2024 07:54:07 +0000 (UTC)", "by mail-io1-f54.google.com with SMTP id ca18e2360f4ac-7fb93b2e2a3so93106739f.1 for <6690e0e2a42e1@nqmo.com>; Fri, 12 Jul 2024 00:54:07 -0700 (PDT)", "from US01-XH320V2-DS020-01 ([154.7.64.106]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-70b438c25a2sm6853095b3a.73.2024.07.12.00.54.04 for <6690e0e2a42e1@nqmo.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256\/256); Fri, 12 Jul 2024 00:54:05 -0700 (PDT)"],
"Return-Path": [""],
"Subject": ["=?utf-8?b?QmV0RG9n6YKu566x6aqM6K+B56CB?="],
"To": ["6690e0e2a42e1@nqmo.com"],
"X-Gm-Message-State": ["AOJu0YyzlIu+f72UwDJoTArPcD+MJ0bSR8XZQQCBsjGCLi\/ez56f7yTv odrHyPa\/m1VmpQTLbHdu870U9CdW+wnhSkxiygR2QF+tOeHX6t5NRp0hpg=="],
"X-Google-Dkim-Signature": ["v=1; a=rsa-sha256; c=relaxed\/relaxed; d=1e100.net; s=20230601; t=1720770846; x=1721375646; h=message-id:date:to:from:subject:content-transfer-encoding :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RunUR39HfOwcSrg2GWBBYroIpK6PuA0s7clhxbFdDlo=; b=AFMqlY90KBY+LuGpmIgAGYzp\/v0jZwPsM4DfFLsqRIgxl9pwhK09mQKcMaO4sI6wrx 8yBeo3SHaxc3tQDnrvGhlB5fYcehyDcHmBjpqy0tO0RYdeYkAQMK1lB7m5D1NOHBBx7q 1vd8\/B2lUAAenAG2Fb7GzlVPLZs7KslsXPQOwv45IK72GIN\/c85oggH+yNOIEfawse\/p wEQKg7UmGgru9JexXgkN7SnTIRXizcI+j7CtcjI0aVOpxrEnwRQ4umK+UH+FEcxeuUjW +f4NbdMTTxufScLig3XhqH2cOabZ7eBsE5XA6l6f13v\/19KQnu1ypn23GfQfiUadNIJm fJ4A=="],
"X-Google-Smtp-Source": ["AGHT+IGTDsXi1odHdzaps7hzEzET1K7G\/5Xfy\/G7f1wqbNLbhNjNvwbQQpK+IrxXeeQDw16utOhGgQ=="],
"X-Received": ["by 2002:a05:6e02:1d0e:b0:374:9bc4:ce1a with SMTP id e9e14a558f8ab-38a58d32cabmr130024515ab.20.1720770846180; Fri, 12 Jul 2024 00:54:06 -0700 (PDT)"]
},
"attachments": []
}
}
3.源码分享与解析
这个api接口是通过解析 https://mail.td/ 临时邮箱网站做出来的,老规矩,还是单个php文件,放到站点即可使用,主打就是一个方便好用。这个网站本来可以提供自定义邮箱后缀的,但是我比较懒,所以api中就不提供啦,源码我下面分享出来,各位可以自行丰富,完善。
email.php
<?php
//临时邮箱:https://mail.td/
function gettoken($email){
// 初始化 cURL
$ch = curl_init();
// 设置 cURL 选项
curl_setopt($ch, CURLOPT_URL, "https://mail.td/zh/mail/".$email); // 设置请求的 URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将响应保存到变量而不是输出
curl_setopt($ch, CURLOPT_HEADER, true); // 包含头部信息
// 执行 cURL 请求
$response = curl_exec($ch);
// 检查是否有错误发生
if(curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// 获取响应头部信息的长度
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
// 分离头部信息和响应体
$header = substr($response, 0, $header_size);
// 将头部信息转换为关联数组
$headerArray = [];
// 解析头部信息为数组
$headers = explode("\r\n", $header);
foreach ($headers as $headerLine) {
$pos = strpos($headerLine, ':');
if ($pos !== false) {
$key = substr($headerLine, 0, $pos);
$value = trim(substr($headerLine, $pos + 1));
$headerArray[$key] = $value;
}
}
$string = $headerArray['set-cookie'];
// 使用正则表达式匹配目标字符串
$pattern = '/auth_token=([^;]+)/';
if (preg_match($pattern, $string, $matches)) {
$extractedString = $matches[1];
return $extractedString;
}
// 关闭 cURL 资源
curl_close($ch);
}
// 第一个方法:获取随机邮箱并发送请求
function getRandomEmail() {
// 生成随机的邮箱地址,这里使用一个简单的示例
$randomEmail = uniqid() . '@nqmo.com'; // 这里可以改为生成真实的随机邮箱
// 构建请求的 URL
$url = 'https://mail.td/_next/data/rT7saUEnIHF3_hlYJl4Io/zh/mail/' . urlencode($randomEmail) . '.json?name=' . urlencode($randomEmail);
// 初始化 curl
$ch = curl_init();
// 设置 curl 选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行请求并获取返回结果
$response = curl_exec($ch);
// 检查是否有错误发生
if(curl_errno($ch)) {
$error_message = curl_error($ch);
echo "Error: $error_message";
}
// 关闭 curl 资源
curl_close($ch);
$res = json_decode($response);
if(isset($res->__N_SSP)){
$arr = array(
"code"=>0,
"msg"=>"随机邮箱获取成功",
"email"=>$randomEmail,
);
return $arr;
}else{
$arr = array(
"code"=>1,
"msg"=>"随机邮箱获取失败",
"email"=>$res->__N_SSP,
);
return $arr;
}
}
// 第二个方法:接收邮箱参数并发送请求
function sendGetRequest($email) {
// 构建请求的 URL
$url = 'https://mail.td/api/api/v1/mailbox/' . urlencode($email);
// 初始化 curl
$ch = curl_init();
// 设置 curl 选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: bearer '.gettoken($email)
));
// 执行请求并获取返回结果
$response = curl_exec($ch);
// 检查是否有错误发生
if(curl_errno($ch)) {
$error_message = curl_error($ch);
echo "Error: $error_message";
}
// 关闭 curl 资源
curl_close($ch);
$arr = array(
"email"=>$email,
"content"=>json_decode($response),
);
return $arr;
}
//根据id获取邮箱内容
function getEmailContent($email,$id){
// 构建请求的 URL
$url = 'https://mail.td/api/api/v1/mailbox/' . urlencode($email)."/".$id;
// 初始化 curl
$ch = curl_init();
// 设置 curl 选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: bearer '.gettoken($email)
));
// 执行请求并获取返回结果
$response = curl_exec($ch);
// 检查是否有错误发生
if(curl_errno($ch)) {
$error_message = curl_error($ch);
echo "Error: $error_message";
}
// 关闭 curl 资源
curl_close($ch);
$arr = array(
"id"=>$id,
"email"=>$email,
"content"=>json_decode($response),
);
return $arr;
}
//$res = gettoken();
// $res = getEmailContent("liuqing@nqmo.com","20240712T051842-6261");
// echo json_encode($res);
if(isset($_GET["act"])){
$act = $_GET["act"];
if($act=='getRandomEmail'){
$res = getRandomEmail();
}else if($act=='getEmailMsg'&&isset($_GET["email"])){
$res = sendGetRequest($_GET["email"]);
}else if($act=='getEmailContent'&&isset($_GET["email"])&&isset($_GET["id"])){
$res = getEmailContent($_GET["email"],$_GET["id"]);
}else{
$res = array(
"code"=>1,
"msg"=>"参数错误",
);
}
echo json_encode($res);
}else{
$res = array(
"code"=>1,
"msg"=>"参数错误",
);
echo json_encode($res);
}
?>
这种提取他人接口做二次封装接口的具有一定时效性,因此,后续我会持续关注是否有其他更好的平替方式。生命不息,学习不止。
本篇博客仅做技术分享,切勿进行任何非法行为。