O correio eletrônico é um método amplamente utilizado para transferir / trocar mensagens entre pessoas. Geralmente enviamos o e-mail com qualquer software ou aplicativo como Gmail, Outlook, Thunderbird Mail e Yahoo, etc. Também podemos codificar o conceito básico desses aplicativos em um aplicativo node.js usando qualquer biblioteca de terceiros que possa interagir com os sistemas de rede e enviar um e-mail.

Nodemailer: Existem vários módulos disponíveis para o envio de emails, mas o nodemailer é o mais popular e nos fornece um procedimento simples e funcionalidade para enviar emails. 

Recursos do Nodemailer:

  • Ele oferece suporte a vários recursos, como adição de HTML no e-mail, caracteres Unicode, envio de anexos com o texto, etc.
  • Ele usa o protocolo de transferência de correio simples (SMTP). Abaixo está a abordagem passo a passo a ser seguida para integrar este módulo em nosso aplicativo.

Etapa 1: Instalação do módulo: Grave o comando no terminal para instalar o nodemailer e, em seguida, importe na parte superior de seu aplicativo nodejs.

npm install nodemailer

Agora estamos prontos para importar isso para nosso aplicativo. 

const nodemailer = require('nodemailer');

Etapa 2: Criar objeto transportador: existe um método createTransport no nodemailer que aceita um objeto com algumas configurações e, finalmente, retorna um objeto transportador. Este objeto será necessário posteriormente para enviar emails. 

const transporter = nodemailer.createTransport(transport[, defaults]);

Aqui, estamos usando o Gmail como um serviço apenas para fins de amostra, embora o nodemailer possa ser facilmente integrado a qualquer outro serviço de e-mail. No Gmail, podemos tornar nossa conta menos segura ou usar a autenticação de segurança Oauth2, a menos que normalmente o Google não permita o envio de nenhum e-mail via node.js.

Conta menos segura: Visite este link para tornar sua conta menos segura . Depois de fazer isso, podemos criar nosso objeto transportador de trabalho apenas com o nome de usuário e a senha de sua conta do Gmail. 

const nodemailer = require('nodemailer');
  
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: secure_configuration.EMAIL_USERNAME,
    pass: secure_configuration.PASSWORD
  }
});

Usando Oauth2: de acordo com os documentos oficiais aqui, precisamos fornecer o ID do cliente, o segredo do cliente, o token de atualização e um token de acesso junto com o nome de usuário e a senha. Siga a abordagem passo a passo para obter essas configurações do console do Google Cloud. 

1. Abra o Google Cloud Console: nesta etapa, obteremos nosso ID e segredo do cliente. Visite o site do Google Cloud Console e registre-se / faça login você mesmo. Em seguida, prossiga para a seção API e serviços na barra de navegação mais à esquerda. Agora verifique o painel e crie um projeto. Depois disso, visite a tela de consentimento do Oauth para se registrar sobre seu aplicativo nesta etapa, certifique-se de selecionar o tipo de usuário externo e adicionar alguns / um Usuários de Teste. Após esta etapa, vá para a seção de credenciais e clique em Criar credenciais e, em seguida, escolha Oauth2 ClientID e escolha o tipo de aplicativo como um aplicativo da web, certifique-se também de adicionar o URI de redirecionamento como playground OAuth ( copie o link daqui) Finalmente, você terá sucesso em obter seu client_id e client_secret.

2. Abra o Oauth2 Playground: aqui obteremos nosso token de atualização e o token de acesso. Visite o playground OAuth2 , clique no ícone de configuração oauth2.0 à direita e marque a caixa de seleção usar suas próprias credenciais e forneça o mesmo ID de cliente e segredo que você obteve no console da nuvem. Agora selecione a API do Gmail para autorização. Clique em Autorizar API e, em seguida, autorize-o com o mesmo id do Gmail que você preencheu como um usuário de teste na seção de credenciais da última etapa. Por fim, clique no código de autorização de troca para tokens e isso fornecerá um token de atualização e um token de acesso.

Nota: Sugerimos que você abra esses gifs em uma guia separada e siga as duas abordagens separadamente e não pule em nenhum intervalo, pois isso o salvaria de muita confusão. Também não tente copiar este ID de cliente e segredo do cliente, etc. . não vai funcionar.

const nodemailer = require('nodemailer');
  
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    type: 'OAuth2',
    user: secure_configuration.EMAIL_USERNAME,
    pass: secure_configuration.PASSWORD,
    clientId: secure_configuration.CLIENT_ID,
    clientSecret: secure_configuration.CLIENT_SECRET,
    refreshToken: secure_configuration.REFRESH_TOKEN
  }
});

Com isso nosso objeto transportador está pronto e agora podemos enviar nossos emails. 

Etapa 3: Configurar o e-mail: Antes de enviar o e-mail, temos que criar algumas configurações de mensagem, como o que enviar para onde enviar, etc. É muito fácil criar essas configurações, pois existem vários pares de valores-chave , a partir dos quais você pode fornecer os necessários junto com alguns outros valores para a chave predefinida.

