Cloudflare Email worker – нет текста сообщения

Вопрос или проблема

Я пытаюсь написать автоответчик по электронной почте. Электронное письмо отправляется нормально, имеет тему и правильные адреса отправителя/получателя. Однако текст сообщения всегда пуст. Вот мой код (данные скрыты):

import { EmailMessage } from "cloudflare:email";
import { createMimeMessage } from "mimetext";

export default {
     async email(message, env, ctx) {

    const msg = createMimeMessage();
    msg.setHeader("In-Reply-To", message.headers.get("Message-ID"));
    msg.setSender({ name: "Я", addr: "[email protected]" });
    msg.setRecipient(message.from);
    msg.setSubject("Автоответ");
    msg.addMessage({
      contentType: 'text/html',
      data: "Это <b>автоответ</b>"
    });

    const replyMessage = new EmailMessage(
      "[email protected]",
      message.from,
      msg.asRaw()
    );

    await message.reply(replyMessage);
    }
}

Я также пробовал установить сообщение напрямую:

replyMessage.message = {contentType : "text/html", data:"Это <b>автоответ</b>"};

Использование

contentType = "text/plain"

тоже не сработало.

Ответ или решение

Решение проблемы с пустым телом сообщения в Cloudflare Email Worker

Ваша задача — разработка автоматического ответа по электронной почте с использованием Cloudflare Email Worker. Из предоставленного вами кода видно, что сообщение отправляется корректно: указаны адреса отправителя и получателя, а также задана тема. Однако основная проблема заключается в том, что тело сообщения всегда остается пустым.

Анализ существующего кода

Рассмотрим основные части вашего кода:

  1. Импортирование необходимых модулей:

    import { EmailMessage } from "cloudflare:email";
    import { createMimeMessage } from "mimetext";

    Вы используете интеграции Cloudflare для работы с сообщениями электронной почты и создание MIME-сообщений. Это правильный шаг.

  2. Создание MIME-сообщения:

    const msg = createMimeMessage();
    msg.setHeader("In-Reply-To", message.headers.get("Message-ID"));
    msg.setSender({ name: "Me", addr: "<email>" });
    msg.setRecipient(message.from);
    msg.setSubject("Auto-reply");
    msg.addMessage({
     contentType: 'text/html',
     data: "This is an &lt;b&gt;auto-reply&lt;/b&gt;"
    });

    На этом этапе вы создаете MIME-сообщение и пытаетесь добавить текст. Однако, необходимо удостовериться, что данные в data не экранируются ненужным образом.

  3. Создание и отправка ответа:

    const replyMessage = new EmailMessage(
     "<email>",
     message.from,
     msg.asRaw()
    );
    
    await message.reply(replyMessage);

    Здесь вы формируете новое сообщение ответа, используя msg.asRaw(), что, вероятно, приводит к тому, что ваше тело сообщения не передается должным образом.

Возможные причины и решения

  • Проблема с форматом данных: Ваша попытка использования HTML-кода для передачи данных в сообщении может быть причиной проблемы. Попробуйте передать данные без экранирования:

    msg.addMessage({
     contentType: 'text/html',
     data: "This is an <b>auto-reply</b>" // Измените здесь
    });
  • Использование contentType: Убедитесь, что вы правильно устанавливаете contentType. Если текущее значение не работает (например, text/html), попробуйте использовать text/plain как альтернативу.

  • Использование replyMessage.message: Если предыдущие шаги не помогли, попробуйте изменить способ настройки replyMessage:

    replyMessage.message = {
     contentType: 'text/html',
     data: "This is an <b>auto-reply</b>"
    };
  • Проверка структуры MIME: Возможно, стоит убедиться, что ваше MIME-сообщение корректно составлено и имеет необходимые заголовки. Вы можете использовать метод msg.asRaw() для отладки и проверки структуры получаемого сообщения.

Заключение

Ваш код в целом выглядит правильно, однако следует обратить внимание на форматирование текста в сообщении, а также порядок операционных действий. Попробуйте предложенные изменения и проследите за тем, чтобы тело сообщения формировалось корректно без лишнего экранирования. Если после выполненных изменений проблема не решится, возможно, стоит обратиться в поддержку Cloudflare или изучить документацию по работе с их Email Worker более детально.

Оцените материал
Добавить комментарий

Капча загружается...