Skip to content

Latest commit

 

History

History
72 lines (58 loc) · 2.51 KB

README.md

File metadata and controls

72 lines (58 loc) · 2.51 KB

Serviço que contacta cliente via email

Esta aplicação tem como principal função contactar o cliente via e-mail, informando o status da sua compra. Ele fica escutando os eventos da fila contact e para cada evento recebido tenta realizar o envio de um email:

Para manter o sistema auto contido, ao inves de propriamente enviar um email, a funcáo processMessage irá salvar um arquivo .json com o conteúdo do email, como pode ser visto a baixo:

async function processMessage(msg) {
    const mailData = JSON.parse(msg.content)
    try {
        const mailOptions = {
            'from': process.env.MAIL_USER,
            'to': `${mailData.clientFullName} <${mailData.to}>`,
            'cc': mailData.cc || null,
            'bcc': mailData.cco || null,
            'subject': mailData.subject,
            'text': mailData.text,
            'attachments': null
        }

        fs.writeFileSync(`${mailOptions.subject}-${mailOptions.to}.json`, JSON.stringify(mailOptions));
        
        console.log(`✔ SUCCESS`)
    } catch (error) {
        console.log(error)
        console.log(`X ERROR TO PROCESS: ${error.response}`)
    }
}

Mas para realizar o envio de um email, bastaria apenas conectar-se com um provedor, como no caso do exemplo abaixo utilizando como provedor o mailtrap, uma ferramenta que permite testar o envio de emails:

async function processMessage(msg) {
    const mailData = JSON.parse(msg.content)
    try {
        const transporter = await nodemailer.createTransport({
            host: "smtp.mailtrap.io",
            port: 2525,
            auth: {
                user: <mailtrap user>,
                pass: <mailtrap senha>
            }
        })

        const mailOptions = {
            'from': process.env.MAIL_USER,
            'to': `${mailData.clientFullName} <${mailData.to}>`,
            'cc': mailData.cc || null,
            'bcc': mailData.cco || null,
            'subject': mailData.subject,
            'text': mailData.text,
            'attachments': null
        }

        await transporter.sendMail(mailOptions)

        console.log(`✔ SUCCESS`)
    } catch (error) {
        console.log(`X ERROR TO PROCESS: ${error.response}`)
    }
}

Para executar a aplicação basta ter um docker em execução e digitar o comando abaixo na raiz do projeto:

docker-compose up -d --build contact-service

Assim que o build finalizar, a aplicação irá se conectar com RabbitMQ e ficara escutando notificação de eventos na fila contact