Send Email With Attachment

ফর্ম এর মাধ্যমে gmail email সেন্ড করার জন্য আগে gmail মেইল সেটআপ করতে হবে। এজন্য পূর্বের টিউটোরিয়ালে দেখানো হয়েছে কিভাবে জিমেইল app secret কোড জেনারেট করতে হয়। secret কোড জেনারেট করে নিচের পদ্ধতি

Email Setup Backend

Settings.py

#gmail_send/settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'olee.techs@gmail.com'
EMAIL_HOST_PASSWORD = 'jzsbfkxvmxiabwow' #past the key or password app here
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'from oleetech'

forms.py

from django import forms
class ContactForm(forms.Form):
    email = forms.EmailField(required=True)
    subject = forms.CharField(required=True)
    message = forms.CharField(widget=forms.Textarea, required=True)
    attachment = forms.FileField(required=False)

Views.py

from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.core.mail import EmailMessage
from django.conf import settings
from .forms import ContactForm

def send_email(request):
    if request.method == 'POST':
        form = ContactForm(request.POST, request.FILES)
        if form.is_valid():
            # Get form data
            email = form.cleaned_data['email']
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            attachment = form.cleaned_data.get('attachment')

            # Create EmailMessage object
            email_message = EmailMessage(
                subject=subject,
                body=message,
                from_email=settings.EMAIL_HOST_USER,
                to=[email],
                
            )

            # Attach file to email
            if attachment:
                email_message.attach(attachment.name, attachment.read(), attachment.content_type)

            # Send email
            try:
                email_message.send()
                return HttpResponse('Email sent successfully.')
            except Exception as e:
                return HttpResponse('Email could not be sent. Error message: {}'.format(str(e)))
    else:
        form = ContactForm()
    return render(request, 'nid/email_form.html', {'form': form})

Templates

templates/nid/email_form.html

<form  method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="submit">
</form>

urls.py

from django.urls import path
from . import views
urlpatterns = [ 
  path('emailform/', views.send_email, name='emailform'),

]

OutPut

Last updated