Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 主题编码电子邮件(RFC2047)。解码错误_Email_Go - Fatal编程技术网

Email 主题编码电子邮件(RFC2047)。解码错误

Email 主题编码电子邮件(RFC2047)。解码错误,email,go,Email,Go,我正在Golang编写应用程序。我需要解码电子邮件主题 原始主题: s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXFhCBuaWVydWNob21vxZtjaQ==?=" fmt.Println(RFC2047.Decode(s)) // Dom.eu - raport z eksportu ogłoszeń nieruchomości 拉波特·埃克斯波特·奥戈斯泽·涅鲁科莫奇 编码主题: =?utf-8?B?R

我正在Golang编写应用程序。我需要解码电子邮件主题

原始主题:

s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXFhCBuaWVydWNob21vxZtjaQ==?="
fmt.Println(RFC2047.Decode(s))

// Dom.eu - raport z eksportu ogłoszeń nieruchomości
拉波特·埃克斯波特·奥戈斯泽·涅鲁科莫奇

编码主题:

=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXF?=  =?utf-8?B?hCBuaWVydWNob21vxZtjaQ==?=^M
解码主题:“Raport z Eksortu ogłosze▒ ▒ 尼鲁科莫ści”

我使用github.com/famz/rfc247解码电子邮件主题

我的代码很简单:

RFC2047.Decode(msg.Header.Get("Subject"))

为什么,解码后的主题是破碎的?其他主题被正确解码。这是一个编码错误的主题吗?

该主题编码错误。 艺龙网被分成两个MIME编码的字(因为编码的行将大于76个字符),但它被分割在<<代码> 字符的中间。

如果将两个部分合并为一个编码字符串,则返回原始主题:

s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXFhCBuaWVydWNob21vxZtjaQ==?="
fmt.Println(RFC2047.Decode(s))

// Dom.eu - raport z eksportu ogłoszeń nieruchomości

如果您使用的是Go 1.5,则可以使用的新功能

如果您使用的是较旧版本的Go,则可以使用

例如:

package main

import (
    "fmt"
    "mime" // When using Go 1.5
    mime "gopkg.in/alexcesaro/quotedprintable.v3" // When using older Go versions
)

func main() {
    s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXF?=  =?utf-8?B?hCBuaWVydWNob21vxZtjaQ==?="
    dec := new(mime.WordDecoder)
    subject, err := dec.DecodeHeader(s)
    if err != nil {
        panic(err)
    }
    fmt.Println(subject)
    // Output:
    // Dom.eu - raport z eksportu ogłoszeń nieruchomości
}

在空闲时间我写了这个函数。函数连接字符串的各个部分并返回一个字符串

func parseSubject(s string) string {
   patternType := regexp.MustCompile("(?i)=\\?.*?\\?.*?\\?")
   resType := patternType.FindString(s)

   if resType == "" {
      return s
   } else {
      pattern := regexp.MustCompile("(?i)=\\?.*?\\?.*?\\?|\\s+|\\?=")
      res := pattern.ReplaceAllLiteral([]byte(s), []byte(""))

      return resType + string(res) + "?="
   }
}

看起来像是将一个UTF-8字符一分为二。@Tomwide:是的,我提到过这就是为什么这个单词被拆分了,尽管不正确。@Tomwide:哦,76chars(78-CRLF)只是每行的建议。您可以跨多行折叠标题:请参见中的2.3.3