multipart
parent
14036702ee
commit
9b1df155ec
|
|
@ -5,6 +5,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"mime"
|
||||||
|
"mime/multipart"
|
||||||
"net/mail"
|
"net/mail"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -14,6 +16,32 @@ import (
|
||||||
"gitea.inhome.blapointe.com/local/args"
|
"gitea.inhome.blapointe.com/local/args"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type MultipartReaderReader struct {
|
||||||
|
buff []byte
|
||||||
|
r *multipart.Reader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mrr *MultipartReaderReader) Read(b []byte) (int, error) {
|
||||||
|
n := copy(b, mrr.buff)
|
||||||
|
mrr.buff = mrr.buff[n:]
|
||||||
|
for n < len(b) {
|
||||||
|
part, err := mrr.r.NextPart()
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
defer part.Close()
|
||||||
|
|
||||||
|
mrr.buff, err = io.ReadAll(part)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
m := copy(b, mrr.buff)
|
||||||
|
mrr.buff = mrr.buff[m:]
|
||||||
|
n += m
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
emailer := contact.NewEmailer()
|
emailer := contact.NewEmailer()
|
||||||
as := args.NewArgSet()
|
as := args.NewArgSet()
|
||||||
|
|
@ -47,7 +75,17 @@ func main() {
|
||||||
}
|
}
|
||||||
emails := make([]map[string]any, 0, emailer.Limit)
|
emails := make([]map[string]any, 0, emailer.Limit)
|
||||||
for msg := range msgs {
|
for msg := range msgs {
|
||||||
b, _ := ioutil.ReadAll(io.LimitReader(msg.Body, int64(as.GetInt("b"))))
|
var r io.Reader
|
||||||
|
if n := int64(as.GetInt("b")); n >= 0 {
|
||||||
|
r = io.LimitReader(msg.Body, n)
|
||||||
|
} else if mediaType, params, _ := mime.ParseMediaType(msg.Header.Get("Content-Type")); strings.HasPrefix(mediaType, "multipart/") {
|
||||||
|
r = &MultipartReaderReader{
|
||||||
|
r: multipart.NewReader(msg.Body, params["boundary"]),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
r = msg.Body
|
||||||
|
}
|
||||||
|
b, _ := ioutil.ReadAll(r)
|
||||||
s := strings.ReplaceAll(string(b), "\r\n", "\n")
|
s := strings.ReplaceAll(string(b), "\r\n", "\n")
|
||||||
s = strings.ReplaceAll(string(s), "\n", "\n")
|
s = strings.ReplaceAll(string(s), "\n", "\n")
|
||||||
s = strings.ReplaceAll(string(s), "\r", "\n")
|
s = strings.ReplaceAll(string(s), "\r", "\n")
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue