Создание контактной формы с вложенными файлами
Создание контактной формы в React, позволяющей пользователям отправлять электронные письма с вложенными файлами, может оказаться сложной задачей, особенно при интеграции сторонних сервисов, таких как Resend. Обеспечение правильной настройки и обработки загрузки файлов имеет решающее значение для предотвращения ошибок.
В этом руководстве вы узнаете, как настроить контактную форму с помощью React и Resend, решая распространенные проблемы, такие как обработка вложений файлов и отладка ошибок сервера. Выполнив эти шаги, вы сможете беспрепятственно отправлять электронные письма с вложениями.
| Команда | Описание |
|---|---|
| Resend.emails.send() | Отправляет электронное письмо с указанными параметрами, включая «от», «кому», «тема», «html» и вложения. |
| setHeader() | Устанавливает заголовок ответа с указанными параметрами. Используется здесь, чтобы разрешить только метод POST. |
| FileReader() | Считывает содержимое файла асинхронно. Используется здесь для преобразования файла в строку base64. |
| readAsDataURL() | Метод FileReader для чтения файла как строки в кодировке Base64. |
| onload() | Обработчик событий для FileReader, который срабатывает после завершения операции чтения файла. |
| split() | Разбивает строку на массив подстрок. Используется здесь для отделения содержимого base64 от префикса URL-адреса данных. |
| JSON.stringify() | Преобразует объект или значение JavaScript в строку JSON. |
Реализация вложения электронной почты в контактной форме React
Серверный скрипт создается с использованием маршрутов API Next.js и библиотеки повторной отправки для отправки электронных писем с вложениями. Ключевая функция, Resend.emails.send(), используется для отправки электронной почты. Эта функция принимает такие параметры, как from, to, subject, html, и attachments. attachments Параметр включает содержимое и имя файла. Скрипт начинается с импорта необходимых модулей и инициализирует экземпляр Resend, используя ключ API, хранящийся в переменных среды. Функция обрабатывает только POST запросы, отправка электронного письма и возврат идентификатора электронной почты в случае успеха. Если метод не POST, он устанавливает заголовок ответа, чтобы разрешить только POST запрашивает и возвращает статус 405.
Во внешнем интерфейсе создается компонент React для обработки контактной формы. Компонент поддерживает состояние содержимого и имени файла с помощью React. useState крюк. При выборе файла появляется FileReader объект считывает содержимое файла как строку в кодировке Base64. Содержимое и имя файла сохраняются в состоянии компонента. При отправке формы асинхронная функция отправляет POST запрос к серверному API с содержимым и именем файла в кодировке Base64. Заголовки запросов имеют значение 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;
Обработка загрузки файлов в формах React
При загрузке файлов в формах React важно обеспечить правильную обработку чтения файлов и кодирования данных. Используя FileReader API в JavaScript позволяет нам асинхронно читать содержимое файлов, преобразуя его в строку в кодировке Base64, которая необходима для отправки данных файла через HTTP. Эту закодированную строку можно легко передать как часть тела запроса при вызове API.
Обеспечение правильного чтения и кодирования данных файла имеет решающее значение для предотвращения таких проблем, как повреждение данных или неполная загрузка. Кроме того, правильная обработка файлов различных типов и размеров может предотвратить непредвиденные ошибки. Правильная обработка ошибок и обратная связь с пользователем, например оповещения, также важны для того, чтобы помочь пользователю пройти через процесс загрузки файлов и проинформировать его, если что-то пойдет не так.
Общие вопросы и ответы об отправке электронных писем с вложениями в React
- Какова цель использования FileReader при загрузке файлов?
- FileReader API используется для асинхронного чтения содержимого файлов и кодирования его в виде строки base64 для передачи в HTTP-запросах.
- Как я могу обеспечить безопасность загрузки файлов?
- Убедитесь, что принимаются только определенные типы файлов, используя accept атрибут в поле ввода. Кроме того, проверьте содержимое файла на стороне сервера.
- В чем состоит значение onload событие в FileReader?
- onload Событие срабатывает после завершения операции чтения файла, что позволяет вам получить доступ к содержимому файла и выполнить дальнейшие действия.
- Как я могу обрабатывать большие файлы в React?
- Для больших файлов рассмотрите возможность загрузки файлов по частям, чтобы избежать ограничений памяти браузера и обеспечить пользователю обратную связь о ходе выполнения.
- Почему мне нужно использовать JSON.stringify при отправке данных файла?
- JSON.stringify преобразует объект JavaScript, содержащий данные файла, в строку JSON, которая является обязательным форматом для тела запроса в вызовах API.
- Что означает 500 (внутренняя ошибка сервера) при отправке электронных писем?
- Ошибка 500 обычно указывает на проблему на стороне сервера, например неправильную конфигурацию конечной точки API или проблемы в службе отправки электронной почты.
- Как я могу отладить ошибку 500 в вызовах API?
- Проверьте журналы сервера на наличие подробных сообщений об ошибках и убедитесь, что конечная точка API и полезные данные запроса настроены правильно.
- Какую роль играет res.setHeader метод play в бэкэнд-скрипте?
- res.setHeader Метод используется для установки заголовка ответа HTTP с указанием разрешенных методов HTTP (например, «POST»).
- Как я могу предоставить обратную связь пользователю во время загрузки файлов?
- Используйте предупреждающие сообщения, индикаторы выполнения или индикаторы состояния, чтобы информировать пользователей о статусе загрузки и любых обнаруженных ошибках.
- Могу ли я загрузить несколько файлов одновременно с помощью этой настройки?
- Эта настройка обрабатывает загрузку отдельных файлов. Для нескольких файлов вам необходимо изменить код для обработки массивов данных файлов и отправки их в запросе API.
Заключительные мысли о контактных формах React
Реализация вложений файлов в контактной форме React с помощью Resend включает в себя как внешние, так и внутренние конфигурации. Интерфейсная часть обрабатывает выбор, чтение и кодирование файлов в base64, а внутренняя часть управляет отправкой электронного письма с вложением с помощью API Resend. Правильная обработка ошибок и механизмы обратной связи с пользователем имеют решающее значение для бесперебойной работы пользователей. Следование рекомендациям и обеспечение правильности всех конфигураций поможет избежать распространенных ошибок, таких как ошибки сервера.