Google Voice 全自动保号方案

先说原理

首先,我们需要登录到 Google Voice 平台,可以用浏览器、手机都行,然后打开短信转发到邮箱。这一步是必须的,因为我们是通过定时发邮件来达到自动保号的。

流程大概是这样子的:当有人给你发消息时,消息会转发到你的 Gmail 邮箱,如果你回复这个邮件就等于发送消息了。

好了,原理很简单,我们实操一下。

获取收件人

如果你开通了消息转发到邮箱,你就让一个人发送消息给你,然后你就会收到一个邮件。大概如下图所示,我们我们得到了邮箱地址。

如果我们尝试往这个邮箱发送邮件,那么就等同于在 Google Voice 里面发送信息。

发送邮件之后,打开 Google Voice 就可以看到了。

如何全自动?

首先,我们需要获取 Google 的 应用专用密码

这一步自行获取,如果成功获取你可以得到一个:xxxx xxxx xxxx xxxx 16位的密码。

打开 https://console.rapjob.com/ 去添加一个任务,然后点击“从 cURL 导入”

curl 'https://smtphelper.deeplx.net/send' \
-H 'content-type: application/json' \
--data-raw '{"from": "这里填写你的Gmail邮箱","to": "这里填写收件人邮箱","password": "这里填写16位密码"}'

然后点击“高级”有通知策略可以自行设置。

执行间隔就是多久发一次短信,可以1个月发一次,那就是31天。

设置好之后,点击“测试”看看短信能不能发送过去,能发送成功保存就好了。

安全隐患(很重要)

大家肯定会觉得把应用专用密码泄漏了会造成安全隐患,当然大家可以自己去部署一个服务然后通过 RapJob 调度也是可以的。

如果你信得过我们提供的服务,则可以使用我们提供的 https://smtphelper.deeplx.net/send。(为了您的账号安全,我们强烈建议自行部署SMTP服务。


下面是 Golang 代码,你可以把 From、To、Password 写死在代码里面这样就可以避免了账号密码在网络上传输。

go get -u github.com/gin-gonic/gin
go get github.com/gin-contrib/cors
package main

import (
	"encoding/base64"
	"flag"
	"fmt"
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"log"
	"mime"
	"net/http"
	"net/smtp"
)

type EmailRequestBody struct {
	// 发送者
	From string `json:"from"`
	// 接收者
	To string `json:"to"`
	// 发送邮件服务器
	Smtp string `json:"smtp"`
	// 发送邮件服务器端口
	Port int `json:"port"`
	// 密码
	Password string `json:"password"`
	// 标题
	Subject string `json:"subject"`
	// 内容
	Text string `json:"text"`
}

var port = 19056

var Form = ""
var To = ""
var Smtp = "smtp.gmail.com"
var Port = 587
var Password = ""
var Subject = "Send a new message"
var Text = "这是一条基于 RapJob.com 的自动保号消息,您可以忽略。(This is an auto-bailout message based on RapJob.com that you can ignore.) "

func init() {
	flag.IntVar(&port, "p", port, "set up the port")
	flag.IntVar(&port, "port", port, "set up port")

	log.SetFlags(log.LstdFlags | log.Lshortfile)

}

func main() {
	gin.SetMode(gin.ReleaseMode)
	flag.Parse()

	r := gin.Default()
	config := cors.DefaultConfig()
	config.AllowOriginWithContextFunc = func(c *gin.Context, origin string) bool {
		return true
	}
	config.AllowCredentials = true
	r.Use(cors.New(config))

	r.POST("/send", func(c *gin.Context) {
		body := EmailRequestBody{}

		if err := c.BindJSON(&body); err != nil {
			c.JSON(http.StatusBadRequest, gin.H{
				"message": err.Error(),
			})
			return
		}

		if body.From == "" {
			body.From = Form
		}

		if body.To == "" {
			body.To = To
		}

		if body.Smtp == "" {
			body.Smtp = Smtp
		}

		if body.Password == "" {
			body.Password = Password
		}

		if body.Subject == "" {
			body.Subject = Subject
		}

		if body.Text == "" {
			body.Text = Text
		}

		if body.Port <= 0 {
			body.Port = Port
		}

		if body.From == "" || body.To == "" || body.Smtp == "" || body.Password == "" || body.Subject == "" || body.Text == "" || body.Port <= 0 {
			c.JSON(http.StatusBadRequest, gin.H{
				"message": "Parameter Error",
			})
			return
		}

		header := make(map[string]string)
		header["From"] = body.From
		header["To"] = body.To
		header["Subject"] = mime.QEncoding.Encode("UTF-8", body.Subject)
		header["MIME-Version"] = "1.0"
		header["Content-Type"] = "text/plain; charset=\"utf-8\""
		header["Content-Transfer-Encoding"] = "base64"

		message := ""
		for k, v := range header {
			message += fmt.Sprintf("%s: %s\r\n", k, v)
		}
		message += "\r\n" + base64.StdEncoding.EncodeToString([]byte(body.Text))

		err := smtp.SendMail(fmt.Sprintf("%s:%d", body.Smtp, body.Port),
			smtp.PlainAuth("", body.From, body.Password, body.Smtp),
			body.From, []string{body.To}, []byte(message))

		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{
				"message": err.Error(),
			})
			return
		}

		log.Println(fmt.Sprintf("Successfully send email %s from %s to %s", body.Subject, body.From, body.To))

	})

	_ = r.Run(fmt.Sprintf(":%v", port))
}
32 个赞

效果图

7 个赞

感觉可行

3 个赞

不错 mark

3 个赞

马克

3 个赞

cy

3 个赞

mark 感谢分享

2 个赞

你这个只是发消息 别人不回你啊
看看我的方案 自动回复聊天的 :grin:

4 个赞

A 账号给 B 账号发邮件,B 账号给 A 账号发邮件。

3 个赞

找个搭档,都使用发邮件的方式就好了。

周一你给他发,周二他给你发。

3 个赞

其实快捷指令也挺方便的 :grinning:

3 个赞

需要iPhone,也需要每次开代理,用过一段时间对我来说并不是很靠谱。

2 个赞

可以设置自动开代理+定时嘛,也不麻烦

3 个赞

我现在就是全自动不用管的啊。。。
每月15号 github action的机器人bot给gv发个消息, 收到关键词消息后。google app script自动回复一下。
完美

4 个赞

可以的。 实现方式多样化嘛

2 个赞

首先,需要有一个GV号:sob:

1 个赞

感谢佬

1 个赞

马克

1 个赞

我都是2个账号互相(人肉)发 :innocent:

1 个赞

https://youtu.be/GBubdAJMT2o 视频教程

2 个赞