১৫.৫ : ডিপোজিট ইমেল সেন্ড করা
আজকে আমরা ডিপোজিট করার পর ইউজার কে মেইল সেন্ড করবো। যেহেতু আমাদেরকে ডিপোজিট, উইথড্র সবার জন্যেই মেইল সেন্ড করতে হবে সেজন্যে আমরা একটা ফাংশন বানিয়ে ফেলি যেটা ইনপুট হিসেবে ইউজার, amount, টেমপ্লেট আর সাবমিট কে নিবে কল করার সময়।
সো আমরা আমাদের ভিউ তে গিয়ে যখনি আমাদের ডিপোজিট এর কাজ শেষ হবে আমরা ইউজার কে মেইল পাঠিয়ে দিবো।
একটা মেইল সেন্ড করতে গেলে আমাদের কি কি লাগে??
১. Sender
২. Receiver
৩. Subject
৪.body
এখন আমরা বডি তে একটা html টেমপ্লেট কে রেন্ডার করবো সেটার জন্যে আমরা EmailMultiAlternatives এই ফাংশন ইউজ করতেছে সেখানে সাবজেক্ট দিবো, বডি এর জায়গা টা খালি রাখবো আর to অর্থাৎ রিসিভার এর ইমেইল দিবো ।
এরপর attach_alternatives ফাংশন এর মধ্যে আমাদের মেসেজ কে দিবো। তবে এখানে আগে html টেমপ্লেট কে render_to_string ফাংশন দিয়ে স্ট্রিং এ কনভার্ট করতে হবে আর html টেমপ্লেট এ ডাইনামিক ভ্যালু পাঠানোর জন্যে ডিকশনারি ফরম্যাট এ ইউজার আর amount কে পাঠিয়ে দিবো।
এরপর সেন্ড ফাংশন কে কল করবো।
EmailMultiAlternatives = html টেম্পলেট সেন্ড করতে হেল্প করে
render_to_string = html টেম্পলেট কে রেন্ডার করে স্ট্রিং এ কনভার্ট করে না হলে মেইল সেন্ড হবে না
from django.core.mail import EmailMessage, EmailMultiAlternatives
from django.template.loader import render_to_string
def send_transaction_email(user, amount, subject, template):
message = render_to_string(template, {
'user' : user,
'amount' : amount,
})
send_email = EmailMultiAlternatives(subject, '', to=[user.email])
send_email.attach_alternative(message, "text/html")
send_email.send()
class DepositMoneyView(TransactionCreateMixin):
form_class = DepositForm
title = 'Deposit'
def get_initial(self):
initial = {'transaction_type': DEPOSIT}
return initial
def form_valid(self, form):
amount = form.cleaned_data.get('amount')
account = self.request.user.account
# if not account.initial_deposit_date:
# now = timezone.now()
# account.initial_deposit_date = now
account.balance += amount # amount = 200, tar ager balance = 0 taka new balance = 0+200 = 200
account.save(
update_fields=[
'balance'
]
)
messages.success(
self.request,
f'{"{:,.2f}".format(float(amount))}$ was deposited to your account successfully'
)
send_transaction_email(self.request.user, amount, "Deposite Message", "transactions/deposite_email.html")
return super().form_valid(form)
Last updated