mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-22 05:40:50 +01:00
#13 Allow attaching/embedding templates
Implemented the AttachTemplate and EmbedTemplate methods. Test coverage and documentation is still to be done
This commit is contained in:
parent
830b3745ba
commit
645ad2ce93
1 changed files with 31 additions and 0 deletions
31
msg.go
31
msg.go
|
@ -5,6 +5,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"html/template"
|
||||||
"io"
|
"io"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"mime"
|
"mime"
|
||||||
|
@ -435,6 +436,16 @@ func (m *Msg) AttachReader(n string, r io.Reader, o ...FileOption) {
|
||||||
m.attachments = m.appendFile(m.attachments, f, o...)
|
m.attachments = m.appendFile(m.attachments, f, o...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AttachTemplate adds the output of a template.Template pointer as File attachment to the Msg
|
||||||
|
func (m *Msg) AttachTemplate(n string, t *template.Template, d interface{}, o ...FileOption) error {
|
||||||
|
f, err := fileFromTemplate(n, t, d)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to attach template: %w", err)
|
||||||
|
}
|
||||||
|
m.attachments = m.appendFile(m.attachments, f, o...)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// EmbedFile adds an embedded File to the Msg
|
// EmbedFile adds an embedded File to the Msg
|
||||||
func (m *Msg) EmbedFile(n string, o ...FileOption) {
|
func (m *Msg) EmbedFile(n string, o ...FileOption) {
|
||||||
f := fileFromFS(n)
|
f := fileFromFS(n)
|
||||||
|
@ -450,6 +461,16 @@ func (m *Msg) EmbedReader(n string, r io.Reader, o ...FileOption) {
|
||||||
m.embeds = m.appendFile(m.embeds, f, o...)
|
m.embeds = m.appendFile(m.embeds, f, o...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EmbedTemplate adds the output of a template.Template pointer as embedded File to the Msg
|
||||||
|
func (m *Msg) EmbedTemplate(n string, t *template.Template, d interface{}, o ...FileOption) error {
|
||||||
|
f, err := fileFromTemplate(n, t, d)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to embed template: %w", err)
|
||||||
|
}
|
||||||
|
m.embeds = m.appendFile(m.embeds, f, o...)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Reset resets all headers, body parts and attachments/embeds of the Msg
|
// Reset resets all headers, body parts and attachments/embeds of the Msg
|
||||||
// It leaves already set encodings, charsets, boundaries, etc. as is
|
// It leaves already set encodings, charsets, boundaries, etc. as is
|
||||||
func (m *Msg) Reset() {
|
func (m *Msg) Reset() {
|
||||||
|
@ -668,6 +689,16 @@ func fileFromReader(n string, r io.Reader) *File {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fileFromTemplate returns a File pointer form a given template.Template
|
||||||
|
func fileFromTemplate(n string, t *template.Template, d interface{}) (*File, error) {
|
||||||
|
buf := bytes.Buffer{}
|
||||||
|
if err := t.Execute(&buf, d); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to execute template: %w", err)
|
||||||
|
}
|
||||||
|
f := fileFromReader(n, &buf)
|
||||||
|
return f, nil
|
||||||
|
}
|
||||||
|
|
||||||
// getEncoder creates a new mime.WordEncoder based on the encoding setting of the message
|
// getEncoder creates a new mime.WordEncoder based on the encoding setting of the message
|
||||||
func getEncoder(e Encoding) mime.WordEncoder {
|
func getEncoder(e Encoding) mime.WordEncoder {
|
||||||
switch e {
|
switch e {
|
||||||
|
|
Loading…
Reference in a new issue