@@ -20,8 +20,10 @@ import { MetaObject } from '@imports/model/MetaObject';
2020import { renderTemplate } from '../template' ;
2121import { logger } from '../utils/logger' ;
2222import { errorReturn , successReturn } from '../utils/return' ;
23+ import { withTimeout } from '../utils/timeout' ;
2324
2425const MAIL_CONSUME_SCHEDULE = process . env . MAIL_CONSUME_SCHEDULE || '*/1 * * * * *' ;
26+ const SEND_EMAIL_TIMEOUT = Number ( process . env . SEND_EMAIL_TIMEOUT ?? 30e3 ) ;
2527const TZ = process . env . TZ || 'America/Sao_Paulo' ;
2628
2729const consumeCronJob = new CronJob ( MAIL_CONSUME_SCHEDULE , consume , null , false , TZ ) ;
@@ -107,6 +109,7 @@ async function sendEmail(record) {
107109 if ( server ) {
108110 var serverHost = get ( server , 'transporter.options.host' ) ;
109111 try {
112+ logger . trace ( `🔜 Sending email to ${ mail . to } via [${ serverHost || record . server } ]` ) ;
110113 const response = await server . sendMail ( mail ) ;
111114
112115 if ( get ( response , 'accepted.length' ) > 0 ) {
@@ -197,13 +200,26 @@ async function consume() {
197200 }
198201
199202 await BluebirdPromise . each ( range ( 0 , mailCount ) , async ( ) => {
200- const updatedRecords = await MetaObject . Collections [ 'Message' ] . findOneAndUpdate ( query , update , options ) ;
203+ try {
204+ await withTimeout (
205+ async ( ) => {
206+ const updatedRecords = await MetaObject . Collections [ 'Message' ] . findOneAndUpdate ( query , update , options ) ;
201207
202- if ( updatedRecords == null || updatedRecords . _id == null ) {
203- return ;
204- }
208+ if ( updatedRecords == null || updatedRecords . _id == null ) {
209+ return ;
210+ }
205211
206- return send ( updatedRecords ) ;
212+ return send ( updatedRecords ) ;
213+ } ,
214+ SEND_EMAIL_TIMEOUT ,
215+ 'consume->send' ,
216+ ) ;
217+ } catch ( error ) {
218+ logger . error ( `📧 Email error: ${ error . message } ` ) ;
219+ await MetaObject . Collections [ 'Message' ] . updateOne ( { _id : record . _id } , { $set : { status : 'Falha no Envio' , error : err } } ) ;
220+
221+ return errorReturn ( err ) ;
222+ }
207223 } ) ;
208224
209225 return consumeCronJob . start ( ) ;
0 commit comments