برنامه نویسی

نحوه استفاده از 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 بروم و برای یک حساب کاربری رایگان ثبت نام کنم. ثبت نام سرراست است.

وب سایت EmailJS

در مرحله بعد، من وارد حساب کاربری خود می شوم و یک سرویس ایمیل جدید راه اندازی می کنم. برای این مثال، ما فقط از Gmail استفاده خواهیم کرد. در داشبورد خود، را انتخاب کنید افزودن سرویس جدید و انتخاب کنید جیمیل. سپس انتخاب کنید سرویس اتصال. این شما را به حساب Gmail خود می برد تا با Emailjs پیوند برقرار کنید. پس از انجام، انتخاب کنید ایجاد سرویس.

افزودن سرویس جدید

سرویس جیمیل

اتصال و ایجاد سرویس

در مرحله بعد، باید یک قالب ایمیل ایجاد کنیم. در داشبورد خود، را انتخاب کنید قالب های ایمیل و انتخاب کنید ایجاد قالب جدید. برای نسخه رایگان، فقط می توانید 2 قالب ایمیل ایجاد کنید.

قالب جدید

شما می توانید قالب ایمیل خود را همانطور که می خواهید پیکربندی کنید.

پیکربندی قالب

در تصویر بالا، بدنه قالب با باری که از برنامه خود ارسال می‌کنم مطابقت دارد. شما همچنین باید ایمیل گیرنده را مشخص کنید و می توانید Bcc و CC اضافی اضافه کنید.

در مرحله بعد، ما باید 3 اعتبار مهم را دریافت کنیم. شناسه سرویس، شناسه الگو و کلید عمومی شما.

برای دریافت شناسه قالب، به تب تنظیمات قالب بروید و کلید قالب را پیدا خواهید کرد. همچنین می توانید نام قالب را در اینجا تغییر دهید.

شناسه الگو

بعد، به خدمات ایمیل روی صفحه نمایش داده می شود و شناسه خدمات سرویسی را که قبلاً به آن متصل کرده بودیم پیدا خواهید کرد.

شناسه خدمات

بعد، به حساب و در زیر تب General، کلیدهای عمومی و خصوصی خود را پیدا خواهید کرد. ما فقط به کلید عمومی نیاز داریم.

کلید عمومی و خصوصی

در نهایت، ما به کد خود برمی گردیم و تابع onSubmit خود را به روز می کنیم و emailjs را در کد خود ادغام می کنیم.
برای انجام این کار، در App.tsx خود، import emailjs from "@emailjs/browser";

سپس تابع onSubmit خود را به صورت زیر تغییر دهید:

تابع 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;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و همین است. اکنون می توانید پیام های جدید تماس با ما را مستقیماً در ایمیل گیرنده ای که مشخص کرده اید دریافت کنید.

ممنون که خواندید. اگر مفید بود، لایک کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا