149 lines
5.2 KiB
Python
149 lines
5.2 KiB
Python
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
|
|
send_via_zeptomail(receiver, subject, content, sender)
|
|
return Response(status=status.HTTP_204_NO_CONTENT) |