2014-07-22 29 views
7

Pracuję nad klientem poczty e-mail i część tego potrzebuję do dekodowania treści wiadomości e-mail. Używam pakietu IMAP do pobierania wiadomości, ale nie ma metody "dekodowania". Sprawdziłem również net/mail package bez powodzenia. Wydaje się, że tylko nagłówki mają parser. Czy istnieje jakaś biblioteka, z której mogę korzystać?Jak rozszyfrować treść pocztową w Go

Odpowiedz

1

Możesz sprawdzić, czy taki projekt, jak artagnon/ibex, który używa go-imap package, zapewnia tę funkcję.
Zobacz na przykład jego test artagnon/ibex/imap.go#L288-L301.

var body []byte 
cmd, err = imap.Wait(c.UIDFetch(set, "BODY.PEEK[]")) 
if (err != nil) { 
    fmt.Println(err.Error()) 
    return nil 
} 
body = imap.AsBytes(cmd.Data[0].MessageInfo().Attrs["BODY[]"]) 
cmd.Data = nil 

bytestring, err := json.Marshal(MessageDetail{string(body)}) 
if (err != nil) { 
    fmt.Println(err.Error()) 
    return nil 
} 
return bytestring 
+0

W końcu porzuciłem Go dla tego projektu. ibex lib nie wydaje się pomóc. http://stackoverflow.com/a/24903176/3780579 – hey

+0

@Hy, ok. Przekazałem twoje drugie pytanie i tam odpowiem. – VonC

7

Po analizowany e-mail z netto/mail i mieć Message, jeśli ciało jest quoted-printable kodowane (Content-Transfer-Encoding: quoted-printable):

Przykład:

r := quotedprintable.NewReader(msg.Body) 
body, err := ioutil.ReadAll(r) // body now contains the decoded body 

Jeśli treść jest zakodowana przy użyciu base64 (Content-Transfer-Encoding: base64), należy użyć wartości encoding/base64 package.

+0

i jeśli jest zakodowany przy użyciu innej rzeczy/zestawu znaków, co powinienem zrobić? . Zobacz http://stackoverflow.com/q/24902453/3780579 – hey

+1

[Tylko inne kodowanie, które najprawdopodobniej] (http://en.wikipedia.org/wiki/MIME#Content-Transfer-Encoding) to 7bit. W tym przypadku nie musisz nic robić. – Ale

+0

ok ... Mam zamiar spróbować tego :) – hey