我正在尝试解析电子邮件,但我使用邮件包时遇到了这种错误。是邮件包上的bug,还是我应该自己处理?
missing word in phrase: charset not supported: "gb18030"
charset not supported: "koi8-r" missing word in phrase: charset not supported: "ks_c_5601-1987"
我该如何修复它们呢?我认为我应该使用charset,但我不确定如何使用。下面是电子邮件标题的外观
Received: from smtpbg303.qq.com ([184.105.206.26]) by mx-ha.gmx.net
(mxgmxus001) with ESMTPS (Nemesis) id 0MAOx2-1X2yNC2ZFC-00BaVU for
<sormester@lobbyist.com>; Sat, 14 Jun 2014 18:11:48 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201307;
t=1402762305; bh=imEvSr8IPsqWTXU63xUHRv+wuQG+Tcz2mPP9ai4rrE4=;
h=X-QQ-FEAT:X-QQ-SSF:X-HAS-ATTACH:X-QQ-BUSINESS-ORIGIN:
X-Originating-IP:In-Reply-To:References:X-QQ-STYLE:X-QQ-mid:From:To:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Date:
X-Priority:Message-ID:X-QQ-MIME:X-Mailer:X-QQ-Mailer:
X-QQ-ReplyHash:X-QQ-SENDSIZE:X-QQ-FName:X-QQ-LocalIP;
b=QXs4CveboS8nG6htN9W6amC3X+F7X3ZtFrt6jrjWI+RmbvqBuTCVmX9IlaqCX84H8
n14x2Wp7x4kDYcNRqhe+HjTpf715TTQXc4d40b9e38frC/5qIhpMtYNsD8iEJwRzHW
U3xi8Yq7OCIB303fIpytx8tOjexQpZKSHbJ7ecX0=
X-QQ-FEAT: zaIfg0hwV2pIDflZYPQUsuPPXG5wtRVHJU6PiOYLBBA=
X-QQ-SSF: 00010000000000F000000000000000L
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 180.155.99.102
In-Reply-To: <trinity-b7c6d611-52fd-4afa-b739-2deb243532a6-1402761364579@3capp-mailcom-lxa05>
References: <97e07dab7c2d1a005ed928c4350690e0@hotels-desk.co.uk>,
<tencent_105D3DC11702F53465C0025D@qq.com>
<trinity-b7c6d611-52fd-4afa-b739-2deb243532a6-1402761364579@3capp-mailcom-lxa05>
X-QQ-STYLE:
X-QQ-mid: webmail474t1402762303t356131
From: "=?gb18030?B?08bTzg==?=" <38438nx@qq.com>
To: "=?gb18030?B?V2lsaGVsbSBLdW1tZXI=?=" <sormester@lobbyist.com>
Subject: =?gb18030?B?u9i4tKO6ILvYuLSjulBhbGFjZSBXZXN0bWluc3Rl?=
=?gb18030?B?cjogMDEtMDctMjAxNCAtIDA0LTA3LTIwMTQ=?=
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_539C743F_08A07490_0157E268"
Content-Transfer-Encoding: 8Bit
Date: Sun, 15 Jun 2014 00:11:43 +0800
X-Priority: 3
Message-ID: <tencent_573A737E73016B9F5A3D10C1@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 170675637
X-QQ-SENDSIZE: 520
X-QQ-FName: 7B2EFFAD16B8462B84D3499A4CC7DDEF
X-QQ-LocalIP: 163.177.66.155
Envelope-To: <sormester@lobbyist.com>
X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3;
X-GMX-Antivirus: 0 (no virus found)编辑:
我已经尝试使用charset包了,但是没有效果。我仍然在相同的消息上收到相同的错误。
import "code.google.com/p/go-imap/go1/imap"
header := imap.AsBytes(rsp.MessageInfo().Attrs["RFC822.HEADER"])
r, err := charset.NewReader("UTF-8", bytes.NewReader(header))
if err != nil {
log.Fatal(err)
}
fmt.Printf("new char is %v", r)
msg, err := mail.ReadMessage(r)
if err != nil {
log.Fatal(err)
return mgs, err
}
mg.From, err = msg.Header.AddressList("From")
if err != nil {
log.Errorf("NO FROM msg %s, err %v", header, err)
return
}邮件包似乎只能解码rfc2047,但字符集包不支持这一点
character set "rfc2047" not found看起来哪个mahonia可以解决这个问题?
发布于 2014-07-23 14:18:29
我希望这对那些可能考虑去处理电子邮件(即开发客户端应用程序)的人有所帮助。标准的Go标准库似乎还不够成熟,无法处理电子邮件。它不能处理多部分,不同的字符集等。在尝试了几乎一天的不同的hack和包之后,我决定扔掉go代码,使用一个旧的好的JavaMail解决方案。
发布于 2014-07-24 14:25:04
Alexey Vasiliev的麻省理工学院许可的http://github.com/le0pard/go-falcon/包括一个parser包,该包可以应用于解码报头所需的任何编码包(具体内容在utils.go中)。
package main
import (
"bufio"
"bytes"
"fmt"
"net/textproto"
"github.com/le0pard/go-falcon/parser"
)
var msg = []byte(`Subject: =?gb18030?B?u9i4tKO6ILvYuLSjulBhbGFjZSBXZXN0bWluc3Rl?=
=?gb18030?B?cjogMDEtMDctMjAxNCAtIDA0LTA3LTIwMTQ=?=
`)
func main() {
tpr := textproto.NewReader(bufio.NewReader(bytes.NewBuffer(msg)))
mh, err := tpr.ReadMIMEHeader()
if err != nil {
panic(err)
}
for name, vals := range mh {
for _, val := range vals {
val = parser.MimeHeaderDecode(val)
fmt.Print(name, ": ", val, "\n")
}
}
}看起来它的parser.FixEncodingAndCharsetOfPart也被包用来解码/转换内容,尽管在[]byte body和string之间进行转换会产生一些额外的分配。如果您发现API对您不起作用,那么您至少可以使用代码来看看如何做到这一点。
通过Godoc.org的"...and is imported by 3 packages“链接从encoding/simplifiedchinese找到--万岁的godoc.org!
发布于 2018-05-24 08:18:46
我一直在使用github.com/jhillyerd/enmime,它在这方面似乎没有问题。它将解析出头部和正文内容。给定一个io.Reader r
// Parse message body
env, _ := enmime.ReadEnvelope(r)
// Headers can be retrieved via Envelope.GetHeader(name).
fmt.Printf("From: %v\n", env.GetHeader("From"))
// Address-type headers can be parsed into a list of decoded mail.Address structs.
alist, _ := env.AddressList("To")
for _, addr := range alist {
fmt.Printf("To: %s <%s>\n", addr.Name, addr.Address)
}
fmt.Printf("Subject: %v\n", env.GetHeader("Subject"))
// The plain text body is available as mime.Text.
fmt.Printf("Text Body: %v chars\n", len(env.Text))
// The HTML body is stored in mime.HTML.
fmt.Printf("HTML Body: %v chars\n", len(env.HTML))
// mime.Inlines is a slice of inlined attacments.
fmt.Printf("Inlines: %v\n", len(env.Inlines))
// mime.Attachments contains the non-inline attachments.
fmt.Printf("Attachments: %v\n", len(env.Attachments))https://stackoverflow.com/questions/24902453
复制相似问题