പ്രതികരണത്തിൽ അറ്റാച്ച്‌മെൻ്റുകൾക്കൊപ്പം ഇമെയിലുകൾ അയയ്‌ക്കുന്നതിനുള്ള ഗൈഡ്

React.js and Next.js

ഫയൽ അറ്റാച്ച്മെൻ്റുകൾ ഉപയോഗിച്ച് ഒരു കോൺടാക്റ്റ് ഫോം സൃഷ്ടിക്കുന്നു

ഫയൽ അറ്റാച്ച്‌മെൻ്റുകൾക്കൊപ്പം ഇമെയിലുകൾ അയയ്‌ക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുന്ന ഒരു കോൺടാക്‌റ്റ് ഫോം React-ൽ സൃഷ്‌ടിക്കുന്നത് വെല്ലുവിളിയാകും, പ്രത്യേകിച്ചും റീസെൻഡ് പോലുള്ള മൂന്നാം കക്ഷി സേവനങ്ങൾ സംയോജിപ്പിക്കുമ്പോൾ. പിശകുകൾ ഒഴിവാക്കാൻ ഫയൽ അപ്‌ലോഡുകളുടെ ശരിയായ സജ്ജീകരണവും കൈകാര്യം ചെയ്യുന്നതും നിർണായകമാണ്.

ഫയൽ അറ്റാച്ച്‌മെൻ്റുകൾ കൈകാര്യം ചെയ്യൽ, സെർവർ പിശകുകൾ ഡീബഗ്ഗുചെയ്യൽ തുടങ്ങിയ പൊതുവായ പ്രശ്‌നങ്ങൾ പരിഹരിച്ച്, പ്രതികരണവും വീണ്ടും അയയ്ക്കലും ഉപയോഗിച്ച് ഒരു കോൺടാക്റ്റ് ഫോം സജ്ജീകരിക്കുന്നതിലൂടെ ഈ ഗൈഡ് നിങ്ങളെ നയിക്കും. ഈ ഘട്ടങ്ങൾ പാലിക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് അറ്റാച്ച്‌മെൻ്റുകളുള്ള ഇമെയിലുകൾ തടസ്സമില്ലാതെ അയയ്‌ക്കാൻ കഴിയും.

കമാൻഡ് വിവരണം
Resend.emails.send() from, to, subject, html, അറ്റാച്ച്‌മെൻ്റുകൾ എന്നിവ ഉൾപ്പെടെയുള്ള നിർദ്ദിഷ്‌ട പാരാമീറ്ററുകളുള്ള ഒരു ഇമെയിൽ അയയ്ക്കുന്നു.
setHeader() നിർദ്ദിഷ്ട പാരാമീറ്ററുകൾ ഉപയോഗിച്ച് പ്രതികരണ തലക്കെട്ട് സജ്ജമാക്കുന്നു. 'POST' രീതി മാത്രം അനുവദിക്കുന്നതിന് ഇവിടെ ഉപയോഗിക്കുന്നു.
FileReader() ഒരു ഫയലിൻ്റെ ഉള്ളടക്കം അസമന്വിതമായി വായിക്കുന്നു. ഫയൽ ഒരു base64 സ്ട്രിംഗിലേക്ക് പരിവർത്തനം ചെയ്യാൻ ഇവിടെ ഉപയോഗിക്കുന്നു.
readAsDataURL() ബേസ്64 എൻകോഡ് ചെയ്ത സ്ട്രിംഗായി ഫയൽ റീഡ് ചെയ്യുന്നതിനുള്ള ഫയൽ റീഡറിൻ്റെ രീതി.
onload() ഫയൽ റീഡറിനുള്ള ഇവൻ്റ് ഹാൻഡ്‌ലർ ഫയൽ റീഡിംഗ് ഓപ്പറേഷൻ പൂർത്തിയാകുമ്പോൾ പ്രവർത്തനക്ഷമമാകും.
split() ഒരു സ്‌ട്രിംഗിനെ ഉപസ്‌ട്രിംഗുകളുടെ ഒരു നിരയിലേക്ക് വിഭജിക്കുന്നു. ഡാറ്റ URL പ്രിഫിക്സിൽ നിന്ന് base64 ഉള്ളടക്കം വേർതിരിക്കുന്നതിന് ഇവിടെ ഉപയോഗിക്കുന്നു.
JSON.stringify() ഒരു JavaScript ഒബ്‌ജക്‌റ്റോ മൂല്യമോ JSON സ്‌ട്രിംഗിലേക്ക് പരിവർത്തനം ചെയ്യുന്നു.

