Автор Тема: API для почты  (Прочитано 2141 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gft

  • Новичок
  • *
  • Сообщений: 14
  • Репутация +1/-0
    • Просмотр профиля
API для почты
« : 27 Августа 2010, 11:42:20 »
В связи с обсуждением развития почты, есть предложение добавить API для нее.
Пока три идеи плагинов придумал.
1. по правой кнопке письмо в задачу, как писал yusl
2. по правой кнопке задачу в письмо юзерам, указанным в задаче (тоже полезно)
3. по приходу почты автоматически прогнать ее через правила и распихать по задачам/категориям/проектам

1.
typedef что-то LPMAIL;
typedef что-то LPMAILATTACHMENT;

Хуки:
LPCWSTR GetMailMenuCommandName();
void MailCommandExecute(LPMAIL szMailUIDs);

Получаем данные письма:
UINT AddinLT_Mail_GetTitle(LPMAIL mUID);
UINT AddinLT_Mail_GetBody(LPMAIL mUID);
UINT AddinLT_Mail_GetSourceMail(LPMAIL mUID);
DATE AddinLT_Mail_GetSendDate(LPMAIL mUID);
DATE AddinLT_Mail_GetReceiveDate(LPMAIL mUID);

Получаем вложения:
UINT AddinLT_Mail_GetAttachmentsCount(LPMAIL szUID);
LPMAILATTACHMENT *AddinLT_Mail_GetAttachments(LPMAIL szUID);

Преобразуем вложения в файлы задачи:
если LPMAILATTACHMENT не определяет имя файла сам по себе то
LPCWSTR AddinLT_Mail_atIDToFileName(LPMAIL szUID, LPMAILATTACHMENT atID);
BOOL AddinLT_Task_AddFile(LPCWSTR szUID, LPCWSTR fileName); // не нашел ее, может искал плохо
или просто
BOOL AddinLT_Task_AddFileFromMailAttachment(LPCWSTR szUID, LPMAIL mailUID, LPMAILATTACHMENT atID);

2.
typedef что-то LPТASKATTACHMENT;

UINT AddinLT_Task_GetAttachmentsCount(LPCWSTR szUID);
LPTASKATTACHMENT *AddinLT_Task_GetAttachments(LPCWSTR szUID);

LPCWSTR AddInLT_Mail_GetDefaultFrom(); // получить адрес для поля "от"
LPCWSTR AddinLT_Mail_Create(LPCWSTR FromUID,LPCWSTR toUIDs,LPCWSTR title,LPCWSTR body); // Создать письмо

LPCWSTR AddinLT_Task_atIDToFileName(LPCWSTR szUID, LPTASKATTACHMENT atID);
BOOL AddinLT_Mail_AddFile(LPMAIL szUID, LPCWSTR fileName); // Довесить файлы

BOOL AddinLT_Mail_DeleteOnSend(LPMAIL szUID);
BOOL AddinLT_Task_MarkHistory(LPCWSTR szUID,LPCWSTR Text); // Не нашел, может плохо искал
- опционально для исключения дублирования данных в базе почты и задач, отправленное письмо не хранится в отправленных,
а факт отправки помечается в истории задачи

3. вызовы для плагина 1 +
Хук OnNewIncomeLetter(LPMAIL mUID);

UINT AddinLT_Contact_GetCount(void);
LPCWSTR *AddinLT_Contact_GetUIDs(void);
UINT AddinLT_Category_GetCount(void);
LPCWSTR *AddinLT_Category_GetUIDs(void);
UINT AddinLT_Project_GetCount(void);
LPCWSTR *AddinLT_Project_GetUIDs(void);
// для создания правил распределения почты, создания индекса email->UserID

void AddinLT_Mail_Delete(LPCWSTR szUID); // Удалять/не удалять можно в правиле определить

Желательно также какой-нибудь LPCWSTR AddinLT_GetWorkDirectory() для всяких индексов и настроек -
это имхо должна прога определять а не плагин.

Если предусматривать юзерский антиспам правилами по заголовку то еще нужен хук
OnNewIncomeLetterHead(LPMAIL mUID);
Если предусматривать наивный баес антиспам по телу письма то еще нужен хук
OnNewIncomeLetterBodyPart(LPMAIL mUID);

Оффлайн Дмитрий Маслов

  • Администратор
  • Маэстро
  • *****
  • Сообщений: 6146
  • Репутация +220/-19
  • Я делаю мир таким!
    • Просмотр профиля
Re: API для почты
« Ответ #1 : 27 Августа 2010, 11:46:36 »
Спасибо за четкое описание! Реализуем!