LinuxForum.Fans
Тема

Postfix + dovecot и стандартные папки

Автор: kom-pik 1 сообщений 2694 просмотров
#274011

Появилась задача что бы при настройке почтового клиента создавались стандартные папки
- Входящие
- Отправленные
- Исходящие
- удаленные
Реализовал это путем добавления отдельных секций в dovecot.conf

text
 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 с содержимым

text
/* 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. Это описал если кому интересно и нужно

Если прописать

text
  autocreate = INBOX.Исходящие
  autocreate2 = INBOX.Спам
  autosubscribe = INBOX.Исходящие
  autosubscribe2 = INBOX.Спам

Почтовый клиент выдает иероглифы т.к. dovecot использует кодировку UTF7

Вопрос следующий, можно ли dovecot научить использовать UTF8, где можно прописать, возможно ли вообще это?

Войдите или зарегистрируйтесь, чтобы ответить.