പ്രതികരണ കോൺടാക്റ്റ് ഫോമിൽ ഇമെയിൽ അറ്റാച്ച്മെൻ്റ് നടപ്പിലാക്കുന്നു

Next.js API റൂട്ടുകളും അറ്റാച്ച്‌മെൻ്റുകളുള്ള ഇമെയിലുകൾ അയയ്‌ക്കുന്നതിന് റീസെൻഡ് ലൈബ്രറിയും ഉപയോഗിച്ചാണ് ബാക്കെൻഡ് സ്‌ക്രിപ്റ്റ് സൃഷ്‌ടിച്ചത്. പ്രധാന പ്രവർത്തനം, , ഇമെയിൽ അയയ്ക്കാൻ ഉപയോഗിക്കുന്നു. ഈ പ്രവർത്തനം പോലുള്ള പാരാമീറ്ററുകൾ എടുക്കുന്നു , , subject, , ഒപ്പം . ദി പരാമീറ്ററിൽ ഫയൽ ഉള്ളടക്കവും ഫയലിൻ്റെ പേരും ഉൾപ്പെടുന്നു. ആവശ്യമായ മൊഡ്യൂളുകൾ ഇറക്കുമതി ചെയ്തുകൊണ്ട് സ്‌ക്രിപ്റ്റ് ആരംഭിക്കുന്നു, കൂടാതെ എൻവയോൺമെൻ്റ് വേരിയബിളുകളിൽ സംഭരിച്ചിരിക്കുന്ന ഒരു API കീ ഉപയോഗിച്ച് വീണ്ടും അയയ്‌ക്കുന്ന സന്ദർഭം ആരംഭിക്കുന്നു. ഫംഗ്ഷൻ മാത്രം കൈകാര്യം ചെയ്യുന്നു POST അഭ്യർത്ഥനകൾ, ഇമെയിൽ അയയ്‌ക്കൽ, വിജയകരമായപ്പോൾ ഇമെയിൽ ഐഡി തിരികെ നൽകൽ. രീതി ഇല്ലെങ്കിൽ , ഇത് പ്രതികരണ തലക്കെട്ട് മാത്രം അനുവദിക്കുന്നതിന് സജ്ജമാക്കുന്നു 405 സ്റ്റാറ്റസ് അഭ്യർത്ഥിക്കുകയും തിരികെ നൽകുകയും ചെയ്യുന്നു.

മുൻവശത്ത്, കോൺടാക്റ്റ് ഫോം കൈകാര്യം ചെയ്യുന്നതിനായി ഒരു റിയാക്റ്റ് ഘടകം സൃഷ്ടിച്ചിരിക്കുന്നു. React's ഉപയോഗിച്ച് ഫയൽ ഉള്ളടക്കത്തിനും ഫയലിൻ്റെ പേരിനും ഘടകം നില നിലനിർത്തുന്നു കൊളുത്ത്. ഒരു ഫയൽ തിരഞ്ഞെടുക്കുമ്പോൾ, എ ഒബ്‌ജക്റ്റ് ഫയൽ ഉള്ളടക്കം ഒരു base64 എൻകോഡ് സ്ട്രിംഗ് ആയി വായിക്കുന്നു. ഫയലിൻ്റെ ഉള്ളടക്കവും പേരും ഘടകത്തിൻ്റെ അവസ്ഥയിൽ സംഭരിച്ചിരിക്കുന്നു. ഫോം സമർപ്പിക്കുമ്പോൾ, ഒരു അസിൻക് ഫംഗ്‌ഷൻ അയയ്‌ക്കുന്നു a Base64 എൻകോഡ് ചെയ്ത ഫയൽ ഉള്ളടക്കവും ഫയലിൻ്റെ പേരും ഉള്ള ബാക്കെൻഡ് API-ലേക്ക് അഭ്യർത്ഥിക്കുക. അഭ്യർത്ഥന തലക്കെട്ടുകൾ സജ്ജമാക്കി application/json അഭ്യർത്ഥന ബോഡിയിൽ ഫയൽ ഡാറ്റ അടങ്ങിയിരിക്കുന്നു. ഇമെയിൽ വിജയകരമായി അയച്ചാൽ, ഒരു അലേർട്ട് കാണിക്കും; അല്ലെങ്കിൽ, ഒരു പിശക് മുന്നറിയിപ്പ് പ്രദർശിപ്പിക്കും.

