Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

Отсылка email с помощью SDK

red_arm_soft
11
red_arm_soft 25.08.2011 19:27 | #

Где можно найти описание логики работы с почтой через SDK? Имеется ли рабочий пример кода получения/отсылки писем ?

Электронный документооборот и делопроизводство в TeamWox

Движение электронных документов в организации и работа с ними осуществляются в системе групповой работы TeamWox с помощью модуля "Документы". В статье более подробно с помощью примеров рассмотрена работа с документами, начиная с подключения к документам и заканчивая формированием отчетов по их использованию.

alexey
263
alexey 25.08.2011 20:27 | #
Отправка письма:
   TWRESULT res=RES_S_OK;
//--- 1. получим менеджер модуля "Почта"
   IEmailManager *email_manager=NULL;
   if(RES_FAILED(res=m_server->GetInterface(TWX_EMAIL,L"IEmailManager",(void**)&email_manager))
      || email_manager==NULL)
     {
      ExtLogger(NULL,LOG_STATUS_ERROR) << "failed to get IEmailManager [" << res << "]";
      return(RES_E_NOT_FOUND);
     }
//--- 2. создаём объект для работы с письмом
   IEmailMessage* message=NULL;
   if(RES_FAILED(res=m_mail_manager->EmailCreate(context,&message)) || message==NULL)
      ReturnErrorExt(res, context, "failed to create email message");
//--- 3. задаем почтовый ящик, от которого будет происходить отправление
   message->SetMailBoxId([ID_НУЖНОГО_ПОЧТОВОГО_ЯЩИКА]);
//--- 4. формируем заголовок письма
   message->SetSubject(L"Заговок письма");
//--- 5. заполняем тело письма
   message->SetContent(L"Текст письма");
//--- 6. добавляем адресатов
   EmailAddress address={};
//---
   CopyString(address.name,   L"John Smith");
   CopyString(address.address,L"address@one.com");
   message->AddressAdd(EMAIL_ADDR_TO, &address);
//---
   CopyString(address.name,   L"Ivan Ivanov");
   CopyString(address.address,L"address@two.com");
   message->AddressAdd(EMAIL_ADDR_CC, &address);
//--- 7. отмечаем, что его надо сразу же отправить - это не черновик
   message->SetStatus(EMAIL_STATUS_SEND);
//--- 8. сохраняем/отправляем
   res=m_mail_manager->EmailUpdate(context, message);
//--- 9. освобождаем ресурсы
   message->Release();
//--- 10. проверяем результат
   if(RES_FAILED(res)) ReturnErrorExt(res, context,"failed to send email");
//---
   ExtLogger(context, LOG_STATUS_INFO) << "Email sent";

red_arm_soft
11
red_arm_soft 11.10.2011 00:17 | #
Приведите, пожалуйста, пример перечисления ранее полученных писем в ящике.
red_arm_soft
11
red_arm_soft 20.11.2011 15:20 | #
Подскажите ещё, пожалуйста, как правильно добавить вложение в письмо.
almaz
54
[Удален] 22.11.2011 19:46 | #
red_arm_soft:
Подскажите ещё, пожалуйста, как правильно добавить вложение в письмо.


Вложение добавляются с помощью метода AttachmentAdd у сообщения IEmailMessage, туда передается структура с заполнеными параметрами mime_type, name, filename, data, size остальные пустые.

 

red_arm_soft
11
red_arm_soft 28.12.2011 10:32 | #
almaz:


Вложение добавляются с помощью метода AttachmentAdd у сообщения IEmailMessage, туда передается структура с заполнеными параметрами mime_type, name, filename, data, size остальные пустые.

 

Если я правильно понимаю, то приведенный ниже код отвечает заявленным требованиям:
                EmailAttachment EmailAtt = {0};
                CopyString(EmailAtt.filename, fileInfo.filename);
                CopyString(EmailAtt.mime_type, fileInfo.mime_type);
                CopyString(EmailAtt.name, fileInfo.filename);
                EmailAtt.data = (void*)&Buffer[0];
                EmailAtt.size = nBufferSize;

                emailMsg->AttachmentAdd(&EmailAtt);

