@@ -29,38 +29,63 @@ import (
29
29
30
30
// Message mail body and log info
31
31
type Message struct {
32
- Info string // Message information for log purpose.
33
- * gomail.Message
32
+ Info string // Message information for log purpose.
33
+ FromAddress string
34
+ FromDisplayName string
35
+ To []string
36
+ Subject string
37
+ Date time.Time
38
+ Body string
39
+ Headers map [string ][]string
34
40
}
35
41
36
- // NewMessageFrom creates new mail message object with custom From header.
37
- func NewMessageFrom (to []string , fromDisplayName , fromAddress , subject , body string ) * Message {
38
- log .Trace ("NewMessageFrom (body):\n %s" , body )
39
-
42
+ // ToMessage converts a Message to gomail.Message
43
+ func (m * Message ) ToMessage () * gomail.Message {
40
44
msg := gomail .NewMessage ()
41
- msg .SetAddressHeader ("From" , fromAddress , fromDisplayName )
42
- msg .SetHeader ("To" , to ... )
45
+ msg .SetAddressHeader ("From" , m .FromAddress , m .FromDisplayName )
46
+ msg .SetHeader ("To" , m .To ... )
47
+ for header := range m .Headers {
48
+ msg .SetHeader (header , m .Headers [header ]... )
49
+ }
50
+
43
51
if len (setting .MailService .SubjectPrefix ) > 0 {
44
- msg .SetHeader ("Subject" , setting .MailService .SubjectPrefix + " " + subject )
52
+ msg .SetHeader ("Subject" , setting .MailService .SubjectPrefix + " " + m . Subject )
45
53
} else {
46
- msg .SetHeader ("Subject" , subject )
54
+ msg .SetHeader ("Subject" , m . Subject )
47
55
}
48
- msg .SetDateHeader ("Date" , time . Now () )
56
+ msg .SetDateHeader ("Date" , m . Date )
49
57
msg .SetHeader ("X-Auto-Response-Suppress" , "All" )
50
58
51
- plainBody , err := html2text .FromString (body )
59
+ plainBody , err := html2text .FromString (m . Body )
52
60
if err != nil || setting .MailService .SendAsPlainText {
53
- if strings .Contains (base .TruncateString (body , 100 ), "<html>" ) {
61
+ if strings .Contains (base .TruncateString (m . Body , 100 ), "<html>" ) {
54
62
log .Warn ("Mail contains HTML but configured to send as plain text." )
55
63
}
56
64
msg .SetBody ("text/plain" , plainBody )
57
65
} else {
58
66
msg .SetBody ("text/plain" , plainBody )
59
- msg .AddAlternative ("text/html" , body )
67
+ msg .AddAlternative ("text/html" , m . Body )
60
68
}
69
+ return msg
70
+ }
71
+
72
+ // SetHeader adds additional headers to a message
73
+ func (m * Message ) SetHeader (field string , value ... string ) {
74
+ m .Headers [field ] = value
75
+ }
76
+
77
+ // NewMessageFrom creates new mail message object with custom From header.
78
+ func NewMessageFrom (to []string , fromDisplayName , fromAddress , subject , body string ) * Message {
79
+ log .Trace ("NewMessageFrom (body):\n %s" , body )
61
80
62
81
return & Message {
63
- Message : msg ,
82
+ FromAddress : fromAddress ,
83
+ FromDisplayName : fromDisplayName ,
84
+ To : to ,
85
+ Subject : subject ,
86
+ Date : time .Now (),
87
+ Body : body ,
88
+ Headers : map [string ][]string {},
64
89
}
65
90
}
66
91
@@ -285,11 +310,12 @@ func NewContext() {
285
310
mailQueue = setting .CreateQueue ("mail" , func (data ... queue.Data ) {
286
311
for _ , datum := range data {
287
312
msg := datum .(* Message )
288
- log .Trace ("New e-mail sending request %s: %s" , msg .GetHeader ("To" ), msg .Info )
289
- if err := gomail .Send (Sender , msg .Message ); err != nil {
290
- log .Error ("Failed to send emails %s: %s - %v" , msg .GetHeader ("To" ), msg .Info , err )
313
+ gomailMsg := msg .ToMessage ()
314
+ log .Trace ("New e-mail sending request %s: %s" , gomailMsg .GetHeader ("To" ), msg .Info )
315
+ if err := gomail .Send (Sender , gomailMsg ); err != nil {
316
+ log .Error ("Failed to send emails %s: %s - %v" , gomailMsg .GetHeader ("To" ), msg .Info , err )
291
317
} else {
292
- log .Trace ("E-mails sent %s: %s" , msg .GetHeader ("To" ), msg .Info )
318
+ log .Trace ("E-mails sent %s: %s" , gomailMsg .GetHeader ("To" ), msg .Info )
293
319
}
294
320
}
295
321
}, & Message {})
0 commit comments