golang命令行检查Yopmail邮件插件库yogo的使用

Golang命令行检查Yopmail邮件插件库yogo的使用

安装

可以通过以下方式安装yogo:

  1. 下载二进制文件
  2. 运行命令:go install github.com/antham/yogo/v4@latest
  3. Archlinux用户可以通过AUR包安装

基本用法

yogo提供以下命令:

Check yopmail mails from command line.

Usage:
  yogo [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  inbox       Handle inbox messages
  version     App version

Flags:
      --debug   Log all requests/responses
  -h, --help    help for yogo
      --json    Dump the output as json

Use "yogo [command] --help" for more information about a command.

⚠️ 注意:执行过多调用会触发验证码(CAPTCHA),需要通过浏览器解决。建议添加延迟以防止这种情况。

环境变量

可以通过以下环境变量自定义yogo的行为:

名称 默认值 用途
HTTP_PROXY 定义HTTP代理
HTTPS_PROXY 定义HTTPS代理
YOGO_USER_AGENT 参见client.go中的defaultUserAgent常量 用于执行请求的用户代理
YOGO_REQUEST_TIMEOUT 10 请求超时时间(秒)

使用示例

列出邮件

获取test1@yopmail.com邮箱的10封邮件:

yogo inbox list test1 10

清空收件箱

清空test1@yopmail.com邮箱:

yogo inbox flush test1

阅读邮件

读取helloworld@yopmail.com邮箱的第一封邮件:

yogo inbox show helloworld 1

读取第二封邮件:

yogo inbox show helloworld 2

查看邮件源码和完整头信息

查看helloworld@yopmail.com邮箱第一封邮件的源码:

yogo inbox source helloworld 1

删除邮件

删除helloworld@yopmail.com邮箱的第一封邮件:

yogo inbox delete helloworld 1

标志选项

  • 使用--json标志可以获取JSON格式的输出
  • 如果yogo出现问题,可以使用--debug标志记录请求/响应日志

完整Golang示例

以下是一个使用yogo库的完整Golang示例:

package main

import (
	"fmt"
	"log"
	"os"

	"github.com/antham/yogo/v4/inbox"
)

func main() {
	// 创建收件箱客户端
	client := inbox.NewClient()

	// 列出test1@yopmail.com邮箱的10封邮件
	emails, err := client.List("test1", 10)
	if err != nil {
		log.Fatalf("Failed to list emails: %v", err)
	}

	// 打印邮件列表
	fmt.Println("Email list:")
	for i, email := range emails {
		fmt.Printf("%d. From: %s, Subject: %s\n", i+1, email.From, email.Subject)
	}

	// 读取第一封邮件
	if len(emails) > 0 {
		email, err := client.Show("test1", 1)
		if err != nil {
			log.Fatalf("Failed to show email: %v", err)
		}
		fmt.Printf("\nFirst email content:\n%s\n", email.Body)
	}

	// 删除第一封邮件
	err = client.Delete("test1", 1)
	if err != nil {
		log.Printf("Failed to delete email: %v", err)
	} else {
		fmt.Println("\nFirst email deleted successfully")
	}
}

这个示例演示了如何:

  1. 创建yogo收件箱客户端
  2. 列出指定邮箱的邮件
  3. 读取特定邮件内容
  4. 删除邮件

注意:实际使用时需要处理错误和边界情况。


更多关于golang命令行检查Yopmail邮件插件库yogo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang命令行检查Yopmail邮件插件库yogo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用Yogo库检查Yopmail邮件的Golang实现

Yopmail是一个提供临时邮箱服务的网站,常用于测试和临时注册场景。在Golang中,可以使用yogo库来检查Yopmail邮箱中的邮件。下面我将详细介绍如何使用这个库。

安装yogo库

首先需要安装yogo库:

go get github.com/guelfey/yogo

基本使用方法

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/guelfey/yogo"
)

func main() {
	// 1. 创建Yogo客户端
	client := yogo.NewClient()

	// 2. 设置要检查的邮箱地址 (不需要@yopmail.com后缀)
	mailbox := "test123"

	// 3. 获取邮箱中的邮件列表
	emails, err := client.GetEmails(mailbox)
	if err != nil {
		log.Fatalf("获取邮件失败: %v", err)
	}

	// 4. 打印邮件信息
	fmt.Printf("邮箱 %s@yopmail.com 中共有 %d 封邮件:\n", mailbox, len(emails))
	for i, email := range emails {
		fmt.Printf("\n邮件 #%d:\n", i+1)
		fmt.Printf("发件人: %s\n", email.From)
		fmt.Printf("主题: %s\n", email.Subject)
		fmt.Printf("日期: %s\n", email.Date.Format(time.RFC1123))
		fmt.Printf("内容预览: %.50s...\n", email.Body)
	}
}

