<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      微讀 Go 標準庫 - net/mail 解析郵件地址與消息格式

      專注于 Golang 相關文章和資料的開源項目 go-home ,歡迎關注!

      想要解析郵件地址或處理郵件消息?Go 的 net/mail 包提供了符合 RFC 5322 標準的郵件解析能力,讓你輕松處理郵件相關的各種場景。

      1. 解析郵件地址

      最常見的需求就是解析郵件地址。net/mail 能智能識別各種格式:

      package main
      
      import (
          "fmt"
          "net/mail"
      )
      
      func main() {
          // 解析帶名稱的郵件地址
          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. 批量解析郵件地址列表

      處理群發郵件?ParseAddressList 一次搞定多個地址:

      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("發件人:", 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. 解析郵件日期

      郵件日期格式復雜?ParseDate 幫你轉換成 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
      
      // 也能處理帶時區的格式
      dateStr2 := "23 Jun 2024 09:30:00 EST"
      t2, _ := mail.ParseDate(dateStr2)
      fmt.Println(t2.UTC())
      

      5. 構建郵件地址字符串

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

      addr := &mail.Address{
          Name:    "技術支持",
          Address: "support@example.com",
      }
      fmt.Println(addr.String())
      // 輸出: "技術支持" <support@example.com>
      
      // 特殊字符會自動轉義
      addr2 := &mail.Address{
          Name:    `John "The Boss" Doe`,
          Address: "john@example.com",
      }
      fmt.Println(addr2.String())
      // 輸出: "John \"The Boss\" Doe" <john@example.com>
      

      6. 處理郵件頭部編碼

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

      // 解析包含中文的郵件
      emailStr := `From: =?UTF-8?B?5byg5LiJ?= <zhangsan@example.com>
      To: lisi@example.com
      Subject: =?UTF-8?B?5rWL6K+V6YKu5Lu2?=
      
      郵件正文內容`
      
      msg, _ := mail.ReadMessage(strings.NewReader(emailStr))
      from, _ := msg.Header.AddressList("From")
      fmt.Println(from[0].Name) // 能正確解析出中文名
      

      7. 驗證郵件地址格式

      利用 ParseAddress 進行郵件格式驗證:

      func isValidEmail(email string) bool {
          _, err := mail.ParseAddress(email)
          return err == nil
      }
      
      // 測試
      fmt.Println(isValidEmail("user@example.com"))     // true
      fmt.Println(isValidEmail("invalid.email"))        // false
      fmt.Println(isValidEmail("user@"))                // false
      

      8. 提取郵件附件信息

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

      msg, _ := mail.ReadMessage(reader)
      contentType := msg.Header.Get("Content-Type")
      
      // 檢查是否為 multipart 消息
      if strings.Contains(contentType, "multipart") {
          // 獲取邊界標識
          boundary := extractBoundary(contentType)
          fmt.Println("這是一個包含附件的郵件")
          fmt.Println("邊界標識:", boundary)
      }
      
      // 檢查附件相關頭部
      disposition := msg.Header.Get("Content-Disposition")
      if strings.Contains(disposition, "attachment") {
          fmt.Println("發現附件")
      }
      

      net/mail 包雖然簡單,卻是處理郵件相關任務的利器。它嚴格遵循 RFC 標準,讓你的郵件處理代碼更加健壯可靠。記住,它主要用于解析郵件格式,如果需要發送郵件,你需要配合 net/smtp 包使用。

      posted @ 2025-08-27 12:57  MARIOOW  閱讀(206)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产午夜理论片不卡| 在线中文字幕国产一区| 91久久偷偷做嫩草影院免费看| 免费无码无遮挡裸体视频在线观看| 开心激情站一区二区三区| 日韩伦人妻无码| 国产精品人妻熟女男人的天堂| 国产精品麻豆欧美日韩ww | 久久久久成人精品无码中文字幕 | 中文字幕精品久久久久人妻红杏1| 韩国午夜理伦三级| 亚洲最大中文字幕无码网站| 国产综合视频一区二区三区| 国产福利社区一区二区| 在国产线视频A在线视频| 亚洲一区二区av免费| AV人摸人人人澡人人超碰| 精品午夜福利在线视在亚洲| 中国xxx农村性视频| 国产精品亚洲综合第一页| 日韩中文字幕精品人妻| 无码A级毛片免费视频下载| 欧美男男作爱videos可播放| 麻豆国产成人AV在线播放| 综合久青草视频在线观看| 国产第一页浮力影院入口| 麻豆国产传媒精品视频| 亚洲欧美在线一区中文字幕| 中国产无码一区二区三区| 日韩乱码视频一区二区三区 | 欧美成a人片在线观看久| 日韩精品一区二区都可以| 狠狠亚洲色一日本高清色| 国产精品麻豆成人AV电影艾秋 | 别揉我奶头~嗯~啊~的视频 | 穆棱市| 性色av一区二区三区v视界影院 | 国产亚洲精品一区二区不卡| 国产不卡一区二区四区| 精品国产迷系列在线观看| 亚洲自拍偷拍一区二区三区|