نحوه استفاده از EmailJS برای صفحه تماس با ما
چند وقت پیش به یاد دارم که در یک پروژه جانبی کار می کردم. من قرار بود یک صفحه تماس ساده با ما را به عنوان بخشی از پروژه پیاده سازی کنم. در ابتدا، من از Google Firebase برای ذخیره پاسخ ها استفاده کردم. سپس، من پیدا کردم ایمیل JS و استفاده از آن بسیار ساده و بسیار کارآمد بود.
در این مقاله، نحوه راه اندازی یک حساب EmailJS و ادغام آن در برنامه ReactJS/NextJS را یاد خواهید گرفت.
ابتدا اجازه دهید با ایجاد یک React Project جدید با استفاده از Vite شروع کنیم.
VSCode یا هر ویرایشگر کد دیگری را باز کنید، ترمینال را باز کنید و تایپ کنید:yarn create vite
یا npm create vite@latest
سپس دستورات را دنبال کنید. من در این مثال از React with Typescript استفاده خواهم کرد.
برای اطلاعات بیشتر در مورد Vite می توانید وب سایت رسمی ویتی را بررسی کنید.
در مرحله بعد، اجازه دهید برخی از وابستگی ها را نصب کنیم. در ترمینال خود، وارد کنید yarn add @emailjs/browser react-hook-form
. سپس اجرا کنید yarn dev
برای شروع پروژه
در اینجا می توانید اطلاعات بیشتری در مورد react-hook-form دریافت کنید
من برخی از فایل های پیش فرض را در دایرکتوری حذف می کنم و برخی از سبک ها را همانطور که در زیر مشاهده می کنید تغییر می دهم.
در مرحله بعد، در App.tsx خود، یک فرم اولیه تماس با ما قرار خواهم داد.
import styles from "./app.module.css";
import { useForm } from "react-hook-form";
import { useState } from "react";
interface IFormInput {
firstName: string;
lastName: string;
email: string;
phone: string;
message: string;
}
function App() {
const [loading, setLoading] = useState(false);
const {
register,
handleSubmit,
reset,
formState: { errors },
} = useForm<IFormInput>();
const onSubmit = async (data: IFormInput) => {
console.log(data);
};
return (
<div className={styles.contact_form}>
<h1>Contact Form</h1>
<p>Our friendly team would love to hear from you.</p>
<form className={styles.form} onSubmit={handleSubmit(onSubmit)}>
<div className={styles.group}>
<div className={styles.input_group}>
<label htmlFor="firstName">First Name</label>
<input
type="text"
{...register("firstName", { required: true })}
placeholder="Enter your first name"
/>
{errors.firstName && (
<span className={styles.error}>This field is required</span>
)}
</div>
<div className={styles.input_group}>
<label htmlFor="lastName">Last Name</label>
<input
type="text"
{...register("lastName", { required: true })}
placeholder="Enter your last name"
/>
{errors.lastName && (
<span className={styles.error}>This field is required</span>
)}
</div>
</div>
<div className={styles.input_group}>
<label htmlFor="email">Email Address</label>
<input
type="email"
{...register("email", { required: true })}
placeholder="Enter your email address"
/>
{errors.email && (
<span className={styles.error}>This field is required</span>
)}
</div>
<div className={styles.input_group}>
<label htmlFor="phone">Phone Number</label>
<input
type="tel"
{...register("phone", { required: true })}
placeholder="+2348123456789"
/>
{errors.phone && (
<span className={styles.error}>This field is required</span>
)}
</div>
<div className={styles.input_group}>
<label htmlFor="message">Message</label>
<textarea
{...register("message", { required: true })}
placeholder="Leave us a message..."
/>
{errors.message && (
<span className={styles.error}>This field is required</span>
)}
</div>
<button disabled={loading} className={styles.button} type="submit">
{loading ? "Sending..." : "Send Message"}
</button>
</form>
</div>
);
}
export default App;
در قطعه کد بالا، من از ماژول CSS برای مؤلفه خود در کنار react-hook-form برای اعتبارسنجی فرم خود استفاده می کنم. من یک حالت بارگیری را به طور پیش فرض روی false اعلام کردم.
بعد، من می خواهم به وب سایت رسمی EmailJS بروم و برای یک حساب کاربری رایگان ثبت نام کنم. ثبت نام سرراست است.
در مرحله بعد، من وارد حساب کاربری خود می شوم و یک سرویس ایمیل جدید راه اندازی می کنم. برای این مثال، ما فقط از Gmail استفاده خواهیم کرد. در داشبورد خود، را انتخاب کنید افزودن سرویس جدید و انتخاب کنید جیمیل. سپس انتخاب کنید سرویس اتصال. این شما را به حساب Gmail خود می برد تا با Emailjs پیوند برقرار کنید. پس از انجام، انتخاب کنید ایجاد سرویس.
در مرحله بعد، باید یک قالب ایمیل ایجاد کنیم. در داشبورد خود، را انتخاب کنید قالب های ایمیل و انتخاب کنید ایجاد قالب جدید. برای نسخه رایگان، فقط می توانید 2 قالب ایمیل ایجاد کنید.
شما می توانید قالب ایمیل خود را همانطور که می خواهید پیکربندی کنید.
در تصویر بالا، بدنه قالب با باری که از برنامه خود ارسال میکنم مطابقت دارد. شما همچنین باید ایمیل گیرنده را مشخص کنید و می توانید Bcc و CC اضافی اضافه کنید.
در مرحله بعد، ما باید 3 اعتبار مهم را دریافت کنیم. شناسه سرویس، شناسه الگو و کلید عمومی شما.
برای دریافت شناسه قالب، به تب تنظیمات قالب بروید و کلید قالب را پیدا خواهید کرد. همچنین می توانید نام قالب را در اینجا تغییر دهید.
بعد، به خدمات ایمیل روی صفحه نمایش داده می شود و شناسه خدمات سرویسی را که قبلاً به آن متصل کرده بودیم پیدا خواهید کرد.
بعد، به حساب و در زیر تب General، کلیدهای عمومی و خصوصی خود را پیدا خواهید کرد. ما فقط به کلید عمومی نیاز داریم.
در نهایت، ما به کد خود برمی گردیم و تابع onSubmit خود را به روز می کنیم و emailjs را در کد خود ادغام می کنیم.
برای انجام این کار، در App.tsx خود، import emailjs from "@emailjs/browser";
سپس تابع onSubmit خود را به صورت زیر تغییر دهید:
در نهایت، App.tsx شما باید به شکل زیر باشد:
import styles from "./app.module.css";
import { useForm } from "react-hook-form";
import { useState } from "react";
import emailjs from "@emailjs/browser";
interface IFormInput {
firstName: string;
lastName: string;
email: string;
phone: string;
message: string;
}
function App() {
const [loading, setLoading] = useState(false);
const {
register,
handleSubmit,
reset,
formState: { errors },
} = useForm<IFormInput>();
const onSubmit = (data: IFormInput) => {
setLoading(true);
const templateParams = {
...data,
};
emailjs
.send(
"your_service_id",
"your_template_id",
templateParams,
"your_public_key"
)
.then(() => {
reset();
setLoading(false);
alert("One of our agents will contact you soon!");
});
};
return (
<div className={styles.contact_form}>
<h1>Contact Form</h1>
<p>Our friendly team would love to hear from you.</p>
<form className={styles.form} onSubmit={handleSubmit(onSubmit)}>
<div className={styles.group}>
<div className={styles.input_group}>
<label htmlFor="firstName">First Name</label>
<input
type="text"
{...register("firstName", { required: true })}
placeholder="Enter your first name"
/>
{errors.firstName && (
<span className={styles.error}>This field is required</span>
)}
</div>
<div className={styles.input_group}>
<label htmlFor="lastName">Last Name</label>
<input
type="text"
{...register("lastName", { required: true })}
placeholder="Enter your last name"
/>
{errors.lastName && (
<span className={styles.error}>This field is required</span>
)}
</div>
</div>
<div className={styles.input_group}>
<label htmlFor="email">Email Address</label>
<input
type="email"
{...register("email", { required: true })}
placeholder="Enter your email address"
/>
{errors.email && (
<span className={styles.error}>This field is required</span>
)}
</div>
<div className={styles.input_group}>
<label htmlFor="phone">Phone Number</label>
<input
type="tel"
{...register("phone", { required: true })}
placeholder="+2348123456789"
/>
{errors.phone && (
<span className={styles.error}>This field is required</span>
)}
</div>
<div className={styles.input_group}>
<label htmlFor="message">Message</label>
<textarea
{...register("message", { required: true })}
placeholder="Leave us a message..."
/>
{errors.message && (
<span className={styles.error}>This field is required</span>
)}
</div>
<button disabled={loading} className={styles.button} type="submit">
{loading ? "Sending..." : "Send Message"}
</button>
</form>
</div>
);
}
export default App;
و همین است. اکنون می توانید پیام های جدید تماس با ما را مستقیماً در ایمیل گیرنده ای که مشخص کرده اید دریافت کنید.
ممنون که خواندید. اگر مفید بود، لایک کنید.