برنامه نویسی

نحوه ارسال یک ایمیل خوشامدگویی گرم با Resend، Next-Auth و React-Email

در این مقاله چه خواهید یافت؟

ما اغلب با برنامه‌هایی مواجه می‌شویم که هر زمان که ثبت‌نام می‌کنیم، ایمیل خوش‌آمدگویی برای ما ارسال می‌کنند. این ایمیل‌ها معمولاً راهی برای تأیید آدرس ایمیل ما، راهنمایی ما در مورد پلتفرم و ایجاد احساس استقبال بیشتر در ما هستند. در این مقاله یاد می گیریم که چگونه با استفاده از Resend، Next-Auth.js و React-Email یک ایمیل خوش آمدگویی برنامه ریزی شده ارسال کنیم.

گیف خوش آمدید

Papermark – اولین جایگزین منبع باز پویا برای DocSend.

قبل از شروع، اجازه دهید Papermark را به شما معرفی کنم. این یک جایگزین منبع باز برای DocSend است که به شما در مدیریت اشتراک‌گذاری امن اسناد، از جمله تجزیه و تحلیل بلادرنگ کمک می‌کند. این همه منبع باز است!

من کاملاً هیجان زده خواهم شد اگر بتوانید به ما یک ستاره بدهید! فراموش نکنید که نظرات خود را در بخش نظرات به اشتراک بگذارید ❤️
https://github.com/mfts/papermark

اپلیکیشن کاغذ مارک

پروژه را راه اندازی کنید

بیایید جلو برویم و محیط پروژه خود را برای برنامه استقبال از ایمیل خود تنظیم کنیم. ما یک برنامه Next.js ایجاد می کنیم و خدمات و ابزارهای مورد نیاز را راه اندازی می کنیم.

چای را تنظیم کنید

قبل از غواصی، ایده خوبی است که یک مدیر بسته دستی داشته باشید، مانند tea. این محیط توسعه شما را اداره می کند و زندگی شما را ساده می کند!

sh <(curl https://tea.xyz)

# --- OR ---
# using brew
brew install teaxyz/pkgs/tea-cli
وارد حالت تمام صفحه شوید

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

tea شما را آزاد می کند تا روی کد خود تمرکز کنید، زیرا به نصب آن کمک می کند node، npm، vercel و هر بسته دیگری که ممکن است نیاز داشته باشید. بهترین قسمت این است، tea همه بسته ها را در یک پوشه اختصاصی نصب می کند (پیش فرض: ~/.tea)، فایل های سیستم خود را مرتب و مرتب نگه دارید.

راه اندازی Next.js با TypeScript و Tailwindcss

استفاده خواهیم کرد create-next-app برای تولید یک پروژه Next.js جدید. ما همچنین از TypeScript و Tailwind CSS استفاده خواهیم کرد، بنابراین مطمئن شوید که وقتی از شما خواسته شد آن گزینه ها را انتخاب کنید.

npx create-next-app

# ---
# you'll be asked the following prompts
What is your project named?  my-app
Would you like to add TypeScript with this project?  Y/N
# select `Y` for typescript
Would you like to use ESLint with this project?  Y/N
# select `Y` for ESLint
Would you like to use Tailwind CSS with this project? Y/N
# select `Y` for Tailwind CSS
Would you like to use the `src/ directory` with this project? Y/N
# select `N` for `src/` directory
What import alias would you like configured? `@/*`
# enter `@/*` for import alias
وارد حالت تمام صفحه شوید

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

راه اندازی Next-Auth

Next-Auth یک کتابخانه احراز هویت برای Next.js است. من هم دارم نصب میکنم prisma-adapter برای Next-Auth، که به ما امکان می دهد از Prisma به عنوان ORM پایگاه داده خود استفاده کنیم.

npm install next-auth @next-auth/prisma-adapter
وارد حالت تمام صفحه شوید

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

راه اندازی مجدد ارسال

ارسال مجدد سرویسی است که به شما امکان می دهد ایمیل های تراکنشی را از طریق API ارسال کنید که برای نیازهای ما مناسب است.

npm install resend
وارد حالت تمام صفحه شوید

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

برای ارسال مجدد ثبت نام کنید و کلید API خود را از https://resend.com دریافت کنید. این کلید API را به خود اضافه کنید .env فایل.

# .env
RESEND_API_KEY="YOUR_API_KEY"
وارد حالت تمام صفحه شوید

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

راه اندازی React-Email

React.email مجموعه ای از کامپوننت های با کیفیت بالا و بدون سبک برای ایجاد ایمیل های زیبا با استفاده از React و TypeScript است. این از همان سازندگان Resend است.

npm install react-email @react-email/components
وارد حالت تمام صفحه شوید

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

من فقط بسته کامپوننت ها را نصب می کنم، اما شما می توانید بسته کامل را که شامل کامپوننت ها و یک تم پیش فرض است نیز نصب کنید.

ساخت اپلیکیشن

اکنون که راه‌اندازی خود را آماده کرده‌ایم، آماده شروع ساخت برنامه خود هستیم. ویژگی های اصلی که ما پوشش خواهیم داد عبارتند از:

  • ثبت نام کاربر
  • ارسال ایمیل خوش آمدید
  • قالب ایمیل

شماره 1 ثبت نام کاربر

این یک تابع باطن اصلاح شده است که مستقیماً از اسناد اعتبار بعدی استفاده می کند prisma به عنوان پایگاه داده و گوگل به عنوان ارائه دهنده اعتبار.

ما ایمیل خوش آمدگویی را در تابع ارسال می کنیم sendWelcomeEmail زیر

// pages/api/auth/[...nextauth].ts
import NextAuth, { type NextAuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import prisma from "@/lib/prisma";
import { sendWelcomeEmail } from "@/lib/emails/send-welcome";

export const authOptions: NextAuthOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
    }),
  ],
  adapter: PrismaAdapter(prisma),
  session: { strategy: "jwt" },
  callbacks: {
    jwt: async ({ token, user }) => {
      if (!token.email) {
        return {};
      }
      if (user) {
        token.user = user;
      }
      return token;
    },
  },
  events: {
    async createUser(message) {
      const params = {
        user: {
          name: message.user.name,
          email: message.user.email,
        },
      };
      await sendWelcomeEmail(params); // <-- send welcome email
    }
  },
};

