from app.views import get_serializer from app.models import * from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from rest_framework.decorators import api_view from rest_framework import status from rest_framework.response import Response from email.utils import formataddr import smtplib #============================================================================= def send_via_zeptomail(receiver, subject, content, sender): port = 587 smtp_server = "smtp.zeptomail.com" username="emailapikey" password = "wSsVR60l/0LwDf8szz2vc+o/mF5WB1PyRE4ri1Wm7nevGvjK9cdtlUWbV1LyG6UdEG8/HDZBp7x8kBoH1joKjNwkzFFUCiiF9mqRe1U4J3x17qnvhDzMWGhbmxCIKY4JxglskmZhFs1u" # log sent obj = Email_Sent(subject=subject, receiver=receiver, content=content, status=Send_Status.objects.get(pk=1)) try: info = Email_Setup.objects.get(pk=sender) receiver = receiver.split(";") # log obj.save() sent_list = [] for email in receiver: message = MIMEMultipart("alternative") message["Subject"] = subject message["From"] = formataddr((info.display_name, info.email)) message["To"] = email # Turn these into plain/html MIMEText objects part = MIMEText(content, "html") # Add HTML/plain-text parts to MIMEMultipart message # The email client will try to render the last part first message.attach(part) # Create secure connection with server and send email server = smtplib.SMTP(smtp_server, port) server.starttls() server.login(username, password) server.send_message(message) sent_list.append(email) obj.status = Send_Status.objects.get(pk=2) obj.save() result = True except Exception as ex: print(ex) obj.status = Send_Status.objects.get(pk=3) obj.save() result = False return result #============================================================================= def send_one_by_one(receiver, subject, content, sender): # log sent obj = Email_Sent(subject=subject, receiver=receiver, content=content, status=Send_Status.objects.get(pk=1)) try: info = Email_Setup.objects.get(pk=sender) receiver = receiver.split(";") # log obj.save() sent_list = [] for email in receiver: message = MIMEMultipart("alternative") message["Subject"] = subject message["From"] = formataddr((info.display_name, info.email)) message["To"] = email # Turn these into plain/html MIMEText objects part = MIMEText(content, "html") # Add HTML/plain-text parts to MIMEMultipart message # The email client will try to render the last part first message.attach(part) # Create secure connection with server and send email server = smtplib.SMTP(info.smtp, info.port) server.starttls() server.login(info.email, info.password) server.sendmail(info.email, email, message.as_string()) sent_list.append(email) obj.status = Send_Status.objects.get(pk=2) obj.save() result = True except Exception as ex: print(ex) obj.status = Send_Status.objects.get(pk=3) obj.save() result = False return result #============================================================================= def send_all(receiver, subject, content, sender): try: info = Email_Setup.objects.get(pk=sender) message = MIMEMultipart("alternative") message["Subject"] = subject message["From"] = formataddr((info.display_name, info.email)) receiver = receiver.split(";") message["To"] = ", ".join(receiver) # Turn these into plain/html MIMEText objects part = MIMEText(content, "html") # Add HTML/plain-text parts to MIMEMultipart message # The email client will try to render the last part first message.attach(part) # Create secure connection with server and send email server = smtplib.SMTP(info.smtp, info.port) server.starttls() server.login(info.email, info.password) server.sendmail(info.email, receiver, message.as_string()) result = True except Exception as ex: print(ex) result = False Model, serializer_class = get_serializer('Email_Sent') data = {"subject": subject, "receiver": message["To"], "content": content, "status": 2 if result==True else 3} serializer = serializer_class(data=data) serializer.save() if serializer.is_valid() else print(serializer.errors) return result #============================================================================= @api_view(['POST']) def send_email(request): subject = request.data.get('subject') receiver = request.data.get('to') content = request.data.get('content') sender = 1 if 'sender' in request.data: sender = request.data.get('sender') # send email result = send_via_zeptomail(receiver, subject, content, sender) if result: return Response({'message': 'Send success'}, status=200) else: return Response({'message': 'Send failed'}, status=500)