import { BaseCommand, args, flags } from '@adonisjs/core/ace' import type { CommandOptions } from '@adonisjs/core/types/ace' import mail from '@adonisjs/mail/services/main' import env from '#start/env' /** * Envoie un email de test via le mailer courant (typiquement Resend) * pour valider la conf SPF/DKIM/clé API sans passer par toute la chaîne * facture → job BullMQ. * * node ace send:test-email arthur@example.com * node ace send:test-email arthur@example.com --reply-to=patron@tpe.fr */ export default class SendTestEmail extends BaseCommand { static commandName = 'send:test-email' static description = 'Envoie un email de test via le mailer configuré (Resend en prod)' static options: CommandOptions = { startApp: true, } @args.string({ description: 'Adresse destinataire' }) declare to: string @flags.string({ description: 'Adresse de reply-to (optionnelle)' }) declare replyTo?: string async run() { const driver = env.get('MAIL_DRIVER', 'smtp') const fromAddress = env.get('MAIL_FROM_ADDRESS', 'relances@rubis-sur-l-ongle.fr') const fromName = env.get('MAIL_FROM_NAME', "Rubis Sur l'Ongle") this.logger.info(`Driver: ${driver}`) this.logger.info(`From: ${fromName} <${fromAddress}>`) this.logger.info(`To: ${this.to}`) if (this.replyTo) this.logger.info(`ReplyTo: ${this.replyTo}`) const mailer = mail.use(driver) const response = await mailer.send((m) => { m.from(fromAddress, fromName) .to(this.to) .subject('[Rubis] Test d\'envoi via Resend') .text( `Bonjour,\n\n` + `Ceci est un email de test envoyé depuis Rubis Sur l'Ongle.\n` + `Si vous recevez ce message, la conf Resend (SPF/DKIM/API key) est OK.\n\n` + `Driver utilisé : ${driver}\n` + `Date : ${new Date().toISOString()}\n\n` + `— L'équipe Rubis` ) if (this.replyTo) m.replyTo(this.replyTo) }) this.logger.success('Email envoyé') // Resend renvoie un messageId dans la réponse — utile pour retrouver // le log dans le dashboard. if (response?.messageId) { this.logger.info(`messageId: ${response.messageId}`) } } }