export default NextAuth(authOptions);

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

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

شماره 2 ارسال ایمیل خوش آمدید

این دومین تابع backend ما است که فراخوانی می شود sendWelcomeEmail و استفاده می کند resend برای ارسال ایمیل ها

// lib/emails/send-welcome.ts
import { Resend } from "resend";
import { WelcomeEmail } from "@/components/emails/welcome";

const resend = new Resend(process.env.RESEND_API_KEY!);

export async function sendWelcomeEmail({name, email}: {name: string | null | undefined, email: string | null | undefined}) {
  const emailTemplate = WelcomeEmail({ name });
  try {
    // Send the email using the Resend API
    await resend.emails.send({
      from: "Marc from Papermark <marc@papermark.io>",
      to: email as string,
      subject: "Welcome to Papermark!",
      react: emailTemplate,
    });
  } catch (error) {
    // Log any errors and re-throw the error
    console.log({ error });
    throw error;
  }
}
وارد حالت تمام صفحه شوید

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

شماره 3 قالب ایمیل

محتوای واقعی ایمیل در اینجا تعریف می شود. ما ظاهر و احساس ایمیل را با آن سفارشی می کنیم react-email اجزاء.

می‌توانید نمونه‌های ایمیل بیشتری را در اینجا بیابید: https://demo.react.email/preview/vercel-invite-user

// components/emails/welcome.tsx
import React from "react";
import {
  Body,
  Button,
  Container,
  Head,
  Heading,
  Html,
  Preview,
  Text,
  Tailwind,
} from "@react-email/components";


interface WelcomeEmailProps {
  name: string | null | undefined;
}

export const WelcomeEmail = ({ name }: WelcomeEmailProps) => {
  const previewText = `Welcome to Papermark, ${name}!`;

  return (
    <Html>
      <Head />
      <Preview>{previewText}</Preview>
      <Tailwind>
        <Body className="bg-white my-auto mx-auto font-sans">
          <Container className="my-10 mx-auto p-5 w-[465px]">
            <Heading className="text-2xl font-normal text-center p-0 my-8 mx-0">
              Welcome to Papermark!
            </Heading>
            <Text className="text-sm">Hello {name},</Text>
            <Text className="text-sm">
              We're excited to have you onboard at <span>Papermark</span>. We
              hope you enjoy your journey with us. If you have any questions or
              need assistance, feel free to reach out.
            </Text>
            <Section className="text-center mt-[32px] mb-[32px]">
              <Button
                pX={20}
                pY={12}
                className="bg-[#00A3FF] rounded text-white text-xs font-semibold no-underline text-center"
                href={`${process.env.NEXT_PUBLIC_BASE_URL}/welcome`}
              >
                Get Started
              </Button>
            </Section>
            <Text className="text-sm">
              Cheers,
              <br />
              The Papermark Team
            </Text>
          </Container>
        </Body>
      </Tailwind>
    </Html>
  );
};
وارد حالت تمام صفحه شوید

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

پاداش: پیش نمایش ایمیل ها

React-Email دارای یک عملکرد رندر داخلی است که به شما امکان می دهد پیش نمایش الگوهای ایمیل خود را در مرورگر مشاهده کنید. این برای آزمایش و اشکال زدایی طرح بسیار مفید است.

  • اضافه کردن email کلید به scripts بخش شما package.json فایل.
// package.json
{
  ...
  "scripts": {
    ...
    "email": "email dev --dir ./components/emails --port 3001"
  },
  ...
}
وارد حالت تمام صفحه شوید

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

  • دستور زیر را برای راه اندازی سرور پیش نمایش ایمیل اجرا کنید.
npm run email
وارد حالت تمام صفحه شوید

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

  • مرورگر خود را باز کرده و به آن بروید http://localhost:3001 برای مشاهده پیش نمایش قالب ایمیل خود.

توضیحات تصویر

نتیجه

و شما آن را دارید! ما سیستمی برای ارسال ایمیل های خوش آمدگویی با استفاده از Resend، Next-Auth و React-Email ساخته ایم. در حالی که مثال در اینجا ساده است، می توان همان مفاهیم را برای رسیدگی به هر نوع ایمیلی که ممکن است برنامه شما نیاز به ارسال داشته باشد، گسترش داد.

ممنون که خواندید. من مارک هستم، یک مدافع منبع باز. من در حال ساخت papermark.io هستم – جایگزین منبع باز برای DocSend.

برای من، کدنویسی یک سفر مداوم یادگیری و کشف است. پس دوستان من به کدنویسی ادامه دهید!

کمک کنید خارج شوم!

اگر این مقاله را مفید یافتید و کمی بهتر متوجه ارسال مجدد، تأیید بعدی و واکنش ایمیل شدید، بسیار خوشحال خواهم شد اگر بتوانید به ما ستاره بدهید! و فراموش نکنید که نظرات خود را در نظرات به اشتراک بگذارید ❤️

https://github.com/mfts/papermark

گربه ممنون

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

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

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

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