DEV Community

Lucas
Lucas

Posted on

5

Como enviar email da Hotmail com Typescript usando o nodemailer

primeiro iremos instalar o nodemailer e o pacote types, digite os seguintes códigos no terminal:

npm install nodemailer --save

npm install @types/nodemailer --save

após a instalação, no arquivo em que deseja realizar o envio de e-mail, faça os seguintes passos:

1- Importe o nodemailer:

import nodemailer from 'nodemailer'; 
Enter fullscreen mode Exit fullscreen mode

2- crie um transporter (objeto que vai ser capaz de realizar o envio):

const transporter = nodemailer.createTransport({
    host: 'smtp.office365.com',
    port: 587,
    secure: false,
    auth: {
        user: 'myEmail@outlook.com',
        pass: 'Password'
      }
    });
Enter fullscreen mode Exit fullscreen mode

Para isso usamos o método nodemailer.createTransport() e passamos como argumento um objeto com algumas informações:

  • host: o endereço do hospedeiro do e-mail, nesse caso passamos o valor 'smtp.office365.com';
  • port: é a porta em que vamos realizar a conexão, por padrão ela será 587 se secure for false e 465 se verdadeiro, nesse transporter definiremos ela como 587;
  • secure: recebe true ou false, se receber true a conexão usará TLS ao conectar-se ao servidor, se false o TLS será usado se o servidor suportar a extensão STARTTLS. Como estamos usando a porta 587 manteremos seu valor como false;
  • auth: vai receber um objeto de autenticação do e-mail, dentro dele definiremos a chave user com seu valor contendo o e-mail que vamos utilizar para o envio, e a chave pass que contém a senha do e-mail;

Com essas informações já podemos testar as nossas configurações SMTP com a chamada de verify(callback), use:

transporter.verify(function (error, success) {
  if (error) {
    console.log(error);
    return
  }

  console.log("Server is ready to take our messages");
});
Enter fullscreen mode Exit fullscreen mode

caso ocorra tudo bem, a mensagem "Server is ready to take our messages" aparecerá no seu servidor, se ocorrer algum erro recomendo olhar o site nodemailer, nele você poderá ver como configurar melhor o seu objeto transporter para atender ao seu caso.

3- Crie um objeto com as informações que serão enviadas:

let mailOptions: nodemailer.SendMailOptions = {
    from: 'username <myEmail@outlook.com>',
    to: 'email@example.com',
    subject: 'hello world!',
    html: '<h1> Hello world </h1>',
    text: 'hello world'
  }
Enter fullscreen mode Exit fullscreen mode

nesse objeto criado definimos seu tipo e passamos as seguintes chaves:

  • from: vai receber uma string com seu nome de usuário e em seguinda o e-mail que estamos utilizando no transporter entre os símbolos <>;
  • to: nesse exemplo usamos uma string com o e-mail destinatário que irá receber o e-mail, mas caso deseja enviar para múltiplos e-mails pode ser passado uma lista com eles como seu valor;
  • subject: recebe o assunto do e-mail que vai ser enviado;
  • html: recebe o conteúdo do e-mail no padrão html pra ser interpretado;
  • text: recebe como valor a versão de texto simples da mensagem, tbm necessário caso não seja possível a interpretação do html;
  • attachments: nesse caso nós não utilizamos dele, mas pode ser utilizado para fazer o envio de anexos, você pode ver um exemplo em: attachments;

4- usar o método para enviar o email:

// sending with callback

transporter.sendMail(mailOptions, (error: Error | null, info: nodemailer.SentMessageInfo): void => {
  // code   
})

// sending with promisse

transporter
  .sendMail(mailOptions)
  .then( (info : SentMessageInfo) => info.messageId)
  .catch( (err : Error) => {})
Enter fullscreen mode Exit fullscreen mode

Para realizar o envio do email usamos o método sendMail() do transporter passando como argumento o objeto criado anteriormente.

e é isso, espero que tenha ajudado! :)

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay