Skip to content

Commit cea389d

Browse files
committed
feat: mime/multipartutil: add NewPartEmpty(), PartsSet.AddMailBody()
1 parent a86eac6 commit cea389d

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

mime/multipartutil/part.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,17 @@ type Part struct {
3434
BodyEncodeBase64 bool
3535
}
3636

37+
func NewPartEmpty(ct string) Part {
38+
p := Part{
39+
Type: PartTypeRaw,
40+
HeaderRaw: textproto.MIMEHeader{},
41+
}
42+
if ct = strings.TrimSpace(ct); ct != "" {
43+
p.HeaderRaw[hum.HeaderContentType] = []string{ct}
44+
}
45+
return p
46+
}
47+
3748
// HeaderBodyFilepath sets Content-Disposition and Content-Type.
3849
func (p Part) HeaderBodyFilepath() (textproto.MIMEHeader, []byte, error) {
3950
header := textproto.MIMEHeader{}

mime/multipartutil/parts_set.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,22 @@ type PartsSet struct {
55
Parts []Part
66
}
77

8-
func NewPartsSet() PartsSet {
9-
return PartsSet{Parts: []Part{}}
8+
func NewPartsSet(ct string) PartsSet {
9+
return PartsSet{
10+
ContentType: ct,
11+
Parts: []Part{}}
1012
}
1113

12-
func (ms PartsSet) Builder(close bool) (MultipartBuilder, error) {
14+
func (ps *PartsSet) AddMailBody(textBody, htmlBody []byte) error {
15+
if p, err := NewPartAlternativeOrNot(textBody, htmlBody); err != nil {
16+
return err
17+
} else {
18+
ps.Parts = append([]Part{p}, ps.Parts...)
19+
return nil
20+
}
21+
}
22+
23+
func (ms *PartsSet) Builder(close bool) (MultipartBuilder, error) {
1324
mb := NewMultipartBuilder()
1425
if len(ms.Parts) == 0 {
1526
err := mb.Close()
@@ -33,7 +44,7 @@ func (ms PartsSet) Builder(close bool) (MultipartBuilder, error) {
3344

3445
// Part returns the MultipartSimple as a Part. This can be used for
3546
// creating parts such as `multipart/alternative`.
36-
func (ms PartsSet) Part() (Part, error) {
47+
func (ms *PartsSet) Part() (Part, error) {
3748
ct, body, err := ms.Strings()
3849
if err != nil {
3950
return Part{}, err
@@ -47,12 +58,16 @@ func (ms PartsSet) Part() (Part, error) {
4758
}
4859
}
4960

50-
func (ms PartsSet) Strings() (ctHeader, body string, err error) {
51-
mb, err := ms.Builder(true)
61+
func (ps *PartsSet) Strings() (ctHeader, body string, err error) {
62+
if len(ps.Parts) == 0 {
63+
return ps.ContentType, "", nil
64+
}
65+
66+
mb, err := ps.Builder(true)
5267
if err != nil {
5368
return
5469
}
55-
ctHeader = mb.ContentType(ms.ContentType)
70+
ctHeader = mb.ContentType(ps.ContentType)
5671
body = mb.String()
5772
return
5873
}

0 commit comments

Comments
 (0)