高级功能示例

1. 获取特定邮件内容

func getEmailContent(mailbox, emailID string) {
	client := yogo.NewClient()
	
	// 获取完整邮件内容
	content, err := client.GetEmailContent(mailbox, emailID)
	if err != nil {
		log.Fatalf("获取邮件内容失败: %v", err)
	}
	
	fmt.Printf("邮件内容:\n%s\n", content)
}

2. 等待特定主题的邮件

func waitForEmailWithSubject(mailbox, subject string, timeout time.Duration) {
	client := yogo.NewClient()
	start := time.Now()
	
	for time.Since(start) < timeout {
		emails, err := client.GetEmails(mailbox)
		if err != nil {
			log.Printf("获取邮件失败: %v", err)
			time.Sleep(5 * time.Second)
			continue
		}
		
		for _, email := range emails {
			if email.Subject == subject {
				fmt.Printf("找到匹配邮件: %s\n", subject)
				return
			}
		}
		
		time.Sleep(10 * time.Second)
	}
	
	log.Fatalf("在 %v 内未找到主题为 '%s' 的邮件", timeout, subject)
}

3. 删除所有邮件

func deleteAllEmails(mailbox string) {
	client := yogo.NewClient()
	
	emails, err := client.GetEmails(mailbox)
	if err != nil {
		log.Fatalf("获取邮件失败: %v", err)
	}
	
	for _, email := range emails {
		err := client.DeleteEmail(mailbox, email.ID)
		if err != nil {
			log.Printf("删除邮件 %s 失败: %v", email.ID, err)
		} else {
			fmt.Printf("已删除邮件: %s\n", email.Subject)
		}
	}
}

注意事项

  1. Yopmail邮箱如果没有活动,大约会在8天后自动删除
  2. 频繁请求可能会导致临时封禁,建议在请求之间添加适当的延迟
  3. 该库依赖于Yopmail网站的HTML结构,如果网站改版可能需要更新库
  4. 对于生产环境,建议使用更可靠的邮件服务而非临时邮箱

完整示例程序

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/guelfey/yogo"
)

func main() {
	// 配置参数
	mailbox := "test123"
	expectedSubject := "验证邮件"
	timeout := 5 * time.Minute

	client := yogo.NewClient()

	// 1. 检查邮箱初始状态
	initialEmails, err := client.GetEmails(mailbox)
	if err != nil {
		log.Fatalf("初始获取邮件失败: %v", err)
	}
	fmt.Printf("初始邮件数量: %d\n", len(initialEmails))

	// 2. 等待特定邮件
	fmt.Printf("等待主题为 '%s' 的邮件...\n", expectedSubject)
	start := time.Now()
	var targetEmail *yogo.Email

	for time.Since(start) < timeout {
		emails, err := client.GetEmails(mailbox)
		if err != nil {
			log.Printf("获取邮件失败: %v", err)
			time.Sleep(5 * time.Second)
			continue
		}

		for _, email := range emails {
			if email.Subject == expectedSubject {
				targetEmail = &email
				break
			}
		}

		if targetEmail != nil {
			break
		}

		time.Sleep(10 * time.Second)
	}

	if targetEmail == nil {
		log.Fatalf("在 %v 内未找到目标邮件", timeout)
	}

	// 3. 获取并显示邮件内容
	fmt.Printf("\n找到目标邮件:\n")
	fmt.Printf("发件人: %s\n", targetEmail.From)
	fmt.Printf("主题: %s\n", targetEmail.Subject)
	fmt.Printf("日期: %s\n", targetEmail.Date.Format(time.RFC1123))

	content, err := client.GetEmailContent(mailbox, targetEmail.ID)
	if err != nil {
		log.Fatalf("获取邮件内容失败: %v", err)
	}
	fmt.Printf("\n邮件内容:\n%s\n", content)

	// 4. 清理邮箱
	fmt.Println("\n清理邮箱...")
	deleteAllEmails(client, mailbox)
}

func deleteAllEmails(client *yogo.Client, mailbox string) {
	emails, err := client.GetEmails(mailbox)
	if err != nil {
		log.Printf("获取邮件失败: %v", err)
		return
	}

	for _, email := range emails {
		err := client.DeleteEmail(mailbox, email.ID)
		if err != nil {
			log.Printf("删除邮件 %s 失败: %v", email.ID, err)
		} else {
			fmt.Printf("已删除邮件: %s\n", email.Subject)
		}
	}
}

以上代码展示了如何使用yogo库检查Yopmail邮箱中的邮件,包括等待特定邮件、获取邮件内容和清理邮箱等功能。根据你的具体需求,可以调整这些代码片段。

回到顶部