devnamdev2003 commited on
Commit
dbb7932
·
1 Parent(s): 3784aa0
Files changed (1) hide show
  1. api/views.py +60 -42
api/views.py CHANGED
@@ -1,8 +1,14 @@
1
  from rest_framework.views import APIView
2
  from rest_framework.response import Response
3
  from rest_framework import status
4
- from .models import UserData, AIKey, AppVersion
5
  from django.shortcuts import get_object_or_404
 
 
 
 
 
 
6
 
7
 
8
  class UserDataPostView(APIView):
@@ -90,24 +96,9 @@ class GetFieldView(APIView):
90
  if hasattr(obj, field):
91
  return Response({field: getattr(obj, field)})
92
  return Response({"error": "Invalid field"}, status=status.HTTP_400_BAD_REQUEST)
93
-
94
 
95
 
96
- from .models import Contact
97
- from .serializers import ContactSerializer
98
- from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView, CreateAPIView
99
- import os
100
- import os
101
- import smtplib
102
- from email.mime.text import MIMEText
103
- from email.mime.multipart import MIMEMultipart
104
-
105
- EMAIL_HOST = "smtp.gmail.com"
106
- EMAIL_PORT = 587
107
- EMAIL_USER = os.getenv('EMAIL_HOST_USER')
108
- EMAIL_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
109
-
110
- upper_body="""
111
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
112
  <html
113
  xmlns="http://www.w3.org/1999/xhtml"
@@ -337,7 +328,7 @@ upper_body="""
337
  >
338
  <p style="line-height: 160%">
339
  Dear
340
- """
341
  lower_body = """,
342
  </p>
343
  <p style="line-height: 160%">&nbsp;</p>
@@ -966,37 +957,64 @@ lower_body = """,
966
 
967
  """
968
 
 
 
 
 
 
 
969
  class ContactList1(CreateAPIView):
970
  queryset = Contact.objects.all()
971
  serializer_class = ContactSerializer
 
972
  def perform_create(self, serializer):
973
  instance = serializer.save()
974
  user_ip = self.get_client_ip(self.request)
975
- email=instance.email
976
- name=instance.name
977
- message=instance.message
978
- msg = MIMEMultipart()
979
- msg['From'] = EMAIL_USER
980
- msg['To'] = email
981
- msg['Subject'] = "Confirmation: We've Received Your Message"
982
- body=upper_body+name+lower_body
983
- msg.attach(MIMEText(body, 'html'))
984
- server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT)
985
- server.starttls()
986
- server.login(EMAIL_USER, EMAIL_PASSWORD)
987
- server.sendmail(EMAIL_USER, email, msg.as_string())
988
- text = f"Subject: Form Submission from {name}\n\nName: {name}\nEmail: {email}\nMessage: {message}\nIP Address: {user_ip}"
989
- server.sendmail(EMAIL_USER, "devnamdevcse@gmail.com", text)
990
- server.quit()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
991
  def get_client_ip(self, request):
992
- x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
993
  if x_forwarded_for:
994
- ip = x_forwarded_for.split(',')[0]
995
  else:
996
- ip = request.META.get('REMOTE_ADDR')
997
  return ip
998
-
999
-
1000
- # class ContactList2(RetrieveUpdateDestroyAPIView):
1001
- # queryset = Contact.objects.all()
1002
- # serializer_class = ContactSerializer
 
1
  from rest_framework.views import APIView
2
  from rest_framework.response import Response
3
  from rest_framework import status
4
+ from .models import UserData, AIKey, AppVersion, Contact
5
  from django.shortcuts import get_object_or_404
6
+ from .serializers import ContactSerializer
7
+ from rest_framework.generics import CreateAPIView
8
+ import os
9
+ import smtplib
10
+ from email.mime.text import MIMEText
11
+ from email.mime.multipart import MIMEMultipart
12
 
13
 
14
  class UserDataPostView(APIView):
 
96
  if hasattr(obj, field):
97
  return Response({field: getattr(obj, field)})
98
  return Response({"error": "Invalid field"}, status=status.HTTP_400_BAD_REQUEST)
 
99
 
100
 
101
+ upper_body = """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
103
  <html
104
  xmlns="http://www.w3.org/1999/xhtml"
 
328
  >
329
  <p style="line-height: 160%">
330
  Dear
331
+ """
332
  lower_body = """,
333
  </p>
334
  <p style="line-height: 160%">&nbsp;</p>
 
957
 
958
  """
959
 
960
+ EMAIL_HOST = "smtp.gmail.com"
961
+ EMAIL_PORT = 587
962
+ EMAIL_USER = os.getenv("EMAIL_HOST_USER")
963
+ EMAIL_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD")
964
+
965
+
966
  class ContactList1(CreateAPIView):
967
  queryset = Contact.objects.all()
968
  serializer_class = ContactSerializer
969
+
970
  def perform_create(self, serializer):
971
  instance = serializer.save()
972
  user_ip = self.get_client_ip(self.request)
973
+
974
+ email = instance.email
975
+ name = instance.name
976
+ message = instance.message
977
+
978
+ try:
979
+ msg = MIMEMultipart()
980
+ msg["From"] = EMAIL_USER
981
+ msg["To"] = email
982
+ msg["Subject"] = "Confirmation: We've Received Your Message"
983
+
984
+ body = upper_body + name + lower_body
985
+ msg.attach(MIMEText(body, "html"))
986
+
987
+ # 🔥 IMPORTANT: timeout added
988
+ server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT, timeout=10)
989
+ server.starttls()
990
+ server.login(EMAIL_USER, EMAIL_PASSWORD)
991
+
992
+ server.sendmail(EMAIL_USER, email, msg.as_string())
993
+
994
+ admin_text = (
995
+ f"Subject: Form Submission from {name}\n\n"
996
+ f"Name: {name}\n"
997
+ f"Email: {email}\n"
998
+ f"Message: {message}\n"
999
+ f"IP Address: {user_ip}"
1000
+ )
1001
+
1002
+ server.sendmail(EMAIL_USER, "devnamdevcse@gmail.com", admin_text)
1003
+
1004
+ except Exception as e:
1005
+ # ❗ Prevent worker crash
1006
+ print("Email error:", e)
1007
+
1008
+ finally:
1009
+ try:
1010
+ server.quit()
1011
+ except:
1012
+ pass
1013
+
1014
  def get_client_ip(self, request):
1015
+ x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
1016
  if x_forwarded_for:
1017
+ ip = x_forwarded_for.split(",")[0]
1018
  else:
1019
+ ip = request.META.get("REMOTE_ADDR")
1020
  return ip