Skip to content

WindiestPick/send-gmail-auth2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Envio de e-mail google (gmail) usando Auth2.0

Criação de um sistema simples para envio de e-mail usando o auth2.0 da Google.

Passo a Passo:

  1. Criar uma conta no Google Cloud Platform:

    Primeiramente é necessario cirar uma conta no "Google Cloud Platform" e configura-la para ter acesso a verificação do google (o Auth2.0).

    Link: https://cloud.google.com

    Após entrar com sua conta no "Google Cloud Platform" acesse o "Google Cloud Console" clicando em um dos botões mostrados na imagem a baixo:

  2. Criar um novo projeto:

    Pressione o botão "Select a project" em seguida pressione em novo projeto. Como mostra as imagens a baixo:

    Dê um nome para o seu projeto e defina uma organização, caso não tenha uma, deixe o campo setado como "No organization", em seguida pressione o botão "CREATE".

  3. Configurando o novo projeto:

    Com o projeto selecionado leve o mouse até a aba "APIs & Services", em seguida, no sub menu, pressione "0Auth consent screen". Como demonstrado na imagem a baixo:

    Em seguida defina o "User Type" como "External", e confirme clicando em "CREATE".

    Ao concluir essa etapa abrirá uma nova janela para adicionar algumas configurações do app, é importante que você adicione um nome para o app, o "user suport e-mail", e o e-mail de contato do desenvolvedor (As demais configurações são opcionais), ao preenceher os campos clique em "SAVE AND CONTINUE"

    Já nos scopos, não há necessidade de alteração, porém o a fase de "Test User" é uma das mais importantes, aqui você irá definir o e-mail que será responsável por ativar as APIs do google (o e-mail que você usará no código node para automatiza-lo).

    Após configurar o Consent Screen, procure pela aba "Credentials", onde criaremos a chave para verificação Auth2.0.

    Na parte superior pressione "Create Credentials" e em seguida selecione "Create OAuth client ID".

    No tipo da aplicação selecione "Web application" escolha um nome pra chave (pode ser qualquer nome).

    Em seguida procure por "Authorized redirect URIs", adicione a URL a baixo no campo indicado:

     https://developers.google.com/oauthplayground
    

    Ao completar o procedimento aparecerá uma janela com as suas credenciais o "Client ID" e o "Client Secret ID" copie, e salve-as em um bloco de notas ou arquivo que vc possa consultar.

  4. Hablilitando as APIs:

    Terminando a etapa a cima, você ira acessar o site do google playground para hablilitar as APIs no e-mail desejado.

    Link: https://developers.google.com/oauthplayground

    Primeiramente é necessário fazer algumas configuirações, no canto superior direito, procure por uma engrenágem, essa é a janela de configurações, em seguida marque a opção "Use your own OAuth credentials" e adicione as suas credenciais que foram geradas na etapa passada.

    Em seguida preencha o campo "Input your won scopes" com o a URL do e-mail google e clique em "Authorize APIs".

     https://mail.google.com/
    

    Você será redirecionada para uma pagina de login padrão do google (Apenas o e-mail que foi adicionado como usuário de teste terá permissão para efetuar o login). Ao efetuar o login algumas confirmações são necessárias. Como mostra as imagens a baixo:

    Ao retornar para o site, você receberá um código de autorização, precione o botão "Exchenge authorization code for tokens" ele irá gerar dois tokens, guarde o "Refresh token" que será usado no código node.

  5. Detalhamento do Código:

    O código em sí é bem simples, primeiramente adicione todas as dependencias do projeto.

Dependencias:

    npm install express
    npm install body-parser
    npm install nodemailer
    npm install googleapis
    npm install cors

Ou o comando completo:

    npm install express body-parser nodemailer googleapis cors

Instale tambêm as ferramentas de execução.

    npm install -g http-server
    npm install -g nodemon

Codigo JS:

Importe elas para dentro de um arquivo js (por padrão utilize o nome do arquivo como Controller.js):

    const express = require('express');
    const bodyParser = require('body-parser');
    const nodemailer = require('nodemailer');
    const { google } = require("googleapis");
    const cors = require('cors');
    const OAuth2 = google.auth.OAuth2;

Crie duas constantes uma para definir a porta utilizada para requisições e a outra para o express.

    const PORT = process.env.PORT || 3000;
    const app = express();

