Появилась задача что бы при настройке почтового клиента создавались стандартные папки
- Входящие
- Отправленные
- Исходящие
- удаленные
Реализовал это путем добавления отдельных секций в dovecot.conf
protocol imap {
mail_plugins = autocreate
}
plugin {
autocreate = INBOX.Sent
autocreate2 = INBOX.Deleted
autocreate3 = INBOX.Spam
autocreate4 = INBOX.Junk Mail
autosubscribe = INBOX.Sent
autosubscribe2 = INBOX.Deleted
autosubscribe3 = INBOX.Spam
autosubscribe4 = INBOX.Junk Mail
}Дописал INBOX. т.к. использую префикс INBOX.
Создал autocreate_plugin.so в /usr/lib/dovecot/modules/imap с содержимым
/* Copyright (C) 2007 Timo Sirainen, LGPLv2.1 */
/*
export DOVECOT=~/src/dovecot-1.1.0
gcc -fPIC -shared -g -Wall -I$DOVECOT -I$DOVECOT/src/lib \
-I$DOVECOT/src/lib-storage -I$DOVECOT/src/lib-mail \
-I$DOVECOT/src/lib-imap -DHAVE_CONFIG_H \
autocreate-plugin.c -o autocreate_plugin.so
Usage:
plugin {
autocreate = Trash
autocreate2 = Spam
#autocreate3 = ..etc..
autosubscribe = Trash
autosubscribe2 = Spam
#autosubscribe3 = ..etc..
}
*/
#include "lib.h"
#include "mail-storage.h"
#include "mail-namespace.h"
#include <stdlib.h>
const char *autocreate_plugin_version = PACKAGE_VERSION;
static void (*autocreate_next_hook_mail_namespaces_created)
(struct mail_namespace *ns);
static void autocreate_mailboxes(struct mail_namespace *namespaces)
{
struct mail_namespace *ns;
char env_name[20];
const char *name;
unsigned int i;
i = 1;
name = getenv("AUTOCREATE");
while (name != NULL) {
ns = mail_namespace_find(namespaces, &name);
if (ns != NULL) {
(void)mail_storage_mailbox_create(ns->storage,
name, FALSE);
}
i_snprintf(env_name, sizeof(env_name), "AUTOCREATE%d", ++i);
name = getenv(env_name);
}
}
static void autosubscribe_mailboxes(struct mail_namespace *namespaces)
{
struct mail_namespace *ns;
char env_name[20];
const char *name;
unsigned int i;
i = 1;
name = getenv("AUTOSUBSCRIBE");
while (name != NULL) {
ns = mail_namespace_find(namespaces, &name);
if (ns != NULL)
(void)mailbox_list_set_subscribed(ns->list, name, TRUE);
i_snprintf(env_name, sizeof(env_name), "AUTOSUBSCRIBE%d", ++i);
name = getenv(env_name);
}
}
static void
autocreate_mail_namespaces_created(struct mail_namespace *namespaces)
{
if (autocreate_next_hook_mail_namespaces_created != NULL)
autocreate_next_hook_mail_namespaces_created(namespaces);
autocreate_mailboxes(namespaces);
autosubscribe_mailboxes(namespaces);
}
void autocreate_plugin_init(void);
void autocreate_plugin_deinit(void);
void autocreate_plugin_init(void)
{
autocreate_next_hook_mail_namespaces_created =
hook_mail_namespaces_created;
hook_mail_namespaces_created = autocreate_mail_namespaces_created;
}
void autocreate_plugin_deinit(void)
{
hook_mail_namespaces_created =
autocreate_next_hook_mail_namespaces_created;
} P. S. Это описал если кому интересно и нужно
Если прописать
autocreate = INBOX.Исходящие
autocreate2 = INBOX.Спам
autosubscribe = INBOX.Исходящие
autosubscribe2 = INBOX.СпамПочтовый клиент выдает иероглифы т.к. dovecot использует кодировку UTF7
Вопрос следующий, можно ли dovecot научить использовать UTF8, где можно прописать, возможно ли вообще это?
