work on package prep

git-svn-id: https://vault.zeeksgeeks.com/svn/django_aws_ses/trunk@5 ed966f06-d3d6-432b-bc91-693151a5c6b4
This commit is contained in:
2021-02-23 00:11:04 +00:00
parent 6329154ffa
commit 54b5c97ce9
8 changed files with 259 additions and 86 deletions

View File

@@ -11,7 +11,7 @@ from .models import (
from . import settings
logger = settings.logger
#logger = settings.logger
class AwsSesSettingsAdmin(admin.ModelAdmin):
model = AwsSesSettings
@@ -44,7 +44,7 @@ admin.site.register(SESStat, SESStatAdmin)
class AdminEmailListFilter(admin.SimpleListFilter):
def queryset(self, request, queryset):
logger.info('self.value(): %s' % self.value())
#logger.info('self.value(): %s' % self.value())
return queryset.filter(email__contains=self.value())
class BounceRecordAdmin(admin.ModelAdmin):

View File

@@ -8,6 +8,7 @@ from django.dispatch import Signal
from datetime import datetime, timedelta
from time import sleep
import sys
from . import settings
from . import signals
@@ -91,6 +92,23 @@ class SESBackend(BaseEmailBackend):
"""Sends one or more EmailMessage objects and returns the number of
email messages sent.
"""
calling_func = ''
try:
fcount = 0
while sys._getframe(fcount).f_code.co_name in ['send_messages', 'send', 'mail_admins', 'send_mail', 'emit', 'handle']:
fcount +=1
calling_func = sys._getframe(fcount).f_code.co_name
except Exception as e:
logger.info("fcount:%s, called from exception = %s" , (fcount, e))
logger.info("called from %s" , (calling_func))
logger.info("send_messages")
if not email_messages:
return
@@ -188,6 +206,15 @@ class SESBackend(BaseEmailBackend):
try:
logger.info("Try to send raw email")
#logger.info('message.message().as_string() = %s' % message.message().as_string())
logger.info("source = %s" % source)
logger.info("message.from_email = %s" % self.dkim_key)
logger.info("message.recipients() = %s" % message.recipients())
logger.info("dkim_key = %s" % self.dkim_key)
logger.info("dkim_domain = %s" % self.dkim_domain)
logger.info("dkim_selector = %s" % self.dkim_selector)
logger.info("dkim_headers = %s" % str(self.dkim_headers))
response = self.connection.send_raw_email(
Source=source or message.from_email,
Destinations=message.recipients(),

View File

@@ -60,7 +60,7 @@ def update_awsses_user(sender, instance, created, **kwargs):
if created:
AwsSesUserAddon.objects.create(user=instance)
try:
instance.AwsSesUserAddon.save()
instance.aws_ses.save()
except AwsSesUserAddon.DoesNotExist:
AwsSesUserAddon.objects.create(user=instance)
@@ -86,7 +86,7 @@ class BounceRecord(models.Model):
reporting_mta = models.CharField(max_length=255, blank=True, null=True,)
status = models.CharField(max_length=255, blank=True, null=True,)
action = models.CharField(max_length=255, blank=True, null=True,)
feedback_id = models.CharField(max_length=255, blank=True, null=True,)
feedback_id = models.TextField(max_length=255, blank=True, null=True,)
diagnostic_code = models.CharField(max_length=255, blank=True, null=True,)
cleared = models.BooleanField(default=False)
@@ -97,7 +97,7 @@ class ComplaintRecord(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)
email = models.EmailField()
sub_type = models.CharField(max_length=255, blank=True, null=True,)
feedback_id = models.CharField(max_length=255, blank=True, null=True,)
feedback_id = models.TextField(max_length=255, blank=True, null=True,)
feedback_type = models.CharField(max_length=255, blank=True, null=True,)
def __str__(self):
@@ -116,8 +116,8 @@ class SendRecord(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)
source = models.EmailField()
destination = models.EmailField()
subject = models.CharField(max_length=255, blank=True, null=True,)
message_id = models.CharField(max_length=255, blank=True, null=True,)
subject = models.TextField(max_length=255, blank=True, null=True,)
message_id = models.TextField(max_length=255, blank=True, null=True,)
aws_process_time = models.IntegerField()
smtp_response = models.CharField(max_length=255, blank=True, null=True,)
status = models.CharField(max_length=255, blank=True, null=True,)

View File

@@ -5,78 +5,79 @@ import logging
from .models import (
AwsSesSettings
)
aws_ses_Settings, c = AwsSesSettings.objects.get_or_create(site_id=settings.SITE_ID)
__all__ = ('ACCESS_KEY', 'SECRET_KEY', 'AWS_SES_REGION_NAME',
'AWS_SES_REGION_ENDPOINT', 'AWS_SES_AUTO_THROTTLE',
'AWS_SES_RETURN_PATH', 'DKIM_DOMAIN', 'DKIM_PRIVATE_KEY',
'DKIM_SELECTOR', 'DKIM_HEADERS', 'TIME_ZONE', 'BASE_DIR',
'BOUNCE_LIMIT','SES_BACKEND_DEBUG','SES_BACKEND_DEBUG_LOGFILE_PATH',
'SES_BACKEND_DEBUG_LOGFILE_FORMATTER')
BASE_DIR = getattr(settings, 'BASE_DIR', None)
if not BASE_DIR:
raise RuntimeError('No BASE_DIR defined in project settings, django_aws_ses requires BASE_DIR to be defined and pointed at your root directory. i.e. BASE_DIR = os.path.dirname(os.path.abspath(__file__))')
DEFAULT_FROM_EMAIL = getattr(settings, 'DEFAULT_FROM_EMAIL', 'no_reply@%s' % aws_ses_Settings.site.domain)
HOME_URL = getattr(settings, 'HOME_URL', '')
UNSUBSCRIBE_TEMPLET = getattr(settings, 'UNSUBSCRIBE_TEMPLET', 'django_aws_ses/unsebscribe.html')
BASE_TEMPLET = getattr(settings, 'UNSUBSCRIBE_TEMPLET', 'django_aws_ses/base.html')
ACCESS_KEY = aws_ses_Settings.access_key or getattr(settings, 'AWS_SES_ACCESS_KEY_ID',getattr(settings, 'AWS_ACCESS_KEY_ID', None))
SECRET_KEY = aws_ses_Settings.secret_key or getattr(settings, 'AWS_SES_SECRET_ACCESS_KEY',getattr(settings, 'AWS_SECRET_ACCESS_KEY', None))
AWS_SES_REGION_NAME = aws_ses_Settings.region_name or getattr(settings, 'AWS_SES_REGION_NAME',getattr(settings, 'AWS_DEFAULT_REGION', 'us-east-1'))
AWS_SES_REGION_ENDPOINT = aws_ses_Settings.region_endpoint or getattr(settings, 'AWS_SES_REGION_ENDPOINT','email.us-east-1.amazonaws.com')
AWS_SES_REGION_ENDPOINT_URL = getattr(settings, 'AWS_SES_REGION_ENDPOINT_URL','https://' + AWS_SES_REGION_ENDPOINT)
AWS_SES_AUTO_THROTTLE = getattr(settings, 'AWS_SES_AUTO_THROTTLE', 0.5)
AWS_SES_RETURN_PATH = getattr(settings, 'AWS_SES_RETURN_PATH', None)
AWS_SES_CONFIGURATION_SET = getattr(settings, 'AWS_SES_CONFIGURATION_SET', None)
DKIM_DOMAIN = getattr(settings, "DKIM_DOMAIN", None)
DKIM_PRIVATE_KEY = getattr(settings, 'DKIM_PRIVATE_KEY', None)
DKIM_SELECTOR = getattr(settings, 'DKIM_SELECTOR', 'ses')
DKIM_HEADERS = getattr(settings, 'DKIM_HEADERS',
('From', 'To', 'Cc', 'Subject'))
TIME_ZONE = settings.TIME_ZONE
VERIFY_BOUNCE_SIGNATURES = getattr(settings, 'AWS_SES_VERIFY_BOUNCE_SIGNATURES', True)
# Domains that are trusted when retrieving the certificate
# used to sign bounce messages.
BOUNCE_CERT_DOMAINS = getattr(settings, 'AWS_SNS_BOUNCE_CERT_TRUSTED_DOMAINS', (
'amazonaws.com',
'amazon.com',
))
SES_BOUNCE_LIMIT = getattr(settings,'BOUNCE_LIMT', 1)
SES_BACKEND_DEBUG = getattr(settings,'SES_BACKEND_DEBUG', False)
try:
aws_ses_Settings, c = AwsSesSettings.objects.get_or_create(site_id=settings.SITE_ID)
except Exception as e:
print("AwsSesSettings does not exist: error: %s" % e)
else:
__all__ = ('ACCESS_KEY', 'SECRET_KEY', 'AWS_SES_REGION_NAME',
'AWS_SES_REGION_ENDPOINT', 'AWS_SES_AUTO_THROTTLE',
'AWS_SES_RETURN_PATH', 'DKIM_DOMAIN', 'DKIM_PRIVATE_KEY',
'DKIM_SELECTOR', 'DKIM_HEADERS', 'TIME_ZONE', 'BASE_DIR',
'BOUNCE_LIMIT','SES_BACKEND_DEBUG','SES_BACKEND_DEBUG_LOGFILE_PATH',
'SES_BACKEND_DEBUG_LOGFILE_FORMATTER')
SES_BACKEND_DEBUG_LOGFILE_PATH = getattr(settings,'SES_BACKEND_DEBUG_LOGFILE_PATH', '%s/aws_ses.log' % BASE_DIR)
SES_BACKEND_DEBUG_LOGFILE_FORMATTER = getattr(settings,'SES_BACKEND_DEBUG_LOGFILE_FORMATTER', '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('django_aws_ses')
# logger.setLevel(logging.WARNING)
if SES_BACKEND_DEBUG:
logger.setLevel(logging.INFO)
# create a file handler
if SES_BACKEND_DEBUG_LOGFILE_PATH:
handler = logging.FileHandler(SES_BACKEND_DEBUG_LOGFILE_PATH)
handler.setLevel(logging.INFO)
# create a logging format
formatter = logging.Formatter(SES_BACKEND_DEBUG_LOGFILE_FORMATTER)
handler.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(handler)
#logger.info('something we are logging')
BASE_DIR = getattr(settings, 'BASE_DIR', None)
if not BASE_DIR:
raise RuntimeError('No BASE_DIR defined in project settings, django_aws_ses requires BASE_DIR to be defined and pointed at your root directory. i.e. BASE_DIR = os.path.dirname(os.path.abspath(__file__))')
DEFAULT_FROM_EMAIL = getattr(settings, 'DEFAULT_FROM_EMAIL', 'no_reply@%s' % aws_ses_Settings.site.domain)
HOME_URL = getattr(settings, 'HOME_URL', '')
UNSUBSCRIBE_TEMPLET = getattr(settings, 'UNSUBSCRIBE_TEMPLET', 'django_aws_ses/unsebscribe.html')
BASE_TEMPLET = getattr(settings, 'UNSUBSCRIBE_TEMPLET', 'django_aws_ses/base.html')
ACCESS_KEY = aws_ses_Settings.access_key or getattr(settings, 'AWS_SES_ACCESS_KEY_ID',getattr(settings, 'AWS_ACCESS_KEY_ID', None))
SECRET_KEY = aws_ses_Settings.secret_key or getattr(settings, 'AWS_SES_SECRET_ACCESS_KEY',getattr(settings, 'AWS_SECRET_ACCESS_KEY', None))
AWS_SES_REGION_NAME = aws_ses_Settings.region_name or getattr(settings, 'AWS_SES_REGION_NAME',getattr(settings, 'AWS_DEFAULT_REGION', 'us-east-1'))
AWS_SES_REGION_ENDPOINT = aws_ses_Settings.region_endpoint or getattr(settings, 'AWS_SES_REGION_ENDPOINT','email.us-east-1.amazonaws.com')
AWS_SES_REGION_ENDPOINT_URL = getattr(settings, 'AWS_SES_REGION_ENDPOINT_URL','https://' + AWS_SES_REGION_ENDPOINT)
AWS_SES_AUTO_THROTTLE = getattr(settings, 'AWS_SES_AUTO_THROTTLE', 0.5)
AWS_SES_RETURN_PATH = getattr(settings, 'AWS_SES_RETURN_PATH', None)
AWS_SES_CONFIGURATION_SET = getattr(settings, 'AWS_SES_CONFIGURATION_SET', None)
DKIM_DOMAIN = getattr(settings, "DKIM_DOMAIN", None)
DKIM_PRIVATE_KEY = getattr(settings, 'DKIM_PRIVATE_KEY', None)
DKIM_SELECTOR = getattr(settings, 'DKIM_SELECTOR', 'ses')
DKIM_HEADERS = getattr(settings, 'DKIM_HEADERS', ('From', 'To', 'Cc', 'Subject'))
TIME_ZONE = settings.TIME_ZONE
VERIFY_BOUNCE_SIGNATURES = getattr(settings, 'AWS_SES_VERIFY_BOUNCE_SIGNATURES', True)
# Domains that are trusted when retrieving the certificate
# used to sign bounce messages.
BOUNCE_CERT_DOMAINS = getattr(settings, 'AWS_SNS_BOUNCE_CERT_TRUSTED_DOMAINS', (
'amazonaws.com',
'amazon.com',
))
SES_BOUNCE_LIMIT = getattr(settings,'BOUNCE_LIMT', 1)
SES_BACKEND_DEBUG = getattr(settings,'SES_BACKEND_DEBUG', False)
SES_BACKEND_DEBUG_LOGFILE_PATH = getattr(settings,'SES_BACKEND_DEBUG_LOGFILE_PATH', '%s/aws_ses.log' % BASE_DIR)
SES_BACKEND_DEBUG_LOGFILE_FORMATTER = getattr(settings,'SES_BACKEND_DEBUG_LOGFILE_FORMATTER', '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('django_aws_ses')
# logger.setLevel(logging.WARNING)
if SES_BACKEND_DEBUG:
logger.setLevel(logging.INFO)
# create a file handler
if SES_BACKEND_DEBUG_LOGFILE_PATH:
handler = logging.FileHandler(SES_BACKEND_DEBUG_LOGFILE_PATH)
handler.setLevel(logging.INFO)
# create a logging format
formatter = logging.Formatter(SES_BACKEND_DEBUG_LOGFILE_FORMATTER)
handler.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(handler)
#logger.info('something we are logging')

View File

@@ -1,5 +1,4 @@
from django.conf.urls import include, url
from django.urls import path
from django.views.decorators.csrf import csrf_exempt
from .views import (

View File

@@ -17,7 +17,6 @@ User = get_user_model()
from . import settings
from . import signals
from . import utils
from .models import (
BounceRecord,
ComplaintRecord

View File

@@ -365,8 +365,8 @@ def handle_bounce(request):
except Exception as e:
logger.info("error well trying to get_or_create record: %s" % e)
logger.info(
u'Received delivery notification: messageId: %s, feedbackType: %s',
message_id, feedback_type,
u'Received delivery notification: messageId: %s',
message_id,
extra={
'notification': notification,
},
@@ -375,7 +375,7 @@ def handle_bounce(request):
signals.delivery_received.send(
sender=handle_bounce,
mail_obj=mail_obj,
delivery_obj=delivery_obj,
delivery_obj=send_obj,
raw_message=raw_json,
)