Já com o app criado você vai ativar a função "cors" e "bodyParser" (o cors é para paginas web, não é necessário para aplicativos android ou desktop).

    app.use(bodyParser.json());
    app.use(cors());

Em seguida vamos criar uma rota padrão só para testar o funcionamento da aplicação.

    app.get('/',function(req,res){
            res.send({
                    message:'Rota Padrão'
            })
    });

E para ativar de fato a aplicação criaremos um "listen" que será responsável por receber as requisições feitas a página.

    app.listen(PORT, function (req, res) {
            console.log(`Observando a porta ${PORT}`);
    })

Com isso já podemos testar se está tudo certo com o nosso controller, digite o comando a baxo em um "prompt" que esteja no diretório do projeto.

    nodemon controller.js

Com o nodemon funcionando podemos começar a configurar as verificações de Auth2, primeiro crie o cliente Auth, criando um objeto OAuth2.

    const auth2Client = new OAuth2(
            "Adicione o seu Client ID",
            "Adicione o seu Client Secret",
            "https://developers.google.com/oauthplayground"
    );

Em seguida definiremos um validador com as credenciais que foram geradas no Google Playground.

    Auth2Client.setCredentials({
            refresh_token:"Seu Refresh Token"
    });

E então criamos uma variável para receber o token de acesso do Google Playground.

    const accessToken = auth2Client.getAccessToken()

Com o Aceess Token em mãos podemos prosseguir pra proxima etapa, definir quem vai transportar o nosso e-mail, no caso o Google.

    const transport = nodemailer.createTransport({
            service: "gmail",
            auth: {
                    type: "OAuth2",
                    user: "e-mail cadastrado no google playground",
                    clientId: "Seu Client ID",
                    clientSecret: "Seu Client Secret",
                    refreshToken: "Seu Refrash Token",
                    accessToken: accessToken
            }
    });

Execultando todas as etapas até aqui, finalmente podemos criar a pagina de requisição para em fim enviar os e-mails, atravez de um app.post() crie euma função pra enviar as mensagens.

    app.post('/sendemail',function(req,res){
            const mailOptions = {
                    from: 'e-mail cadastrado no google playground',
                    to: req.body.email, 
                    subject: 'Titulo', 
                    html: '<p> Mensagens </p>'
            }
            transport.sendMail(mailOptions,function(err,result){
                    if(err){
                            res.send({
                                    message:err
                            })
                    }else{
                            transport.close();
                            res.send({
                                    message:'E-mail enviado olhe sua caixa de entrada'
                            })
                    }
            })
    })

Agora podemos execultar o nodemon para habilitar a página de requisisção e, para enviar um e-mail de fato iremos fazer um fetch passando os parâmetros para a página. Pra isso criei um código simples html apenas como exemplo.

    <!DOCTYPE html>
    <html>
    <header>
    <title>google img</title>
    <script src="./Index.js"></script>
    </header>

    <body>
    <label for="">Email:</label>
    <input type="text" id="email" /><br>
    <label for="">Msg a ser enviada:</label>
    <input type="text" id="message" />
    <input type="button" value="Enviar" id="button" />
    </body>

    </html>

Nesse código você adiciona pra quem será enviado e a mensagem que será enviada.

    window.onload = function() {

            let button = document.getElementById("button").onclick = async function() {
                    let email = document.getElementById("email").value;
                    let message = document.getElementById("message").value;

                    let send = fetch("http://IpLocal:3000/sendemail", {
                            method: 'POST',
                            headers: {
                                    'Accept': 'application/json',
                                    'Content-Type': 'application/json'
                            },
                            body: JSON.stringify({
                                    emailUser: email,
                                    messageUser: message
                            })
                    })
                    let ress = await send.json();
                    console.log(ress);
            }
    }

No JavaScript fazemos um fetch direcionando os parâmetros a pagina node onde será enviado o e-mail, lembrando que todos os parâmetros do e-mail podem ser alterados, no exemplo é alterado apenas o e-mail e a menssagem, mas você pode fazer algo mais complexo passando mais parâmetros.

Por fim execulte o nodemon e crie um servidor local para efetuar o teste, pra isso usaremos o http-server. No diretório do projeto digite o comando:

    http-server --cors

abra a pagína web qeu foi gerada pelo http-server.

About

Automatização de e-mails usando node e 0Auth2

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages