最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言利用net/mail包解析郵件地址與消息格式

 更新時(shí)間:2025年08月28日 09:35:47   作者:MARIOW  
Go 的 net/mail 包提供了符合 RFC 5322 標(biāo)準(zhǔn)的郵件解析能力,讓你輕松處理郵件相關(guān)的各種場(chǎng)景,下面就跟隨小編一起來(lái)深入了解下具體實(shí)現(xiàn)吧

想要解析郵件地址或處理郵件消息?Go 的 net/mail 包提供了符合 RFC 5322 標(biāo)準(zhǔn)的郵件解析能力,讓你輕松處理郵件相關(guān)的各種場(chǎng)景。

1. 解析郵件地址

最常見(jiàn)的需求就是解析郵件地址。net/mail 能智能識(shí)別各種格式:

package main

import (
    "fmt"
    "net/mail"
)

func main() {
    // 解析帶名稱(chēng)的郵件地址
    addr, _ := mail.ParseAddress("張三 <zhangsan@example.com>")
    fmt.Println(addr.Name)    // 張三
    fmt.Println(addr.Address) // zhangsan@example.com
    
    // 解析純郵件地址
    addr2, _ := mail.ParseAddress("admin@example.com")
    fmt.Println(addr2.Address) // admin@example.com
}

2. 批量解析郵件地址列表

處理群發(fā)郵件?ParseAddressList 一次搞定多個(gè)地址:

addresses := "Alice <alice@example.com>, Bob <bob@example.com>, charlie@example.com"
list, _ := mail.ParseAddressList(addresses)

for _, addr := range list {
    fmt.Printf("姓名: %s, 郵箱: %s\n", addr.Name, addr.Address)
}
// 輸出:
// 姓名: Alice, 郵箱: alice@example.com
// 姓名: Bob, 郵箱: bob@example.com
// 姓名: , 郵箱: charlie@example.com

3. 讀取完整郵件消息

net/mail 能解析完整的郵件消息,包括頭部和正文:

import (
    "io"
    "net/mail"
    "strings"
)

func parseEmail(emailContent string) {
    reader := strings.NewReader(emailContent)
    msg, _ := mail.ReadMessage(reader)
    
    // 獲取郵件頭部信息
    header := msg.Header
    fmt.Println("發(fā)件人:", header.Get("From"))
    fmt.Println("收件人:", header.Get("To"))
    fmt.Println("主題:", header.Get("Subject"))
    fmt.Println("日期:", header.Get("Date"))
    
    // 讀取郵件正文
    body, _ := io.ReadAll(msg.Body)
    fmt.Println("正文:", string(body))
}

4. 解析郵件日期

郵件日期格式復(fù)雜?ParseDate 幫你轉(zhuǎn)換成 Go 的 time.Time:

// 解析 RFC 5322 格式的日期
dateStr := "Mon, 23 Jun 2024 09:30:00 +0800"
t, _ := mail.ParseDate(dateStr)
fmt.Println(t.Format("2006-01-02 15:04:05"))
// 輸出: 2024-06-23 09:30:00

// 也能處理帶時(shí)區(qū)的格式
dateStr2 := "23 Jun 2024 09:30:00 EST"
t2, _ := mail.ParseDate(dateStr2)
fmt.Println(t2.UTC())

5. 構(gòu)建郵件地址字符串

Address 類(lèi)型提供了 String() 方法,能正確格式化郵件地址:

addr := &mail.Address{
    Name:    "技術(shù)支持",
    Address: "support@example.com",
}
fmt.Println(addr.String())
// 輸出: "技術(shù)支持" <support@example.com>

// 特殊字符會(huì)自動(dòng)轉(zhuǎn)義
addr2 := &mail.Address{
    Name:    `John "The Boss" Doe`,
    Address: "john@example.com",
}
fmt.Println(addr2.String())
// 輸出: "John \"The Boss\" Doe" <john@example.com>

6. 處理郵件頭部編碼

處理國(guó)際化郵件?net/mail 支持 RFC 2047 編碼的頭部:

// 解析包含中文的郵件
emailStr := `From: =?UTF-8?B?5byg5LiJ?= <zhangsan@example.com>
To: lisi@example.com
Subject: =?UTF-8?B?5rWL6K+V6YKu5Lu2?=

郵件正文內(nèi)容`

msg, _ := mail.ReadMessage(strings.NewReader(emailStr))
from, _ := msg.Header.AddressList("From")
fmt.Println(from[0].Name) // 能正確解析出中文名

7. 驗(yàn)證郵件地址格式

利用 ParseAddress 進(jìn)行郵件格式驗(yàn)證:

func isValidEmail(email string) bool {
    _, err := mail.ParseAddress(email)
    return err == nil
}

// 測(cè)試
fmt.Println(isValidEmail("user@example.com"))     // true
fmt.Println(isValidEmail("invalid.email"))        // false
fmt.Println(isValidEmail("user@"))                // false

