npx create-react-app react-contact-form-with-emailjs
O comando acima cria o clichê usando o comando create-react-app que contém todos os arquivos e pacotes para o aplicativo React.
npm install @emailjs/browser
cd react-contact-form-with-emailjs npm start
O aplicativo está acessível em //localhost:3000 .
// src/App.js import React from 'react' import './App.css'; function App() { return ( <div> <h1>Contact Form</h1> <form className='cf'> <div className='half left cf'> <input type='text' placeholder='Name' name='user_name' /> <input type='email' placeholder='Email address' name='user_email' /> </div> <div className='half right cf'> <textarea name='message' type='text' placeholder='Message'></textarea> </div> <input type='submit' value='Submit' id='input-submit' /> </form> </div> ); } export default App;
A interface do usuário do aplicativo precisa estar bonita para os usuários, portanto, no arquivo App.css , copie e cole o seguinte código:
// src/App.css @import url(//fonts.googleapis.com/css?family=Merriweather); html, body { background: #f1f1f1; font-family: 'Merriweather', sans-serif; padding: 1em; } h1 { text-align: center; color: #a8a8a8; } form { max-width: 600px; text-align: center; margin: 20px auto; } input, textarea { border: 0; outline: 0; padding: 1em; border-radius: 8px; display: block; width: 100%; margin-top: 1em; font-family: 'Merriweather', sans-serif; resize: none; } #input-submit { color: white; background: #e74c3c; cursor: pointer; } #input-submit:hover { box-shadow: 0 1px 1px 1px rgba(0, 0, 0, 0.2); } textarea { height: 126px; } .half { float: left; width: 48%; margin-bottom: 1em; } .right { width: 50%; } .left { margin-right: 2%; } @media (max-width: 480px) { .half { width: 100%; float: none; margin-bottom: 0; } } .cf:before, .cf:after { content: ' '; display: table; } .cf:after { clear: both; }
A página deve ficar assim com tudo feito corretamente:
Adicionar um serviço de e-mail
Esta seção é sobre a integração entre EmailJS e seu servidor de e-mail. No painel do EmailJS, escolha o serviço Gmail na guia Email Services , que deve abrir uma nova página chamada config service .
Em seguida, altere os parâmetros de nome e ID do serviço . O ID do serviço será usado posteriormente ao inicializar o formulário de contato para conectá-lo ao EmailJS. Certifique-se de clicar no botão Conectar conta e criar serviço para confirmar suas alterações.
Criando um modelo de e-mail
O modelo de e-mail é essencial quando você deseja incluir o assunto do e-mail, o conteúdo que ele conterá e seu destino em sua caixa de entrada quando um usuário enviar uma mensagem do lado do cliente do seu site.
No painel, clique na guia Modelo de e-mail e em Criar novo modelo .
Em seguida, você deve clicar na guia Configurações e alterar o nome e a ID do modelo para qualquer coisa que desejar. O template ID será utilizado posteriormente, conforme a imagem abaixo:
Voltando à guia Conteúdo, os valores dentro das chaves são variáveis dinâmicas que devem ter o mesmo valor definido no elemento <form> no formulário de contato, como message , user_name e user_email .
As variáveis de ambiente .env
é um arquivo que armazena suas chaves públicas e outros valores que você não deseja compartilhar e é privado apenas para você.
Na raiz do diretório do seu projeto, crie um arquivo, .env
, e cole o seguinte:
// .env REACT_APP_TEMPLATE_ID=TEMPLATE_ID REACT_APP_SERVICE_ID=SERVICE_ID REACT_APP_PUBLIC_KEY=API_PUBLIC_KEY
Para a chave pública, você pode encontrá-la clicando na guia Account
e copiando o valor conforme mostrado na seção public key
:
No aplicativo React, importe o pacote instalado, @emailjs/browser
package.
// src/App.js import React from 'react' import emailjs from '@emailjs/browser'; function App() { return ( <div> // form element </div> ); } export default App;
O gancho useRef
manipula o envio do formulário de contato.
Copie e atualize o código no arquivo App.js
:
// src/App.js import React, { useRef } from 'react'; // imports function App() { const form = useRef(); const sendEmail = (e) => { e.preventDefault(); emailjs .sendForm( process.env.REACT_APP_SERVICE_ID, process.env.REACT_APP_TEMPLATE_ID, form.current, process.env.REACT_APP_PUBLIC_KEY ) .then( (result) => { alert('message sent successfully...'); console.log(result.text); }, (error) => { console.log(error.text); } ); }; return ( <div> <h1>Contact Form</h1> <form className='cf' ref={form} onSubmit={sendEmail}> // div container with input element </form> </div> ); } export default App;
useRef
é importado e inicializado com uma variável chamada formuseRef
, é usado como referência e atribuído ao elemento <form>
sendEmail
, o formulário possui o método preventDefault
que impede a atualização da páginasendEmail
, a função sendForm
é invocada e inicializada com o ID do service ID
do template ID
, a propriedade form .current
do ref
e a public key
.then()