@@ -18,32 +18,33 @@ import (
18
18
// Mailer represents mail service.
19
19
type Mailer struct {
20
20
// Mailer
21
- Name string
22
- From string
23
- EnvelopeFrom string
24
- OverrideEnvelopeFrom bool `ini:"-"`
25
- FromName string
26
- FromEmail string
27
- SendAsPlainText bool
28
- SubjectPrefix string
21
+ Name string `ini:"NAME"`
22
+ From string `ini:"FROM"`
23
+ EnvelopeFrom string `ini:"ENVELOPE_FROM"`
24
+ OverrideEnvelopeFrom bool `ini:"-"`
25
+ FromName string `ini:"-"`
26
+ FromEmail string `ini:"-"`
27
+ SendAsPlainText bool `ini:"SEND_AS_PLAIN_TEXT"`
28
+ SubjectPrefix string `ini:"SUBJECT_PREFIX"`
29
29
30
30
// SMTP sender
31
- Protocol string
32
- SMTPAddr string
33
- SMTPPort string
34
- User , Passwd string
35
- EnableHelo bool
36
- HeloHostname string
37
- ForceTrustServerCert bool
38
- UseClientCert bool
39
- ClientCertFile string
40
- ClientKeyFile string
31
+ Protocol string `ini:"PROTOCOL"`
32
+ SMTPAddr string `ini:"SMTP_ADDR"`
33
+ SMTPPort string `ini:"SMTP_PORT"`
34
+ User string `ini:"USER"`
35
+ Passwd string `ini:"PASSWD"`
36
+ EnableHelo bool `ini:"ENABLE_HELO"`
37
+ HeloHostname string `ini:"HELO_HOSTNAME"`
38
+ ForceTrustServerCert bool `ini:"FORCE_TRUST_SERVER_CERT"`
39
+ UseClientCert bool `ini:"USE_CLIENT_CERT"`
40
+ ClientCertFile string `ini:"CLIENT_CERT_FILE"`
41
+ ClientKeyFile string `ini:"CLIENT_KEY_FILE"`
41
42
42
43
// Sendmail sender
43
- SendmailPath string
44
- SendmailArgs []string
45
- SendmailTimeout time.Duration
46
- SendmailConvertCRLF bool
44
+ SendmailPath string `ini:"SENDMAIL_PATH"`
45
+ SendmailArgs []string `ini:"-"`
46
+ SendmailTimeout time.Duration `ini:"SENDMAIL_TIMEOUT"`
47
+ SendmailConvertCRLF bool `ini:"SENDMAIL_CONVERT_CRLF"`
47
48
}
48
49
49
50
// MailService the global mailer
@@ -56,35 +57,12 @@ func newMailService() {
56
57
return
57
58
}
58
59
59
- MailService = & Mailer {
60
- Name : sec .Key ("NAME" ).MustString (AppName ),
61
- SendAsPlainText : sec .Key ("SEND_AS_PLAIN_TEXT" ).MustBool (false ),
62
-
63
- Protocol : sec .Key ("PROTOCOL" ).In ("" , []string {"smtp" , "smtps" , "smtp+startls" , "smtp+unix" , "sendmail" , "dummy" }),
64
- SMTPAddr : sec .Key ("SMTP_ADDR" ).String (),
65
- SMTPPort : sec .Key ("SMTP_PORT" ).String (),
66
- User : sec .Key ("USER" ).String (),
67
- Passwd : sec .Key ("PASSWD" ).String (),
68
- EnableHelo : sec .Key ("ENABLE_HELO" ).MustBool (true ),
69
- HeloHostname : sec .Key ("HELO_HOSTNAME" ).String (),
70
- ForceTrustServerCert : sec .Key ("FORCE_TRUST_SERVER_CERT" ).MustBool (false ),
71
- UseClientCert : sec .Key ("USE_CLIENT_CERT" ).MustBool (false ),
72
- ClientCertFile : sec .Key ("CLIENT_CERT_FILE" ).String (),
73
- ClientKeyFile : sec .Key ("CLIENT_KEY_FILE" ).String (),
74
- SubjectPrefix : sec .Key ("SUBJECT_PREFIX" ).MustString ("" ),
75
-
76
- SendmailPath : sec .Key ("SENDMAIL_PATH" ).MustString ("sendmail" ),
77
- SendmailTimeout : sec .Key ("SENDMAIL_TIMEOUT" ).MustDuration (5 * time .Minute ),
78
- SendmailConvertCRLF : sec .Key ("SENDMAIL_CONVERT_CRLF" ).MustBool (true ),
79
- }
80
- MailService .From = sec .Key ("FROM" ).MustString (MailService .User )
81
- MailService .EnvelopeFrom = sec .Key ("ENVELOPE_FROM" ).MustString ("" )
82
-
60
+ // Handle Deprecations and map on to new configuration
83
61
// FIXME: DEPRECATED to be removed in v1.19.0
84
62
deprecatedSetting ("mailer" , "MAILER_TYPE" , "mailer" , "PROTOCOL" )
85
63
if sec .HasKey ("MAILER_TYPE" ) && ! sec .HasKey ("PROTOCOL" ) {
86
64
if sec .Key ("MAILER_TYPE" ).String () == "sendmail" {
87
- MailService . Protocol = " sendmail"
65
+ sec . Key ( "PROTOCOL" ). MustString ( " sendmail")
88
66
}
89
67
}
90
68
@@ -96,31 +74,91 @@ func newMailService() {
96
74
if err != nil {
97
75
log .Fatal ("Invalid mailer.HOST (%s): %v" , givenHost , err )
98
76
}
99
- MailService . SMTPAddr = addr
100
- MailService . SMTPPort = port
77
+ sec . Key ( "SMTP_ADDR" ). MustString ( addr )
78
+ sec . Key ( "SMTP_PORT" ). MustString ( port )
101
79
}
102
80
103
81
// FIXME: DEPRECATED to be removed in v1.19.0
104
82
deprecatedSetting ("mailer" , "IS_TLS_ENABLED" , "mailer" , "PROTOCOL" )
105
83
if sec .HasKey ("IS_TLS_ENABLED" ) && ! sec .HasKey ("PROTOCOL" ) {
106
84
if sec .Key ("IS_TLS_ENABLED" ).MustBool () {
107
- MailService . Protocol = " smtps"
85
+ sec . Key ( "PROTOCOL" ). MustString ( " smtps")
108
86
} else {
109
- MailService . Protocol = " smtp+startls"
87
+ sec . Key ( "PROTOCOL" ). MustString ( " smtp+starttls" )
110
88
}
111
89
}
112
90
91
+ // FIXME: DEPRECATED to be removed in v1.19.0
92
+ deprecatedSetting ("mailer" , "DISABLE_HELO" , "mailer" , "ENABLE_HELO" )
93
+ if sec .HasKey ("DISABLE_HELO" ) && ! sec .HasKey ("ENABLE_HELO" ) {
94
+ sec .Key ("ENABLE_HELO" ).MustBool (! sec .Key ("DISABLE_HELO" ).MustBool ())
95
+ }
96
+
97
+ // FIXME: DEPRECATED to be removed in v1.19.0
98
+ deprecatedSetting ("mailer" , "SKIP_VERIFY" , "mailer" , "FORCE_TRUST_SERVER_CERT" )
99
+ if sec .HasKey ("SKIP_VERIFY" ) && ! sec .HasKey ("FORCE_TRUST_SERVER_CERT" ) {
100
+ sec .Key ("FORCE_TRUST_SERVER_CERT" ).MustBool (sec .Key ("SKIP_VERIFY" ).MustBool ())
101
+ }
102
+
103
+ // FIXME: DEPRECATED to be removed in v1.19.0
104
+ deprecatedSetting ("mailer" , "USE_CERTIFICATE" , "mailer" , "USE_CLIENT_CERT" )
105
+ if sec .HasKey ("USE_CERTIFICATE" ) && ! sec .HasKey ("USE_CLIENT_CERT" ) {
106
+ sec .Key ("USE_CLIENT_CERT" ).MustBool (sec .Key ("USE_CERTIFICATE" ).MustBool ())
107
+ }
108
+
109
+ // FIXME: DEPRECATED to be removed in v1.19.0
110
+ deprecatedSetting ("mailer" , "CERT_FILE" , "mailer" , "CLIENT_CERT_FILE" )
111
+ if sec .HasKey ("CERT_FILE" ) && ! sec .HasKey ("CLIENT_CERT_FILE" ) {
112
+ sec .Key ("CERT_FILE" ).MustString (sec .Key ("CERT_FILE" ).String ())
113
+ }
114
+
115
+ // FIXME: DEPRECATED to be removed in v1.19.0
116
+ deprecatedSetting ("mailer" , "KEY_FILE" , "mailer" , "CLIENT_KEY_FILE" )
117
+ if sec .HasKey ("KEY_FILE" ) && ! sec .HasKey ("CLIENT_KEY_FILE" ) {
118
+ sec .Key ("KEY_FILE" ).MustString (sec .Key ("KEY_FILE" ).String ())
119
+ }
120
+
121
+ // FIXME: DEPRECATED to be removed in v1.19.0
122
+ deprecatedSetting ("mailer" , "ENABLE_HTML_ALTERNATIVE" , "mailer" , "SEND_AS_PLAIN_TEXT" )
123
+ if sec .HasKey ("ENABLE_HTML_ALTERNATIVE" ) && ! sec .HasKey ("SEND_AS_PLAIN_TEXT" ) {
124
+ sec .Key ("SEND_AS_PLAIN_TEXT" ).MustBool (! sec .Key ("ENABLE_HTML_ALTERNATIVE" ).MustBool (false ))
125
+ }
126
+
127
+ if sec .HasKey ("PROTOCOL" ) && sec .Key ("PROTOCOL" ).String () == "smtp+startls" {
128
+ log .Error ("Deprecated fallback `[mailer]` `PROTOCOL = smtp+startls` present. Use `[mailer]` `PROTOCOL = smtp+starttls`` instead. This fallback will be removed in v1.19.0" )
129
+ sec .Key ("PROTOCOL" ).SetValue ("smtp+starttls" )
130
+ }
131
+
132
+ // Set default values & validate
133
+ sec .Key ("NAME" ).MustString (AppName )
134
+ sec .Key ("PROTOCOL" ).In ("" , []string {"smtp" , "smtps" , "smtp+starttls" , "smtp+unix" , "sendmail" , "dummy" })
135
+ sec .Key ("ENABLE_HELO" ).MustBool (true )
136
+ sec .Key ("FORCE_TRUST_SERVER_CERT" ).MustBool (false )
137
+ sec .Key ("USE_CLIENT_CERT" ).MustBool (false )
138
+ sec .Key ("SENDMAIL_PATH" ).MustString ("sendmail" )
139
+ sec .Key ("SENDMAIL_TIMEOUT" ).MustDuration (5 * time .Minute )
140
+ sec .Key ("SENDMAIL_CONVERT_CRLF" ).MustBool (true )
141
+ sec .Key ("FROM" ).MustString (sec .Key ("USER" ).String ())
142
+
143
+ // Now map the values on to the MailService
144
+ MailService = & Mailer {}
145
+ if err := sec .MapTo (MailService ); err != nil {
146
+ log .Fatal ("Unable to map [mailer] section on to MailService. Error: %v" , err )
147
+ }
148
+
149
+ // Infer SMTPPort if not set
113
150
if MailService .SMTPPort == "" {
114
151
switch MailService .Protocol {
115
152
case "smtp" :
116
153
MailService .SMTPPort = "25"
117
154
case "smtps" :
118
155
MailService .SMTPPort = "465"
119
- case "smtp+startls " :
156
+ case "smtp+starttls " :
120
157
MailService .SMTPPort = "587"
121
158
}
122
159
}
123
160
161
+ // Infer Protocol
124
162
if MailService .Protocol == "" {
125
163
if strings .ContainsAny (MailService .SMTPAddr , "/\\ " ) {
126
164
MailService .Protocol = "smtp+unix"
@@ -131,7 +169,7 @@ func newMailService() {
131
169
case "465" :
132
170
MailService .Protocol = "smtps"
133
171
case "587" :
134
- MailService .Protocol = "smtp+startls "
172
+ MailService .Protocol = "smtp+starttls "
135
173
default :
136
174
log .Error ("unable to infer unspecified mailer.PROTOCOL from mailer.SMTP_PORT = %q, assume using smtps" , MailService .SMTPPort )
137
175
MailService .Protocol = "smtps"
@@ -151,42 +189,6 @@ func newMailService() {
151
189
}
152
190
}
153
191
154
- // FIXME: DEPRECATED to be removed in v1.19.0
155
- deprecatedSetting ("mailer" , "DISABLE_HELO" , "mailer" , "ENABLE_HELO" )
156
- if sec .HasKey ("DISABLE_HELO" ) && ! sec .HasKey ("ENABLE_HELO" ) {
157
- MailService .EnableHelo = ! sec .Key ("DISABLE_HELO" ).MustBool ()
158
- }
159
-
160
- // FIXME: DEPRECATED to be removed in v1.19.0
161
- deprecatedSetting ("mailer" , "SKIP_VERIFY" , "mailer" , "FORCE_TRUST_SERVER_CERT" )
162
- if sec .HasKey ("SKIP_VERIFY" ) && ! sec .HasKey ("FORCE_TRUST_SERVER_CERT" ) {
163
- MailService .ForceTrustServerCert = sec .Key ("SKIP_VERIFY" ).MustBool ()
164
- }
165
-
166
- // FIXME: DEPRECATED to be removed in v1.19.0
167
- deprecatedSetting ("mailer" , "USE_CERTIFICATE" , "mailer" , "USE_CLIENT_CERT" )
168
- if sec .HasKey ("USE_CERTIFICATE" ) && ! sec .HasKey ("USE_CLIENT_CERT" ) {
169
- MailService .UseClientCert = sec .Key ("USE_CLIENT_CERT" ).MustBool ()
170
- }
171
-
172
- // FIXME: DEPRECATED to be removed in v1.19.0
173
- deprecatedSetting ("mailer" , "CERT_FILE" , "mailer" , "CLIENT_CERT_FILE" )
174
- if sec .HasKey ("CERT_FILE" ) && ! sec .HasKey ("CLIENT_CERT_FILE" ) {
175
- MailService .ClientCertFile = sec .Key ("CERT_FILE" ).String ()
176
- }
177
-
178
- // FIXME: DEPRECATED to be removed in v1.19.0
179
- deprecatedSetting ("mailer" , "KEY_FILE" , "mailer" , "CLIENT_KEY_FILE" )
180
- if sec .HasKey ("KEY_FILE" ) && ! sec .HasKey ("CLIENT_KEY_FILE" ) {
181
- MailService .ClientKeyFile = sec .Key ("KEY_FILE" ).String ()
182
- }
183
-
184
- // FIXME: DEPRECATED to be removed in v1.19.0
185
- deprecatedSetting ("mailer" , "ENABLE_HTML_ALTERNATIVE" , "mailer" , "SEND_AS_PLAIN_TEXT" )
186
- if sec .HasKey ("ENABLE_HTML_ALTERNATIVE" ) && ! sec .HasKey ("SEND_AS_PLAIN_TEXT" ) {
187
- MailService .SendAsPlainText = ! sec .Key ("ENABLE_HTML_ALTERNATIVE" ).MustBool (false )
188
- }
189
-
190
192
if MailService .From != "" {
191
193
parsed , err := mail .ParseAddress (MailService .From )
192
194
if err != nil {
0 commit comments