add support for configuring mail server character set per server. fixes #548

This commit is contained in:
jonaswinkler
2021-05-16 11:58:32 +02:00
parent 71c60da268
commit d6446b3efd
5 changed files with 155 additions and 80 deletions

View File

@@ -8,6 +8,18 @@ class MailAccountAdmin(admin.ModelAdmin):
list_display = ("name", "imap_server", "username")
fieldsets = [
(None, {
'fields': ['name', 'imap_server', 'imap_port']
}),
(_("Authentication"), {
'fields': ['imap_security', 'username', 'password']
}),
(_("Advanced settings"), {
'fields': ['character_set']
})
]
class MailRuleAdmin(admin.ModelAdmin):

View File

@@ -200,8 +200,10 @@ class MailAccountHandler(LoggingMixin):
f"{str(AND(**criterias))}")
try:
messages = M.fetch(criteria=AND(**criterias),
mark_seen=False, charset='UTF-8')
messages = M.fetch(
criteria=AND(**criterias),
mark_seen=False,
charset=rule.account.character_set)
except Exception:
raise MailError(
f"Rule {rule}: Error while fetching folder {rule.folder}")

View File

@@ -0,0 +1,28 @@
# Generated by Django 3.2.3 on 2021-05-16 09:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('paperless_mail', '0007_auto_20210106_0138'),
]
operations = [
migrations.AddField(
model_name='mailaccount',
name='character_set',
field=models.CharField(default='UTF-8', help_text="The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'.", max_length=256, verbose_name='character set'),
),
migrations.AlterField(
model_name='mailrule',
name='action_parameter',
field=models.CharField(blank=True, help_text='Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots.', max_length=256, null=True, verbose_name='action parameter'),
),
migrations.AlterField(
model_name='mailrule',
name='folder',
field=models.CharField(default='INBOX', help_text='Subfolders must be separated by dots.', max_length=256, verbose_name='folder'),
),
]

View File

@@ -50,6 +50,14 @@ class MailAccount(models.Model):
_("password"),
max_length=256)
character_set = models.CharField(
_("character set"),
max_length=256,
default="UTF-8",
help_text=_("The character set to use when communicating with the "
"mail server, such as 'UTF-8' or 'US-ASCII'.")
)
def __str__(self):
return self.name
@@ -122,7 +130,9 @@ class MailRule(models.Model):
folder = models.CharField(
_("folder"),
default='INBOX', max_length=256)
default='INBOX', max_length=256,
help_text=_("Subfolders must be separated by dots.")
)
filter_from = models.CharField(
_("filter from"),
@@ -166,7 +176,8 @@ class MailRule(models.Model):
max_length=256, blank=True, null=True,
help_text=_("Additional parameter for the action selected above, "
"i.e., "
"the target folder of the move to folder action.")
"the target folder of the move to folder action. "
"Subfolders must be separated by dots.")
)
assign_title_from = models.PositiveIntegerField(