rubis/apps/api/commands/send_test_email.ts
ordinarthur a790455ae1 feat(api): bascule des envois mail sur Resend (fin de Mailpit en dev)
- MAIL_DRIVER=resend par défaut, from rubis@arthurbarre.fr (domaine vérifié)
- replyTo posé sur user.email dans les relances : les réponses des clients
  reviennent au patron de la TPE, pas dans notre boîte transactionnelle
- ajout d'une commande Ace `send:test-email` pour valider la conf
  (driver, from, SPF/DKIM/clé API) sans passer par tout le flow facture

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-06 22:22:33 +02:00

62 lines
2.2 KiB
TypeScript

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}`)
}
}
}