Создание контактной формы с вложенными файлами
Создание контактной формы в 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. Правильная обработка ошибок и механизмы обратной связи с пользователем имеют решающее значение для бесперебойной работы пользователей. Следование рекомендациям и обеспечение правильности всех конфигураций поможет избежать распространенных ошибок, таких как ошибки сервера.