@@ -18,7 +18,9 @@ import (
18
18
"time"
19
19
20
20
"code.gitea.io/gitea/modules/base"
21
+ "code.gitea.io/gitea/modules/graceful"
21
22
"code.gitea.io/gitea/modules/log"
23
+ "code.gitea.io/gitea/modules/queue"
22
24
"code.gitea.io/gitea/modules/setting"
23
25
24
26
"github.com/jaytaylor/html2text"
@@ -257,18 +259,7 @@ func (s *dummySender) Send(from string, to []string, msg io.WriterTo) error {
257
259
return nil
258
260
}
259
261
260
- func processMailQueue () {
261
- for msg := range mailQueue {
262
- log .Trace ("New e-mail sending request %s: %s" , msg .GetHeader ("To" ), msg .Info )
263
- if err := gomail .Send (Sender , msg .Message ); err != nil {
264
- log .Error ("Failed to send emails %s: %s - %v" , msg .GetHeader ("To" ), msg .Info , err )
265
- } else {
266
- log .Trace ("E-mails sent %s: %s" , msg .GetHeader ("To" ), msg .Info )
267
- }
268
- }
269
- }
270
-
271
- var mailQueue chan * Message
262
+ var mailQueue queue.Queue
272
263
273
264
// Sender sender for sending mail synchronously
274
265
var Sender gomail.Sender
@@ -291,24 +282,33 @@ func NewContext() {
291
282
Sender = & dummySender {}
292
283
}
293
284
294
- mailQueue = make (chan * Message , setting .MailService .QueueLength )
285
+ mailQueue = setting .CreateQueue ("mail" , func (data ... queue.Data ) {
286
+ for _ , datum := range data {
287
+ 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 )
291
+ } else {
292
+ log .Trace ("E-mails sent %s: %s" , msg .GetHeader ("To" ), msg .Info )
293
+ }
294
+ }
295
+ }, & Message {})
295
296
296
- // FIXME: graceful: Needs to become a queue and graceful
297
- go processMailQueue ()
297
+ go graceful .GetManager ().RunWithShutdownFns (mailQueue .Run )
298
298
}
299
299
300
300
// SendAsync send mail asynchronously
301
301
func SendAsync (msg * Message ) {
302
302
go func () {
303
- mailQueue <- msg
303
+ _ = mailQueue . Push ( msg )
304
304
}()
305
305
}
306
306
307
307
// SendAsyncs send mails asynchronously
308
308
func SendAsyncs (msgs []* Message ) {
309
309
go func () {
310
310
for _ , msg := range msgs {
311
- mailQueue <- msg
311
+ _ = mailQueue . Push ( msg )
312
312
}
313
313
}()
314
314
}
0 commit comments