വീണ്ടും അയയ്‌ക്കുക ഉപയോഗിച്ച് അറ്റാച്ച്‌മെൻ്റിനൊപ്പം ഇമെയിൽ അയയ്‌ക്കുന്നതിനുള്ള ബാക്കെൻഡ് സ്‌ക്രിപ്റ്റ്

വീണ്ടും അയയ്‌ക്കുന്നതിനൊപ്പം Next.js-ലെ ബാക്കെൻഡ് സ്‌ക്രിപ്റ്റ്

import type { NextApiRequest, NextApiResponse } from 'next';
import { Resend } from 'resend';

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

const send = async (req: NextApiRequest, res: NextApiResponse) => {
  const { method } = req;
  const { content, filename } = req.body;

  switch (method) {
    case 'POST': {
      try {
        const { data } = await resend.emails.send({
          from: 'onboarding@resend.dev',
          to: ['XXXXXXXXXX@gmail.com'],
          subject: 'Email with attachment',
          html: '<p>See attachment</p>',
          attachments: [{
            content,
            filename,
          }],
        });
        return res.status(200).send({ data: data?.id });
      } catch (error) {
        return res.status(500).json({ error: 'Internal Server Error' });
      }
    }
    default: {
      res.setHeader('Allow', ['POST']);
      res.status(405).end(`Method ${method} Not Allowed`);
    }
  }
};

export default send;

ഫയൽ അറ്റാച്ച്‌മെൻ്റിനൊപ്പം കോൺടാക്‌റ്റ് ഫോമിനുള്ള ഫ്രണ്ട്ൻഡ് ഘടകം

React.js-ലെ മുൻഭാഗം ഘടകം

import * as React from 'react';

const ContactForm: React.FC = () => {
  const [content, setContent] = React.useState<string | null>(null);
  const [filename, setFilename] = React.useState('');

  const onSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    if (content === null) {
      alert('Please select a file to upload');
      return;
    }
    const base64Content = content.split(',')[1];
    try {
      await fetch('/api/send', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ content: base64Content, filename }),
      });
      alert('Request sent');
    } catch (e) {
      alert('Something went wrong');
    }
  };

  const onAddFileAction = (e: React.ChangeEvent<HTMLInputElement>) => {
    const reader = new FileReader();
    const files = e.target.files;
    if (files && files.length > 0) {
      reader.onload = (r) => {
        if (r.target?.result) {
          setContent(r.target.result.toString());
          setFilename(files[0].name);
        }
      };
      reader.readAsDataURL(files[0]);
    }
  };

  return (
    <form onSubmit={onSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '20px', width: 200 }}> 
      <input type="file" name="file" onChange={onAddFileAction} accept="image/*" /> 
      <input type="submit" value="Send Email" /> 
    </form> 
  );
};

export default ContactForm;

പ്രതികരണ ഫോമുകളിൽ ഫയൽ അപ്‌ലോഡുകൾ കൈകാര്യം ചെയ്യുന്നു

റിയാക്റ്റ് ഫോമുകളിൽ ഫയൽ അപ്‌ലോഡുകൾ കൈകാര്യം ചെയ്യുമ്പോൾ, ഫയൽ റീഡിംഗും ഡാറ്റ എൻകോഡിംഗും ശരിയായി കൈകാര്യം ചെയ്യുന്നത് ഉറപ്പാക്കേണ്ടത് അത്യാവശ്യമാണ്. ഉപയോഗിച്ച് JavaScript-ലെ API, ഫയലുകളുടെ ഉള്ളടക്കം അസമന്വിതമായി വായിക്കാൻ ഞങ്ങളെ അനുവദിക്കുന്നു, അവയെ ഒരു base64 എൻകോഡ് ചെയ്ത സ്‌ട്രിംഗിലേക്ക് പരിവർത്തനം ചെയ്യുന്നു, ഇത് HTTP വഴി ഫയൽ ഡാറ്റ അയയ്‌ക്കുന്നതിന് ആവശ്യമാണ്. API കോളുകൾ ചെയ്യുമ്പോൾ അഭ്യർത്ഥന ബോഡിയുടെ ഭാഗമായി ഈ എൻകോഡ് ചെയ്ത സ്ട്രിംഗ് എളുപ്പത്തിൽ കൈമാറാൻ കഴിയും.

