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
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
Po analizowany e-mail z netto/mail i mieć Message, jeśli ciało jest quoted-printable kodowane (Content-Transfer-Encoding: quoted-printable
):
- przypadku korzystania Go 1.5, użyj quotedprintable package from the standard library
- jeśli korzystasz ze starszej wersji Go używać drop-in replacement
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.
i jeśli jest zakodowany przy użyciu innej rzeczy/zestawu znaków, co powinienem zrobić? . Zobacz http://stackoverflow.com/q/24902453/3780579 – hey
[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
ok ... Mam zamiar spróbować tego :) – hey
W końcu porzuciłem Go dla tego projektu. ibex lib nie wydaje się pomóc. http://stackoverflow.com/a/24903176/3780579 – hey
@Hy, ok. Przekazałem twoje drugie pytanie i tam odpowiem. – VonC