Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка файлов с расширением .eml

2.6K
28 января 2003 года
Свояк
4 / / 28.01.2003
Здравствуй ALL!
Подскажите кто-нибудь как вытащить вложенные файлы(сохранить на диске) которые приходят по e-mail, не используя почтового клиента. Файлы приходят с расширением '*.eml'. Может есть программы для этого или хотябы функции в Visual C++ ,Builder C++ для обработки писем.
Очень нужно для автоматизации приема почты.....
Заранее благодарен.......................
380
28 января 2003 года
Arestov
285 / / 20.09.2000
Цитата:
Originally posted by Свояк
Здравствуй ALL!
Подскажите кто-нибудь как вытащить вложенные файлы(сохранить на диске) которые приходят по e-mail, не используя почтового клиента. Файлы приходят с расширением '*.eml'. Может есть программы для этого или хотябы функции в Visual C++ ,Builder C++ для обработки писем.
Очень нужно для автоматизации приема почты.....
Заранее благодарен.......................



есть как всегда несколько путей:
1. используй CDO for Windows 2000, там есть интерфейсы для работы с сообщениями, в т.ч. и для атачмента
2. есть в .NET Framework интерфейсы для того же самого
3. можно написать самому парсер для сообщений, там MIME заголовки, тела сообщения, контент multipart/mixed, а сам аттачмент закодирован в base64 или quoted-printable, разобраться не сложно особенно если есть под рукой соответствующие RFC, какие, уже не помню, но покопай мои предыдущие ответы(это можно сделать в моём профиле) там я где-то писал и ссылки давал на необходимые RFC.

2.6K
31 января 2003 года
Свояк
4 / / 28.01.2003
Цитата:
Originally posted by Arestov


есть как всегда несколько путей:
1. используй CDO for Windows 2000, там есть интерфейсы для работы с сообщениями, в т.ч. и для атачмента
2. есть в .NET Framework интерфейсы для того же самого
3. можно написать самому парсер для сообщений, там MIME заголовки, тела сообщения, контент multipart/mixed, а сам аттачмент закодирован в base64 или quoted-printable, разобраться не сложно особенно если есть под рукой соответствующие RFC, какие, уже не помню, но покопай мои предыдущие ответы(это можно сделать в моём профиле) там я где-то писал и ссылки давал на необходимые RFC.





Отвечаю сам на свой вопрос.Во-первых большое спасибо Arestov-у за Link. Я тут написал свой экзэмпл ,может кому понадобится. Компилировалось в Visual C++ v7.0,Win 2000Pro. Проверено работает... Успехов
// This is the main project file for VC++ application project
// generated using an Application Wizard.

#include "stdafx.h"
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
#import <cdosys.dll> no_namespace raw_interfaces_only
#include <iostream.h>
#include <wchar.h>


#using <mscorlib.dll>
#include <tchar.h>

using namespace System;

// This is the entry point for this application
int _tmain(int argc,char* argv[])
{
// TODO: Please replace the sample code below with your own.
CoInitialize(NULL);

IDropDirectory* pDropDir = NULL;
IMessages* pMsgs = NULL;
IMessage* pMsg = NULL;
IBodyParts* pBodys = NULL;
IBodyPart* pBody = NULL;
_Stream* pStream = NULL;
long msgs_cnt = 0;
long attach_cnt = 0;
BSTR msg_name;
BSTR fname;
BSTR path_sav;

CoCreateInstance(__uuidof(DropDirectory),NULL,CLSCTX_SERVER,
__uuidof(IDropDirectory),(void**)&pDropDir);

pDropDir->GetMessages(L"c:\\mailroot",&pMsgs);
pMsgs->get_Count(&msgs_cnt);//кол-во сообщений в папке
cout << "message count: " << msgs_cnt << endl;


//проходим последовательно по всем письмам
for(long i=1;i<=msgs_cnt;i++)
{ pMsgs->get_Item(i,&pMsg);//берем очередное письмо в каталоге
pMsg->get_Attachments(&pBodys);//ссылка на тело приаттаченных файлов
pBodys->get_Count(&attach_cnt);//количество приаттаченных файлов в мессаге
for(long j=1;j<=attach_cnt;j++)//перебираем последовательно файлы и сохраняем их на диске
{
pBodys->get_Item(j,&pBody);
pBody->get_FileName(&fname);
cout << "Saved attached file " << _bstr_t(fname) << endl;
pBody->GetDecodedContentStream(&pStream);
path_sav = _bstr_t("c:\\mailroot\\")+fname;
pStream->SaveToFile(path_sav,adSaveCreateOverWrite);//сохраняем файл
}//end for j

}//end for i

CoUninitialize();
return 0;
}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог