Description
What version of Go are you using (go version
)?
$ go version go version go1.11.1 darwin/amd64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go envGOARCH="amd64"
GOBIN=""
GOCACHE="/Users/abuchanan/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/abuchanan/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/abuchanan/projects/mailer/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/r8/1_92bxy977zcfcj2jpp5j2dc0000gn/T/go-build702584477=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
https://play.golang.org/p/7x85EhvIbZZ
What did you expect to see?
I expected the part headers to include the Content-Transfer-Encoding
as-is, and for the part body reader to return content as-is.
What did you see instead?
I found that Part
has special handling for parts with Content-Transfer-Encoding: quoted-printable
, which as introduced in issue #4411.
GitHub has also just led me to issue #26803 (which I failed to find before) which also proposes a way to bypass this via Part.NextRawPart
. Unfortunately, although that proposal was accepted, the issue was closed by the submitter before being implemented.
Having access to the raw part body and unmodified headers is useful. In particular, for an IMAP server, I need to be able to inspect the part headers and body, including the Content-Transfer-Encoding
header, in order to build the BODYSTRUCTURE response.
I can think of a couple workarounds for my particular server but they're not great, and I think this deserves a fix in the std library.