8. 提取郵件附件信息

雖然 net/mail 不直接處理附件,但能獲取相關(guān)頭部信息:

msg, _ := mail.ReadMessage(reader)
contentType := msg.Header.Get("Content-Type")

// 檢查是否為 multipart 消息
if strings.Contains(contentType, "multipart") {
    // 獲取邊界標(biāo)識(shí)
    boundary := extractBoundary(contentType)
    fmt.Println("這是一個(gè)包含附件的郵件")
    fmt.Println("邊界標(biāo)識(shí):", boundary)
}

// 檢查附件相關(guān)頭部
disposition := msg.Header.Get("Content-Disposition")
if strings.Contains(disposition, "attachment") {
    fmt.Println("發(fā)現(xiàn)附件")
}

net/mail 包雖然簡(jiǎn)單,卻是處理郵件相關(guān)任務(wù)的利器。它嚴(yán)格遵循 RFC 標(biāo)準(zhǔn),讓你的郵件處理代碼更加健壯可靠。記住,它主要用于解析郵件格式,如果需要發(fā)送郵件,你需要配合 net/smtp 包使用。

到此這篇關(guān)于Go語(yǔ)言利用net/mail包解析郵件地址與消息格式的文章就介紹到這了,更多相關(guān)Go解析郵件地址與消息格式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言題解LeetCode268丟失的數(shù)字示例詳解

    Go語(yǔ)言題解LeetCode268丟失的數(shù)字示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode268丟失的數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • go的defer和閉包示例說(shuō)明(非內(nèi)部實(shí)現(xiàn))

    go的defer和閉包示例說(shuō)明(非內(nèi)部實(shí)現(xiàn))

    這篇文章主要為大家介紹了go的defer和閉包示例說(shuō)明(非內(nèi)部實(shí)現(xiàn)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Go等待協(xié)程之WaitGroup使用與避坑指南

    Go等待協(xié)程之WaitGroup使用與避坑指南

    在Go并發(fā)編程中,goroutine非常輕量,但如何優(yōu)雅地等待多個(gè)協(xié)程執(zhí)行完成,才是工程實(shí)踐中的關(guān)鍵問(wèn)題,很多人第一反應(yīng)是用 channel,但其實(shí)sync.WaitGroup才是更合適的工具,這篇文章不僅講用法,還會(huì)帶你深入理解WaitGroup的本質(zhì)、實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2026-04-04
  • 小學(xué)生也能看懂的Golang異常處理recover panic

    小學(xué)生也能看懂的Golang異常處理recover panic

    在其他語(yǔ)言里,宕機(jī)往往以異常的形式存在,底層拋出異常,上層邏輯通過(guò) try/catch 機(jī)制捕獲異常,沒(méi)有被捕獲的嚴(yán)重異常會(huì)導(dǎo)致宕機(jī),go語(yǔ)言追求簡(jiǎn)潔,優(yōu)雅,Go語(yǔ)言不支持傳統(tǒng)的 try…catch…finally 這種異常
    2021-09-09
  • Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過(guò)程詳解

    Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要為大家介紹了Go創(chuàng)建Grpc鏈接池實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • go語(yǔ)言?xún)?nèi)存泄漏的常見(jiàn)形式

    go語(yǔ)言?xún)?nèi)存泄漏的常見(jiàn)形式

    本文主要介紹了go語(yǔ)言?xún)?nèi)存泄漏的常見(jiàn)形式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式

    Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式

    這篇文章主要介紹了Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • golang time常用方法詳解

    golang time常用方法詳解

    這篇文章主要介紹了golang time常用方法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Go語(yǔ)言基礎(chǔ)go install命令使用示例詳解

    Go語(yǔ)言基礎(chǔ)go install命令使用示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)go install命令的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • 云端golang開(kāi)發(fā),無(wú)需本地配置,能上網(wǎng)就能開(kāi)發(fā)和運(yùn)行

    云端golang開(kāi)發(fā),無(wú)需本地配置,能上網(wǎng)就能開(kāi)發(fā)和運(yùn)行

    這篇文章主要介紹了云端golang開(kāi)發(fā),無(wú)需本地配置,能上網(wǎng)就能開(kāi)發(fā)和運(yùn)行的相關(guān)資料,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

广西| 武穴市| 瑞昌市| 灵寿县| 肃宁县| 永靖县| 苍溪县| 南雄市| 同德县| 余姚市| 新巴尔虎左旗| 马公市| 东辽县| 英德市| 阿合奇县| 温宿县| 广东省| 建昌县| 金堂县| 大安市| 石棉县| 岗巴县| 长宁县| 大关县| 武城县| 永仁县| 宜昌市| 巴中市| 类乌齐县| 江油市| 新竹市| 崇礼县| 灵璧县| 乌苏市| 茂名市| 昭苏县| 曲沃县| 河北区| 咸丰县| 开封县| 集安市|