Reputation: 233
i have a single email input field and a button in my app. once i enter the email and click send i would like to send an email with the value entered in the input. i know it cant be done in Reactjs because it is a frontend. How can i do? can someone help?
Upvotes: 14
Views: 108193
Reputation: 2351
From a front end client you can send a request to an SMTP server, which will send the email.
This tutorial runs over how to do that with the emailJS SMTP server, (which allows you to send 200 free emails/month in case free is a priority).
I'll summarize because they didn't cover everything I wanted.
Install emailJS via
npm install emailjs-com
or
yarn add emailjs-com
If you are using create-react-app please view the tutorial I mentioned above or this linked source, where they provide instructions on how to include emailJS with create-react-app
This is a code example of a form which sends an email using emailJS, You must replace 'YOUR_SERVICE_ID'
, 'YOUR_TEMPLATE_ID'
, and 'YOUR_USER_ID'
with your actual id's(which I will explain where to find in later steps)
import React from 'react';
import emailjs from 'emailjs-com';
export default function ContactUs() {
function sendEmail(e) {
e.preventDefault(); //This is important, i'm not sure why, but the email won't send without it
emailjs.sendForm('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', e.target, 'YOUR_USER_ID')
.then((result) => {
window.location.reload() //This is if you still want the page to reload (since e.preventDefault() cancelled that behavior)
}, (error) => {
console.log(error.text);
});
}
return (
<form className="contact-form" onSubmit={sendEmail}>
<input type="hidden" name="contact_number" />
<label>Name</label>
<input type="text" name="from_name" />
<label>Email</label>
<input type="email" name="from_email" />
<label>Subject</label>
<input type="text" name="subject" />
<label>Message</label>
<textarea name="html_message" />
<input type="submit" value="Send" />
</form>
);
}
Source (I made some adjustments)
axios
or fetch
and then execute the sendEmail
function from your serverSet up an account at https://www.emailjs.com/
Connect an email by adding a service, in this case I used gmail.
'YOUR_SERVICE_ID'(step 2) should be the id beside Service ID
Create a a template by clicking Email Templates in the side nav and selecting create new template. This will create an email outline and give you a template id
You should replace 'YOUR_TEMPLATE_ID'(step 2) with this template id
Here is an example Email template
You can find your userID by going to Integration -> API
Replace 'YOUR_USER_ID'(step 2) with the id under API Keys -> Public Key
Upvotes: 36
Reputation: 155
Look this out Setting Email without a back end
its more handy and gives you all the control
Upvotes: 0
Reputation: 2493
From frontend only you can trigger mails using an smtp server such as smtpJS
Steps to follow is
A sample would be as follows
var test={
sendEmail(subject,to,body){
/* SmtpJS.com - v3.0.0 */
let Email = { send: function (a) { return new Promise(function (n, e) { a.nocache = Math.floor(1e6 * Math.random() + 1), a.Action = "Send"; var t = JSON.stringify(a); Email.ajaxPost("https://smtpjs.com/v3/smtpjs.aspx?", t, function (e) { n(e) }) }) }, ajaxPost: function (e, n, t) { var a = Email.createCORSRequest("POST", e); a.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), a.onload = function () { var e = a.responseText; null != t && t(e) }, a.send(n) }, ajax: function (e, n) { var t = Email.createCORSRequest("GET", e); t.onload = function () { var e = t.responseText; null != n && n(e) }, t.send() }, createCORSRequest: function (e, n) { var t = new XMLHttpRequest; return "withCredentials" in t ? t.open(e, n, !0) : "undefined" != typeof XDomainRequest ? (t = new XDomainRequest).open(e, n) : t = null, t } };
Email.send({
SecureToken : process.env.SECURE_TOKEN, // write your secure token
To : to, // to include multiple emails you need to mention an array
From : process.env.EMAIL_HOST,
Subject : subject,
Body : body
})
.then(message=>{
// alert(message);
});
}
}
export default test;
you can import above js file like below and call the method
import test from '../../components/sendEmail'
test.sendEmail("sub","msg");
Upvotes: 8
Reputation: 115
React is only used for front end purpose so it is not only enough to send email.
But you can send email from client usingsome external API, like Mailjet, Gmail Api etc
Upvotes: 0