Урок 14 / 22 · Commentail 1.3.2
Письмо состоит из темы, обычного текста и HTML-версии. Меняйте обе версии вместе: часть клиентов показывает только текст. Для начала изменим подтверждение адреса.
Создадим три файла
В проектной папке templates создайте commentail/emails/confirm_subject.txt:
{% load i18n %}{% autoescape off %}{% trans "Confirm your email" %} — {{ site_name }}{% endautoescape %}
Тема должна быть непустой и однострочной. Далее commentail/emails/confirm.txt:
{% load i18n %}{% autoescape off %}{% trans "Confirm your email" %}
{{ site_name }}
{{ action_url }}
{% trans "Open the link and confirm on the next page." %}
{% endautoescape %}
И commentail/emails/confirm.html:
{% load i18n %}<!doctype html>
<html><body>
<h1>{% trans "Confirm your email" %}</h1>
<p>{{ site_name }}</p>
<p><a href="{{ action_url }}">{% trans "Open confirmation page" %}</a></p>
<p>{% trans "Open the link and confirm on the next page." %}</p>
</body></html>
Эти английские строки в {% trans %} — ключи вашего проектного каталога переводов. Для русского результата добавьте их переводы в locale проекта и скомпилируйте каталог; каталог самой библиотеки не обязан содержать новые фразы. Для одного языка допустим собственный текст, но двуязычному сайту нужен перевод.
В plain text autoescape выключен, чтобы амперсанды ссылок и имена оставались буквальными. В HTML оставьте экранирование включённым. Действие выполняется на открывшейся странице, поэтому не называйте переход мгновенным подтверждением.
Остальные виды
Тем же способом переопределяются edit, published, rejected, reply: у каждого <kind>_subject.txt, <kind>.txt, <kind>.html. Publication/rejection включают решения по авторским правкам; используйте is_revision, чтобы текст не обещал публикацию нового комментария вместо принятия исправления. Пустой HTML-файл создаёт пустую HTML-часть, а не отключает её.
Доступны только kind, author_name, site_name, site_url, target_url, action_url, view_url, reason, is_revision, expires_at. reason относится к отклонению, view_url — к подтверждению. Ссылки абсолютные. request, адрес получателя и модель комментария в контекст не передаются. В уведомление об ответе нельзя добавлять текст/фрагмент ответа: штатный контракт предусматривает имена и ссылки.
Общие emails/base.html и button.html — внутренние помощники оформления, не дополнительный стабильный API. Если нужна независимая вёрстка, переопределите пять HTML-тел целиком.
Проверим письма
Сначала используйте console backend на учебном сайте. Создайте гостя, подтверждение, публикацию, правку, отклонение и прямой ответ. Смотрите обе MIME-части и непустую тему. Письмо рендерится на сохранённом языке получателя, даже если обработчик работает с другой локалью.
После локальной проверки отправьте на собственный разрешённый адрес через выбранный backend и посмотрите реальный клиент. Ошибка синтаксиса или темы оставит задание failed; исправьте шаблон и повторите отправку, пока исходная ссылка действительна.
Другие уроки по этой задаче
- 6. Отправляем письма через SMTP
- 7. Почтовый API Resend через Django Anymail
- 8. Настраиваем обработчик писем и очистки
Выберите способ входа или оставьте комментарий как гость ниже.