golang简单高效的命令行邮件解析转JSON工具插件mp的使用
Golang简单高效的命令行邮件解析转JSON工具插件mp的使用
mp是一个简单的命令行邮件解析工具,它能够将邮件内容转换为JSON格式输出。目前它从标准输入(stdin)读取邮件内容并输出JSON。
基本使用示例
最简单的使用方式是通过管道将邮件内容传递给mp工具:
cat fixtures/test.eml | mp
输出示例
执行上述命令后,mp会输出类似以下的JSON格式结果:
{
"Text": "Hello world!",
"Html": "<b>Hello world!</b>",
"Headers": {
"Content-Type": "multipart/mixed; boundary=\"----mailcomposer-?=_1-1402581589619\"",
"From": "\"Me\" <me@domain.com>",
"Mime-Version": "1.0",
"To": "\"First Receiver\" <first@domain.com>, second@domain.com",
"X-Mailer": "Nodemailer 1.0"
},
"From": [
{
"Name": "Me",
"Address": "me@domain.com"
}
],
"To": [
{
"Name": "First Receiver",
"Address": "first@domain.com"
},
{
"Name": "",
"Address": "second@domain.com"
}
],
"Cc": null,
"Priority": "normal",
"Attachments": [
{
"ContentType": "text/plain",
"Filename": "dummyFile.txt",
"Disposition": "attachment"
}
]
}
在Golang程序中使用mp
以下是一个完整的Golang示例,展示如何在代码中使用mp解析邮件:
package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"os/exec"
)
func main() {
// 准备邮件内容
emailContent := `From: "Me" <me@domain.com>
To: "First Receiver" <first@domain.com>, second@domain.com
Subject: Test Email
Content-Type: multipart/mixed; boundary="----mailcomposer-?=_1-1402581589619"
------mailcomposer-?=_1-1402581589619
Content-Type: text/plain; charset=utf-8
Hello world!
------mailcomposer-?=_1-1402581589619
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="dummyFile.txt"
This is a test attachment.
------mailcomposer-?=_1-1402581589619--`
// 创建mp命令
cmd := exec.Command("mp")
// 设置输入为邮件内容
cmd.Stdin = bytes.NewBufferString(emailContent)
// 捕获输出
var out bytes.Buffer
cmd.Stdout = &out
// 运行命令
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
// 解析JSON输出
var result map[string]interface{}
err = json.Unmarshal(out.Bytes(), &result)
if err != nil {
log.Fatal(err)
}
// 打印解析结果
fmt.Printf("邮件解析结果:\n")
fmt.Printf("发件人: %v\n", result["From"])
fmt.Printf("收件人: %v\n", result["To"])
fmt.Printf("主题: %v\n", result["Headers"].(map[string]interface{})["Subject"])
fmt.Printf("正文: %v\n", result["Text"])
fmt.Printf("附件数量: %d\n", len(result["Attachments"].([]interface{})))
}
输出结构说明
mp输出的JSON包含以下主要字段:
Text
: 邮件的纯文本内容Html
: 邮件的HTML内容(如果有)Headers
: 包含所有邮件头信息的mapFrom
: 发件人信息数组,包含Name和Address字段To
: 收件人信息数组,包含Name和Address字段Cc
: 抄送人信息数组(如果有)Priority
: 邮件优先级Attachments
: 附件信息数组,包含ContentType、Filename和Disposition字段
这个工具非常适合需要快速解析邮件内容并将其转换为结构化数据的场景。
更多关于golang简单高效的命令行邮件解析转JSON工具插件mp的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang简单高效的命令行邮件解析转JSON工具插件mp的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang命令行邮件解析转JSON工具mp使用指南
mp是一个简单高效的命令行工具,用于将邮件内容解析为JSON格式。下面我将详细介绍如何使用这个工具。
安装mp工具
首先需要安装mp工具:
go install github.com/mailparser/mp@latest
基本使用
解析单个邮件文件
mp parse -i email.eml -o output.json
从标准输入读取邮件内容
cat email.eml | mp parse -o output.json
功能特性
mp支持解析邮件的以下内容:
- 邮件头信息
- 正文内容(纯文本和HTML)
- 附件
- 内嵌资源
示例代码
如果你想在自己的Go项目中使用类似功能,可以参考以下代码:
package main
import (
"encoding/json"
"fmt"
"io"
"os"
"github.com/mailparser/mp"
)
func main() {
// 从文件读取邮件
file, err := os.Open("email.eml")
if err != nil {
panic(err)
}
defer file.Close()
// 解析邮件
parser := mp.NewParser()
email, err := parser.Parse(file)
if err != nil {
panic(err)
}
// 转换为JSON
jsonData, err := json.MarshalIndent(email, "", " ")
if err != nil {
panic(err)
}
// 输出结果
fmt.Println(string(jsonData))
}
高级选项
只解析邮件头
mp parse -i email.eml --headers-only
提取所有附件
mp attachments -i email.eml -d ./attachments
验证邮件DKIM签名
mp verify -i email.eml
输出格式示例
mp的JSON输出格式如下:
{
"headers": {
"from": "sender@example.com",
"to": "recipient@example.com",
"subject": "Test Email",
"date": "2023-01-01T12:00:00Z"
},
"text": "This is the plain text content",
"html": "<p>This is the HTML content</p>",
"attachments": [
{
"filename": "document.pdf",
"contentType": "application/pdf",
"size": 1024
}
]
}
性能优化
mp在处理大邮件时表现良好,因为它:
- 使用流式处理,不一次性加载整个邮件到内存
- 采用高效的MIME解析算法
- 支持并行处理多个邮件
总结
mp是一个简单但功能强大的命令行邮件解析工具,适合需要将邮件内容转换为JSON格式的各种场景,如日志分析、邮件归档等。通过Go语言实现,保证了高效和可靠性。