ഡാറ്റാ അഴിമതിയോ അപൂർണ്ണമായ അപ്‌ലോഡുകളോ പോലുള്ള പ്രശ്‌നങ്ങൾ ഒഴിവാക്കാൻ ഫയൽ ഡാറ്റ ശരിയായി വായിക്കുകയും എൻകോഡ് ചെയ്യുകയും ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുന്നത് നിർണായകമാണ്. കൂടാതെ, വിവിധ ഫയൽ തരങ്ങളും വലുപ്പങ്ങളും ഉചിതമായി കൈകാര്യം ചെയ്യുന്നത് അപ്രതീക്ഷിത പിശകുകൾ തടയാൻ കഴിയും. ശരിയായ പിശക് കൈകാര്യം ചെയ്യലും അലേർട്ടുകൾ പോലുള്ള ഉപയോക്തൃ ഫീഡ്‌ബാക്കും ഫയൽ അപ്‌ലോഡ് പ്രക്രിയയിലൂടെ ഉപയോക്താവിനെ നയിക്കുന്നതിനും എന്തെങ്കിലും തെറ്റ് സംഭവിച്ചാൽ അവരെ അറിയിക്കുന്നതിനും പ്രധാനമാണ്.

  1. ഉപയോഗിക്കുന്നതിൻ്റെ ഉദ്ദേശ്യം എന്താണ് ഫയൽ അപ്‌ലോഡുകളിൽ?
  2. ദി ഫയലുകളുടെ ഉള്ളടക്കങ്ങൾ അസമന്വിതമായി വായിക്കുന്നതിനും HTTP അഭ്യർത്ഥനകളിൽ സംപ്രേഷണം ചെയ്യുന്നതിനായി അവയെ അടിസ്ഥാന64 സ്ട്രിംഗ് ആയി എൻകോഡ് ചെയ്യുന്നതിനും API ഉപയോഗിക്കുന്നു.
  3. എൻ്റെ ഫയൽ അപ്‌ലോഡുകൾ സുരക്ഷിതമാണെന്ന് എനിക്ക് എങ്ങനെ ഉറപ്പാക്കാനാകും?
  4. ഉപയോഗിക്കുന്നതിലൂടെ നിർദ്ദിഷ്ട ഫയൽ തരങ്ങൾ മാത്രമേ സ്വീകരിക്കുകയുള്ളൂവെന്ന് ഉറപ്പാക്കുക ഇൻപുട്ട് ഫീൽഡിലെ ആട്രിബ്യൂട്ട്. കൂടാതെ, സെർവർ വശത്തുള്ള ഫയൽ ഉള്ളടക്കം സാധൂകരിക്കുക.
  5. യുടെ പ്രാധാന്യം എന്താണ് സംഭവം ?
  6. ദി ഫയൽ റീഡിംഗ് ഓപ്പറേഷൻ പൂർത്തിയാകുമ്പോൾ ഇവൻ്റ് ട്രിഗർ ചെയ്യപ്പെടും, ഫയലിൻ്റെ ഉള്ളടക്കങ്ങൾ ആക്സസ് ചെയ്യാനും തുടർ പ്രവർത്തനങ്ങൾ നടത്താനും നിങ്ങളെ അനുവദിക്കുന്നു.
  7. റിയാക്ടിൽ വലിയ ഫയലുകൾ എങ്ങനെ കൈകാര്യം ചെയ്യാം?
  8. വലിയ ഫയലുകൾക്കായി, ബ്രൗസർ മെമ്മറി പരിമിതികൾ ഒഴിവാക്കാനും ഉപയോക്താവിന് പുരോഗതി ഫീഡ്‌ബാക്ക് നൽകാനും ചങ്ക്ഡ് ഫയൽ അപ്‌ലോഡുകൾ നടപ്പിലാക്കുന്നത് പരിഗണിക്കുക.
  9. ഞാൻ എന്തിന് ഉപയോഗിക്കണം ഫയൽ ഡാറ്റ അയയ്ക്കുമ്പോൾ?
  10. API കോളുകളിലെ അഭ്യർത്ഥന ബോഡിക്ക് ആവശ്യമായ ഫോർമാറ്റായ ഒരു JSON സ്‌ട്രിംഗിലേക്ക് ഫയൽ ഡാറ്റ അടങ്ങുന്ന JavaScript ഒബ്‌ജക്റ്റ് പരിവർത്തനം ചെയ്യുന്നു.
  11. ഇമെയിലുകൾ അയയ്‌ക്കുമ്പോൾ 500 (ആന്തരിക സെർവർ പിശക്) എന്താണ് സൂചിപ്പിക്കുന്നത്?
  12. തെറ്റായ API എൻഡ്‌പോയിൻ്റ് കോൺഫിഗറേഷൻ അല്ലെങ്കിൽ ഇമെയിൽ അയയ്‌ക്കുന്ന സേവനത്തിലെ പ്രശ്‌നങ്ങൾ പോലുള്ള സെർവർ സൈഡ് പ്രശ്‌നത്തെ 500 പിശക് സൂചിപ്പിക്കുന്നു.
  13. എൻ്റെ API കോളുകളിലെ 500 പിശക് എനിക്ക് എങ്ങനെ ഡീബഗ് ചെയ്യാം?
  14. വിശദമായ പിശക് സന്ദേശങ്ങൾക്കായി സെർവർ ലോഗുകൾ പരിശോധിച്ച് API എൻഡ്‌പോയിൻ്റും അഭ്യർത്ഥന പേലോഡും ശരിയായി ക്രമീകരിച്ചിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.
  15. എന്ത് വേഷമാണ് ചെയ്യുന്നത് ബാക്കെൻഡ് സ്ക്രിപ്റ്റിൽ മെത്തേഡ് പ്ലേ?
  16. ദി അനുവദനീയമായ HTTP രീതികൾ (ഉദാ. 'POST') വ്യക്തമാക്കിക്കൊണ്ട് HTTP പ്രതികരണ തലക്കെട്ട് സജ്ജീകരിക്കാൻ രീതി ഉപയോഗിക്കുന്നു.
  17. ഫയൽ അപ്‌ലോഡ് ചെയ്യുമ്പോൾ എനിക്ക് എങ്ങനെ ഉപയോക്തൃ ഫീഡ്‌ബാക്ക് നൽകാനാകും?
  18. അപ്‌ലോഡ് സ്റ്റാറ്റസും നേരിട്ട എന്തെങ്കിലും പിശകുകളും ഉപയോക്താക്കളെ അറിയിക്കാൻ അലേർട്ട് സന്ദേശങ്ങൾ, പുരോഗതി ബാറുകൾ അല്ലെങ്കിൽ സ്റ്റാറ്റസ് ഇൻഡിക്കേറ്ററുകൾ ഉപയോഗിക്കുക.
  19. ഈ സജ്ജീകരണം ഉപയോഗിച്ച് എനിക്ക് ഒരേസമയം ഒന്നിലധികം ഫയലുകൾ അപ്‌ലോഡ് ചെയ്യാൻ കഴിയുമോ?
  20. ഈ സജ്ജീകരണം ഒറ്റ ഫയൽ അപ്‌ലോഡുകൾ കൈകാര്യം ചെയ്യുന്നു. ഒന്നിലധികം ഫയലുകൾക്കായി, ഫയൽ ഡാറ്റയുടെ അറേകൾ കൈകാര്യം ചെയ്യുന്നതിനായി നിങ്ങൾ കോഡ് പരിഷ്ക്കരിക്കുകയും അവ API അഭ്യർത്ഥനയിൽ അയയ്ക്കുകയും ചെയ്യേണ്ടതുണ്ട്.