Enviando um texto simples para um e-mail:

const mailConfigurations = {
  
    // It should be a string of sender email
    from: 'mrtwinklesharma@gmail.com',
      
    // Comma Separated list of mails
    to: 'smtwinkle451@gmail.com',
  
    // Subject of Email
    subject: 'Sending Email using Node.js',
      
    // This would be the text of email body
    text: 'Hi! There, You know I am using the'
      + ' NodeJS Code along with NodeMailer '
      + 'to send this email.'
};

Saída: Se enviarmos o e-mail com essas configurações, algo assim será enviado para o destinatário. Embora nosso código esteja incompleto no momento, aqui estamos apenas mostrando como essa configuração de mensagem ficará quando o código for concluído.

Envio para vários e-mails: Podemos concatenar mais e-mails com uma vírgula como separador.

const mailConfigurations = {
    from: 'mrtwinklesharma@gmail.com',
    to: 'smtwinkle451@gmail.com, anyothergmailid@gmail.com',
      subject: 'Sending Email using Node.js',
    text: 'Hi! There, You know I am using the NodeJS Code'
       + ' along with NodeMailer to send this email.'
};

Enviando algum conteúdo HTML: Basta substituir o texto simples por HTML e fornecê-lo à chave html .

const mailConfigurations = {
  from: 'mrtwinklesharma@gmail.com',
  to: 'smtwinkle451@gmail.com',
  subject: 'Sending Email using Node.js',
  html: "<h2>Hi! There</h2> <h5> This HTML content is 
     being send by NodeJS along with NodeMailer.</h5>"
};

Saída:

  • Enviando alguns anexos, o Nodemailer é tão flexível no envio de anexos , você pode enviar qualquer tipo de arquivo que esteja sendo aceito pelo serviço de e-mail.
const mailConfigurations = {
  from: 'mrtwinklesharma@gmail.com',
  to: 'smtwinkle451@gmail.com',
  subject: 'Sending Email using Node.js', 
  text:'Attachments can also be sent using nodemailer',
  attachments: [
  {  
    // utf-8 string as an attachment
    filename: 'text.txt',
    content: 'Hello, GeeksforGeeks Learner!'
  },
  {   
    // filename and content type is derived from path
    path: '/home/mrtwinklesharma/Programming/document.docx'
  },
  {   
    path: '/home/mrtwinklesharma/Videos/Sample.mp4'
  },
  {   
    // use URL as an attachment
    filename: 'license.txt',
    path: 'https://raw.github.com/nodemailer/nodemailer/master/LICENSE'
  } 
]
};

Saída:

Não apenas estes, mas o nodemailer tem muitas possibilidades para configurações de mensagens, você pode verificar todas aqui .

Etapa 4: Enviar e-mail: use qualquer uma das abordagens acima para prosseguir com o objeto transportador e, em seguida, escolha qualquer uma das configurações de e-mail para enviar a correspondência.
Existe um método sendMail no objeto transportador que aceita configurações de email e uma função de retorno de chamada que será executada quando o email for enviado ou devido a um erro.  

transporter.sendMail(mailConfigurations[, callback]);
transporter.sendMail(mailConfigurations, function(error, info){
    if (error) throw Error(error);
       console.log('Email Sent Successfully');
    console.log(info);
});

Etapa 5: Combine todos eles

Você pode escolher qualquer opção nas etapas 2 e 3. Depois de fornecê-lo ao método sendMail, você poderá enviar um e-mail com o node.js.

Explicação: Aqui, importamos o módulo nodemailer no início e, em seguida, usamos o tipo de autenticação Oauth2; posteriormente, há a configuração de mensagem mais básica que está sendo usada. Finalmente, o método sendMail está enviando o e-mail para os destinatários fornecidos na configuração da mensagem.
Nota: - O módulo seguro que está sendo importado não tem nada a ver com este nodemailer, eu apenas o usei para proteger minhas credenciais. 

const nodemailer = require('nodemailer');
const secure_configuration = require('./secure');
  
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    type: 'OAuth2',
    user: secure_configuration.EMAIL_USERNAME,
    pass: secure_configuration.PASSWORD,
    clientId: secure_configuration.CLIENT_ID,
    clientSecret: secure_configuration.CLIENT_SECRET,
    refreshToken: secure_configuration.REFRESH_TOKEN
  }
});
  
const mailConfigurations = {
    from: 'mrtwinklesharma@gmail.com',
    to: 'smtwinkle451@gmail.com',
    subject: 'Sending Email using Node.js',
    text: 'Hi! There, You know I am using the NodeJS '
     + 'Code along with NodeMailer to send this email.'
};
    
transporter.sendMail(mailConfigurations, function(error, info){
    if (error) throw Error(error);
       console.log('Email Sent Successfully');
    console.log(info);
});

Saída: execute este snippet de código com o comando node e esta será a saída no console e na caixa de entrada do Gmail.