You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

57 lines
2.0 KiB

"""ModelAdmin for SMTPServer"""
from django import forms
from django.contrib import admin
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from emencia.django.newsletter.models import SMTPServer
class SMTPServerAdminForm(forms.ModelForm):
"""Form ofr SMTPServer with custom validation"""
def clean_headers(self):
"""Check if the headers are well formated"""
for line in self.cleaned_data['headers'].splitlines():
elems = line.split(':')
if len(elems) < 2:
raise ValidationError(_('Invalid syntax, do not forget the ":".'))
if len(elems) > 2:
raise ValidationError(_('Invalid syntax, several assignments by line.'))
return self.cleaned_data['headers']
class Meta:
model = SMTPServer
class SMTPServerAdmin(admin.ModelAdmin):
form = SMTPServerAdminForm
list_display = ('name', 'host', 'port', 'user', 'tls', 'mails_hour',)
list_filter = ('tls',)
search_fields = ('name', 'host', 'user')
fieldsets = ((None, {'fields': ('name', )}),
(_('Configuration'), {'fields': ('host', 'port',
'user', 'password', 'tls')}),
(_('Miscellaneous'), {'fields': ('mails_hour', 'headers'),
'classes': ('collapse', )}),
)
actions = ['check_connections']
actions_on_top = False
actions_on_bottom = True
def check_connections(self, request, queryset):
"""Check the SMTP connection"""
message = '%s connection %s'
for server in queryset:
try:
smtp = server.connect()
if smtp:
status = 'OK'
smtp.quit()
else:
status = 'KO'
except:
status = 'KO'
self.message_user(request, message % (server.__unicode__(), status))
check_connections.short_description = _('Check connection')