റീസെൻഡ് ഉപയോഗിച്ച് ഒരു റിയാക്റ്റ് കോൺടാക്റ്റ് ഫോമിൽ ഫയൽ അറ്റാച്ച്‌മെൻ്റുകൾ നടപ്പിലാക്കുന്നത് ഫ്രണ്ട്-എൻഡ്, ബാക്ക്-എൻഡ് കോൺഫിഗറേഷനുകൾ ഉൾക്കൊള്ളുന്നു. ഫ്രണ്ട്-എൻഡ് ഫയൽ തിരഞ്ഞെടുക്കൽ, റീഡിംഗ്, എൻകോഡിംഗ് എന്നിവ ബേസ്64-ലേക്ക് കൈകാര്യം ചെയ്യുന്നു, അതേസമയം ബാക്ക്-എൻഡ് റീസെൻഡിൻ്റെ API ഉപയോഗിച്ച് അറ്റാച്ച്‌മെൻ്റിനൊപ്പം ഇമെയിൽ അയയ്ക്കുന്നത് നിയന്ത്രിക്കുന്നു. ശരിയായ പിശക് കൈകാര്യം ചെയ്യലും ഉപയോക്തൃ ഫീഡ്‌ബാക്ക് മെക്കാനിസങ്ങളും തടസ്സമില്ലാത്ത ഉപയോക്തൃ അനുഭവത്തിന് നിർണായകമാണ്. മികച്ച രീതികൾ പിന്തുടരുകയും എല്ലാ കോൺഫിഗറേഷനുകളും ശരിയാണെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നത് സെർവർ പിശകുകൾ പോലെയുള്ള സാധാരണ അപകടങ്ങൾ ഒഴിവാക്കാൻ സഹായിക്കും.