Como enviar email da Hotmail com Typescript usando o nodemailer
Tags: beginners, node, typescript, hotmail
Published: 2022-10-23 00:10:16

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:

```js 
import nodemailer from 'nodemailer'; 
```

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

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

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:

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

  console.log("Server is ready to take our messages");
});
```

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](https://nodemailer.com/smtp/), 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:

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

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](https://nodemailer.com/message/attachments/);

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

```js
// 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) => {})
```

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