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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more