Но, к сожалению, в отладочном выводе (teamwox64.exe /console) я вижу следующее

                CEmailMessage::AttachmentAdd:1214 failed [false]

Параметры файла перед добавлением file_name, mime, name, size :

                Info    65540   127.0.0.1       1007    Add attachment: text.txt, mime: text/plain, name : text.txt, size: 324

Не могли бы Вы объяснить причину или привести рабочий код.
               


btechnosoft
11 TeamWox Partner
btechnosoft 28.12.2011 13:45 | #
Здравствуйте! Как я понял, Вы занимаетесь разработкой под TeamWox. Мы можем пообщаться в Skype? Мое имя alex_pustov
almaz
54
[Удален] 28.12.2011 15:18 | #
red_arm_soft:

Если я правильно понимаю, то приведенный ниже код отвечает заявленным требованиям:
                EmailAttachment EmailAtt = {0};
                CopyString(EmailAtt.filename, fileInfo.filename);
                CopyString(EmailAtt.mime_type, fileInfo.mime_type);
                CopyString(EmailAtt.name, fileInfo.filename);
                EmailAtt.data = (void*)&Buffer[0];
                EmailAtt.size = nBufferSize;

                emailMsg->AttachmentAdd(&EmailAtt);

Но, к сожалению, в отладочном выводе (teamwox64.exe /console) я вижу следующее

                CEmailMessage::AttachmentAdd:1214 failed [false]

Параметры файла перед добавлением file_name, mime, name, size :

                Info    65540   127.0.0.1       1007    Add attachment: text.txt, mime: text/plain, name : text.txt, size: 324

Не могли бы Вы объяснить причину или привести рабочий код.
               


У вас похоже неправильный размер передан в size, ошибка в невозможности выделить буфер такой длины.

Рабочий пример:

      //--- подготовим итератор для доступа к файлам

      request->PrepareIterator(&it);

      //--- разбираемся с файлами

      while(request->GetFile(L"attachments", NULL, &file_info, &it))

        {

         CMQVector <char> file_buf;

         EmailAttachment attachment={0};

         CopyString(attachment.mime_type, file_info.mime_type);

         CopyString(attachment.name,      file_info.filename);

         CopyString(attachment.filename,  file_info.filename);

         //---

         CBinFile file;

         if(file.Open(file_info.path, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING)==false) ReturnError(RES_E_FAIL);

         attachment.size=(int)file.Size();

         if(attachment.size>0)

           {

            if(!file_buf.Resize(attachment.size)) ReturnError(RES_E_OUT_OF_MEMORY);

            if(file.Read(&file_buf[0], attachment.size)==0) ReturnError(RES_E_FAIL);

            attachment.data=&file_buf[0];

           }

         else attachment.data=NULL;

         //---

         if(!email->AttachmentAdd(&attachment)) ReturnError(RES_E_OUT_OF_MEMORY);

        }

 

red_arm_soft
11
red_arm_soft 29.12.2011 06:37 | #
пробовал вот такой вариант:

EmailAttachment attachment={0};         
CopyString(attachment.mime_type, L"text/plain");         
CopyString(attachment.name, L"text.txt");
       CopyString(attachment.filename,  L"text.txt");
attachment.data = new unsigned char [324];
attachment.size = 324; // пробовал и меньше
   
if(!email->AttachmentAdd(&attachment)) ReturnError(RES_E_OUT_OF_MEMORY);

результат тот же,та же ошибка. Я использую 64 битную версию сервера(1.00 сборка 1445, 08 авг 2011),может быть
требуется какая-то дополнительная настройка его,почтового ящика или полей/флагов самого письма ?
almaz
54
[Удален] 29.12.2011 09:58 | #
Обновитесь на последнюю версию сервера и SDK, у вас может быть не совместимость с новым SDK и очень старым сервером - август месяц.
К списку тем  | 12

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий