Refactor Messenger/Emailer to accept attachments
This commit is contained in:
parent
533caf894b
commit
81d3046374
|
@ -509,7 +509,7 @@ func sendTestMessage(sub *models.Subscriber, camp *models.Campaign, app *App) er
|
||||||
fmt.Sprintf("Error rendering message: %v", err))
|
fmt.Sprintf("Error rendering message: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := app.Messenger.Push(camp.FromEmail, []string{sub.Email}, camp.Subject, m.Body); err != nil {
|
if err := app.Messenger.Push(camp.FromEmail, []string{sub.Email}, camp.Subject, m.Body, nil); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -238,7 +238,7 @@ func (m *Manager) SpawnWorkers() {
|
||||||
msg.from,
|
msg.from,
|
||||||
[]string{msg.to},
|
[]string{msg.to},
|
||||||
msg.Campaign.Subject,
|
msg.Campaign.Subject,
|
||||||
msg.Body)
|
msg.Body, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.logger.Printf("error sending message in campaign %s: %v",
|
m.logger.Printf("error sending message in campaign %s: %v",
|
||||||
msg.Campaign.Name, err)
|
msg.Campaign.Name, err)
|
||||||
|
|
|
@ -66,7 +66,7 @@ func (e *emailer) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push pushes a message to the server.
|
// Push pushes a message to the server.
|
||||||
func (e *emailer) Push(fromAddr string, toAddr []string, subject string, m []byte) error {
|
func (e *emailer) Push(fromAddr string, toAddr []string, subject string, m []byte, atts []*Attachment) error {
|
||||||
var key string
|
var key string
|
||||||
|
|
||||||
// If there are more than one SMTP servers, send to a random
|
// If there are more than one SMTP servers, send to a random
|
||||||
|
@ -77,12 +77,28 @@ func (e *emailer) Push(fromAddr string, toAddr []string, subject string, m []byt
|
||||||
key = e.serverNames[0]
|
key = e.serverNames[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Are there attachments?
|
||||||
|
var files []*email.Attachment
|
||||||
|
if atts != nil {
|
||||||
|
files = make([]*email.Attachment, 0, len(atts))
|
||||||
|
for _, f := range atts {
|
||||||
|
a := &email.Attachment{
|
||||||
|
Filename: f.Name,
|
||||||
|
Header: f.Header,
|
||||||
|
Content: make([]byte, len(f.Content)),
|
||||||
|
}
|
||||||
|
copy(a.Content, f.Content)
|
||||||
|
files = append(files, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
srv := e.servers[key]
|
srv := e.servers[key]
|
||||||
err := srv.mailer.Send(&email.Email{
|
err := srv.mailer.Send(&email.Email{
|
||||||
From: fromAddr,
|
From: fromAddr,
|
||||||
To: toAddr,
|
To: toAddr,
|
||||||
Subject: subject,
|
Subject: subject,
|
||||||
HTML: m,
|
HTML: m,
|
||||||
|
Attachments: files,
|
||||||
}, srv.SendTimeout)
|
}, srv.SendTimeout)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -1,10 +1,20 @@
|
||||||
package messenger
|
package messenger
|
||||||
|
|
||||||
|
import "net/textproto"
|
||||||
|
|
||||||
// Messenger is an interface for a generic messaging backend,
|
// Messenger is an interface for a generic messaging backend,
|
||||||
// for instance, e-mail, SMS etc.
|
// for instance, e-mail, SMS etc.
|
||||||
type Messenger interface {
|
type Messenger interface {
|
||||||
Name() string
|
Name() string
|
||||||
|
|
||||||
Push(fromAddr string, toAddr []string, subject string, message []byte) error
|
Push(fromAddr string, toAddr []string, subject string, message []byte, atts []*Attachment) error
|
||||||
Flush() error
|
Flush() error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Attachment represents a file or blob attachment that can be
|
||||||
|
// sent along with a message by a Messenger.
|
||||||
|
type Attachment struct {
|
||||||
|
Name string
|
||||||
|
Header textproto.MIMEHeader
|
||||||
|
Content []byte
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,8 @@ func sendNotification(tpl, subject string, data map[string]interface{}, app *App
|
||||||
err = app.Messenger.Push(app.Constants.FromEmail,
|
err = app.Messenger.Push(app.Constants.FromEmail,
|
||||||
app.Constants.NotifyEmails,
|
app.Constants.NotifyEmails,
|
||||||
subject,
|
subject,
|
||||||
b.Bytes())
|
b.Bytes(),
|
||||||
|
nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Logger.Printf("error sending admin notification (%s): %v", subject, err)
|
app.Logger.Printf("error sending admin notification (%s): %v", subject, err)
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue