Створення кастомних листів з вкладеннями в Django

pic

У багатьох проєктах відправка електронних листів з вкладеннями є звичайною вимогою. У цій статті ми розглянемо, як налаштувати функціональність відправки електронних листів у Django для включення вкладень, використовуючи кастомний адаптер класу.

Налаштування кастомного адаптера для електронної пошти

Спочатку створимо кастомний адаптер, успадкувавши DefaultAccountAdapter з Django. Цей адаптер буде відповідати за відправку електронних листів з вкладеннями.

from allauth.account.adapter import DefaultAccountAdapter
class CustomAccountAdapter(DefaultAccountAdapter):  
 current_site = 'yourdomain.com' def send_mail_with_attachment(self, template_prefix, email, context):  
 ctx = {  
 "email": email,  
 "current_site": context['current_site'],  
 }  
 ctx.update(context)  
 msg = self.render_mail(template_prefix, email, ctx) # Прикріплюємо файли до листа  
 if context.get('attachments'):  
 for attachment in context['attachments']:  
 file_name, content, content_type = attachment  
 msg.attach(file_name, content, content_type) msg.send() def send_files(self, request, user, email, files, **kwargs):  
 current_site = 'yourdomain.com'  
 recipient_email = email attachments = [] if files:  
 for index, uploaded_file in enumerate(files):  
 file = uploaded_file.file  
 filename = uploaded_file.filename  
 if uploaded_file.exam_date:  
 filename += f" {uploaded_file.exam_date.strftime('%Y-%m-%d')}"  
 existing_filenames = [attachment[0] for attachment in attachments]  
 while filename in existing_filenames:  
 filename += f"_{index}"  
 attachments.append((filename, file.read(), uploaded_file.content_type)) # Підготовка контексту листа  
 ctx = {  
 "user": user,  
 "file_nbr": len(files),  
 "current_site": current_site,  
 "attachments": attachments  
 } # Відправка листа  
 if recipient_email:  
 email_template = "email_templates/email_with_attachments"  
 self.send_mail_with_attachment(email_template, recipient_email, ctx)

Основні можливості

  1. Налаштування контексту листа: Словник ctx включає всі необхідні дані для рендерингу шаблону листа та управління вкладеннями.
  2. Обробка вкладень: Метод send_files динамічно обробляє завантажені файли, забезпечуючи унікальні імена файлів і прикріплюючи їх до листа.
  3. Використання шаблону: Вказавши префікс шаблону (наприклад, email_templates/email_with_attachments), ви можете створювати гнучкі та багаторазові дизайни листів.

Виклик адаптера

У вашому вигляді створіть екземпляр кастомного адаптера та викликайте метод send_files:

from .adapter import CustomAccountAdapter
# Приклад використання в Django вигляді  
class FileSendView(View):  
 def post(self, request):  
 user = request.user  
 email = request.POST.get('email')  
 files = request.FILES.getlist('files') adapter = CustomAccountAdapter()  
 adapter.send_files(  
 request=request,  
 user=user,  
 email=email,  
 files=files,  
 ) return JsonResponse({"message": "Лист успішно надіслано!"})

Шаблон листа

Створіть простий шаблон листа, наприклад, email_templates/email_with_attachments.txt:

Hello {{ user.username }},
Ви отримали {{ file_nbr }} файл(и), прикріплені до цього листа. Будь ласка, перевірте вкладення для деталей.  
З найкращими побажаннями,  
{{ current_site }}

Загальне використання

Це налаштування є універсальним і може бути адаптоване для будь-якого проєкту, де потрібно відправляти електронні листи з вкладеннями. Просто:

  1. Замініть yourdomain.com на домен вашого проєкту.
  2. Налаштуйте шаблон листа відповідно до ваших потреб.
  3. Використовуйте метод send_files в будь-якому місці, де потрібно відправити електронні листи з вкладеннями.

Висновок

Розширюючи адаптер електронної пошти Django, ви отримуєте надійний та багаторазовий спосіб відправки листів з вкладеннями. Цей метод є масштабованим, і його можна налаштувати відповідно до зростання вашого проєкту. Спробуйте це і спростіть функціональність електронної пошти у вашому проєкті!
У багатьох проєктах відправка електронних листів з вкладеннями є звичайною вимогою. У цій статті ми розглянемо, як налаштувати функціональність відправки електронних листів у Django для включення вкладень, використовуючи кастомний адаптер класу.

Налаштування кастомного адаптера для електронної пошти

Спочатку створіть кастомний адаптер, успадкувавши DefaultAccountAdapter з Django. Цей адаптер буде відповідати за відправку електронних листів з вкладеннями.

from allauth.account.adapter import DefaultAccountAdapter
class CustomAccountAdapter(DefaultAccountAdapter):  
 current_site = 'yourdomain.com' def send_mail_with_attachment(self, template_prefix, email, context):  
 ctx = {  
 "email": email,  
 "current_site": context['current_site'],  
 }  
 ctx.update(context)  
 msg = self.render_mail(template_prefix, email, ctx) # Прикріплюємо файли до листа  
 if context.get('attachments'):  
 for attachment in context['attachments']:  
 file_name, content, content_type = attachment  
 msg.attach(file_name, content, content_type) msg.send() def send_files(self, request, user, email, files, **kwargs):  
 current_site = 'yourdomain.com'  
 recipient_email = email attachments = [] if files:  
 for index, uploaded_file in enumerate(files):  
 file = uploaded_file.file  
 filename = uploaded_file.filename  
 if uploaded_file.exam_date:  
 filename += f" {uploaded_file.exam_date.strftime('%Y-%m-%d')}"  
 existing_filenames = [attachment[0] for attachment in attachments]  
 while filename in existing_filenames:  
 filename += f"_{index}"  
 attachments.append((filename, file.read(), uploaded_file.content_type)) # Підготовка контексту листа  
 ctx = {  
 "user": user,  
 "file_nbr": len(files),  
 "current_site": current_site,  
 "attachments": attachments  
 } # Відправка листа  
 if recipient_email:  
 email_template = "email_templates/email_with_attachments"  
 self.send_mail_with_attachment(email_template, recipient_email, ctx)

Основні можливості

  1. Налаштування контексту листа: Словник ctx включає всі необхідні дані для рендерингу шаблону листа та управління вкладеннями.
  2. Обробка вкладень: Метод send_files динамічно обробляє завантажені файли, забезпечуючи унікальні імена файлів і прикріплюючи їх до листа.
  3. Використання шаблону: Вказавши префікс шаблону (наприклад, email_templates/email_with_attachments), ви можете створювати гнучкі та багаторазові дизайни листів.

Виклик адаптера

У вашому вигляді створіть екземпляр кастомного адаптера та викликайте метод send_files:

from .adapter import CustomAccountAdapter
# Приклад використання в Django вигляді  
class FileSendView(View):  
 def post(self, request):  
 user = request.user  
 email = request.POST.get('email')  
 files = request.FILES.getlist('files') adapter = CustomAccountAdapter()  
 adapter.send_files(  
 request=request,  
 user=user,  
 email=email,  
 files=files,  
 ) return JsonResponse({"message": "Лист успішно надіслано!"})

Шаблон листа

Створіть простий шаблон листа, наприклад, email_templates/email_with_attachments.txt:

Hello {{ user.username }},
Ви отримали {{ file_nbr }} файл(и), прикріплені до цього листа. Будь ласка, перевірте вкладення для деталей.  
З найкращими побажаннями,  
{{ current_site }}

Загальне використання

Це налаштування є універсальним і може бути адаптоване для будь-якого проєкту, де потрібно відправляти електронні листи з вкладеннями. Просто:

  1. Замініть yourdomain.com на домен вашого проєкту.
  2. Налаштуйте шаблон листа відповідно до ваших потреб.
  3. Використовуйте метод send_files в будь-якому місці, де потрібно відправити електронні листи з вкладеннями.

Висновок

Розширюючи адаптер електронної пошти Django, ви отримуєте надійний та багаторазовий спосіб відправки листів з вкладеннями. Цей метод є масштабованим, і його можна налаштувати відповідно до зростання вашого проєкту. Спробуйте це і спростіть функціональність електронної пошти у вашому проєкті!

Перекладено з: Creating Custom Emails with Attachments in Django

Leave a Reply

Your email address will not be published. Required fields are marked *