Initial commit (Clean history)
This commit is contained in:
149
app/email.py
Normal file
149
app/email.py
Normal file
@@ -0,0 +1,149 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user