from djoser import email from django.conf import settings from django.core.mail import EmailMultiAlternatives class CustomPasswordResetEmail(email.PasswordResetEmail): template_name = None def render(self, context=None): context = self.get_context_data() url = context['url'] user = context['user'] self.html_content = self.create_email_html(url, user) self.plain_content = self.create_email_plain(url, user) def get_context_data(self): return super().get_context_data() def get_subject(self): """ subject ถูกสร้างโดย Djoser ใน context['subject'] """ context = self.get_context_data() return context.get("subject", "Password Reset") def send(self, to, *args, **kwargs): self.render() msg = EmailMultiAlternatives( subject=self.get_subject(), body=self.plain_content, from_email=self.from_email, to=to ) if self.html_content: msg.attach_alternative(self.html_content, "text/html") # djcelery_email จะ Intercep เมธอด send() ของ EmailMultiAlternatives โดยอัตโนมัติ return msg.send() def create_email_html(self, url, user): # ดึง context data อีกครั้งเพื่อเข้าถึง protocol และ domain context = self.get_context_data() full_reset_url = f"{context['protocol']}://{context['domain']}{url}" # สร้าง Full URL return f"""

สวัสดีคุณ {user.username},

คุณได้ร้องขอการรีเซ็ตรหัสผ่าน โปรดคลิกลิงก์ด้านล่างเพื่อตั้งรหัสผ่านใหม่:

รีเซ็ตรหัสผ่าน (คลิกที่นี่)

หากลิงก์ไม่สามารถคลิกได้ กรุณาคัดลอกลิงก์นี้ไปวางในเบราว์เซอร์: {full_reset_url}

หากคุณไม่ได้ร้องขอ โปรดเพิกเฉยต่ออีเมลนี้

ขอบคุณครับ,
ทีม DDO Console

""" def create_email_plain(self, url, user): # ดึง context data อีกครั้งเพื่อเข้าถึง protocol และ domain context = self.get_context_data() full_reset_url = f"{context['protocol']}://{context['domain']}{url}" # ⬅️ สร้าง Full URL return f""" สวัสดี {user.username}, คุณได้ร้องขอการรีเซ็ตรหัสผ่าน กรุณาใช้ลิงก์ด้านล่างเพื่อตั้งรหัสผ่านใหม่: {full_reset_url} หากคุณไม่ได้ร้องขอ โปรดเพิกเฉยต่ออีเมลนี้ ขอบคุณครับ, ทีม DDO Console """