代码拉取完成,页面将自动刷新
package email
import (
"bytes"
"encoding/base64"
"fmt"
"io"
"mime/quotedprintable"
)
func writeBodyTo(body []byte, p properties, buf *bytes.Buffer) error {
switch p.contentTransferEncoding {
case "base64", "":
if err := writeBase64Body(body, buf); err != nil {
return err
}
case "quotedprintable":
if err := writeQuotedprintableBody(body, buf); err != nil {
return err
}
case "bit7", "bit8", "binary":
if _, err := buf.Write(body); err != nil {
return err
}
default:
return fmt.Errorf("Unknown %s: %s", ContentTransferEncoding, p.contentTransferEncoding)
}
return buf.WriteByte('\n')
}
func writeBase64Body(body []byte, writer io.Writer) error {
w := base64.NewEncoder(base64.StdEncoding, NewLineWriter(writer))
defer w.Close()
_, err := w.Write(body)
return err
}
func writeQuotedprintableBody(body []byte, writer io.Writer) error {
w := quotedprintable.NewWriter(writer)
defer w.Close()
_, err := w.Write(body)
return err
}
// LineWriter add "\n" after every 76 bytes.
type LineWriter struct {
w io.Writer
// how many bytes have writtern on the last line which have not added "\n".
lastLineWrittern int
}
func NewLineWriter(w io.Writer) *LineWriter {
return &LineWriter{w: w}
}
func (lw *LineWriter) Write(b []byte) (total int, err error) {
const maxLineLen = 76
for expect := maxLineLen - lw.lastLineWrittern; len(b) >= expect; {
n, err := lw.w.Write(b[:expect])
total += n
if err != nil {
return total, err
}
if _, err := lw.w.Write([]byte("\n")); err != nil {
return total, err
}
b = b[expect:]
expect = maxLineLen
lw.lastLineWrittern = 0
}
n, err := lw.w.Write(b)
total += n
if err != nil {
return total, err
}
lw.lastLineWrittern += len(b)
return total, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。