DEV Community

Lucas
Lucas

Posted on

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! :)

Top comments (0)