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
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')
|
|
|