Отсылка email с помощью SDK
|
|
25.08.2011 19:27
|
#
Где можно найти описание логики работы с почтой через SDK? Имеется ли рабочий пример кода получения/отсылки писем ? |
|
|
Электронный документооборот и делопроизводство в TeamWox
Движение электронных документов в организации и работа с ними осуществляются в системе групповой работы TeamWox с помощью модуля "Документы". В статье более подробно с помощью примеров рассмотрена работа с документами, начиная с подключения к документам и заканчивая формированием отчетов по их использованию. |
|
|
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"; |
|
|
|
11.10.2011 00:17
|
#
Приведите, пожалуйста, пример перечисления ранее полученных писем в ящике.
|
|
|
|
20.11.2011 15:20
|
#
Подскажите ещё, пожалуйста, как правильно добавить вложение в письмо.
|
|
|
|
22.11.2011 19:46
|
#
red_arm_soft:
Подскажите ещё, пожалуйста, как правильно добавить вложение в письмо. Вложение добавляются с помощью метода AttachmentAdd у сообщения IEmailMessage, туда передается структура с заполнеными параметрами mime_type, name, filename, data, size остальные пустые.
|
|
|
|
28.12.2011 10:32
|
#
almaz:
Вложение добавляются с помощью метода AttachmentAdd у сообщения IEmailMessage, туда передается структура с заполнеными параметрами mime_type, name, filename, data, size остальные пустые.
Если я правильно понимаю, то приведенный ниже код отвечает заявленным требованиям: |
|
|
|
28.12.2011 13:45
|
#
Здравствуйте! Как я понял, Вы занимаетесь разработкой под TeamWox. Мы можем пообщаться в Skype? Мое имя alex_pustov
|
|
|
|
28.12.2011 15:18
|
#
red_arm_soft:
Если я правильно понимаю, то приведенный ниже код отвечает заявленным требованиям: У вас похоже неправильный размер передан в 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); }
|
|
|
|
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),может быть требуется какая-то дополнительная настройка его,почтового ящика или полей/флагов самого письма ? |
|
|
|
29.12.2011 09:58
|
#
Обновитесь на последнюю версию сервера и SDK, у вас может быть не совместимость с новым SDK и очень старым сервером - август месяц.
|
|
| К списку тем | 12 |