Обработка файлов с расширением .eml
Подскажите кто-нибудь как вытащить вложенные файлы(сохранить на диске) которые приходят по e-mail, не используя почтового клиента. Файлы приходят с расширением '*.eml'. Может есть программы для этого или хотябы функции в Visual C++ ,Builder C++ для обработки писем.
Очень нужно для автоматизации приема почты.....
Заранее благодарен.......................
Здравствуй 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.
есть как всегда несколько путей:
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;
}