设为首页 收藏本站
查看: 1551|回复: 0

[经验分享] 调用Outlook Express提取eml邮件附件

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-13 10:17:11 | 显示全部楼层 |阅读模式
  根据MIME格式处理eml文件是件挺烦琐的事,直接利用Outlook Express来处理就要简单一些,但是Outlook Express没有命令行操作(或许是我没找到),这就使得调用Outlook Express来处理eml邮件也有些麻烦.

下面是我写的windows情况下的调用Outlook Express来提取附件的函数,但是总不能隐藏Outlook Express窗口,不知道有高手知道原因不:



DSC0000.gif BOOL ExtractAttach(TCHAR * FileName, TCHAR * OutPath)
DSC0001.gif DSC0002.gif DSC0003.gif {
DSC0004.gif     //打开eml电子邮件
    TCHAR lpApplicationName[] = "C:\\Program Files\\Outlook Express\\msimn.exe";
    TCHAR lpCommandLine[MAX_PATH] = " /eml:";
    strcat(lpCommandLine, FileName);

    PROCESS_INFORMATION piProcInfo;
    STARTUPINFO siStartInfo;
    ZeroMemory( &siStartInfo, sizeof(siStartInfo) );
    siStartInfo.cb = sizeof(STARTUPINFO);
    siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
    siStartInfo.wShowWindow = SW_HIDE; //发送隐藏消息也不行,还是显示窗口

    if( !CreateProcess( lpApplicationName, lpCommandLine, NULL, NULL, FALSE,
        CREATE_NEW_CONSOLE, NULL, NULL, &siStartInfo, &piProcInfo ) )
        return FALSE;

    //寻找打开的电子邮件窗口
    HWND hOeWnd = NULL;
    DWORD dwProcessId = 0;
DSC0005.gif DSC0006.gif     do {
        hOeWnd = FindWindow( "ATH_Note", NULL );
DSC0007.gif     } while( hOeWnd==NULL );
   
    if( GetWindowThreadProcessId(hOeWnd, &dwProcessId) && dwProcessId!=piProcInfo.dwProcessId )
        return FALSE;

    //打开保存附件窗口
    if( !PostMessage(hOeWnd, WM_COMMAND, 0x819CA6, NULL) ) //0x819CA6 "Save Attachments"
        return FALSE;

    //寻找打开的保存附件窗口
    HWND hSaveAttWnd = NULL;
    do {
        hSaveAttWnd = FindWindow( NULL, "Save Attachments" );
    } while( hSaveAttWnd==NULL );

    //寻找输出路径编辑框并修改
    HWND hChildWnd;
    TCHAR buf[MAX_PATH];
    do {
        for( hChildWnd=GetTopWindow(hSaveAttWnd); hChildWnd!=NULL; hChildWnd=GetNextWindow(hChildWnd, GW_HWNDNEXT) )
        {
            GetClassName(hChildWnd, buf, MAX_PATH);
            if( stricmp(buf, TEXT("Edit"))==0 )
            {
                SendMessage(hChildWnd, WM_SETTEXT, 0, (LPARAM)OutPath);
                break;
            }
        }
    } while( hChildWnd==NULL );

    //双击保存按钮
    do {
        for( hChildWnd=GetTopWindow(hSaveAttWnd); hChildWnd!=NULL; hChildWnd=GetNextWindow(hChildWnd, GW_HWNDNEXT) )
        {
            GetWindowText(hChildWnd, buf, MAX_PATH);
            if( stricmp(buf, TEXT("&Save"))==0 )
            {
                PostMessage(hChildWnd, WM_LBUTTONDOWN, 0, 0);
                PostMessage(hChildWnd, WM_LBUTTONUP, 0, 0);
                break;
            }
        }
    } while( hChildWnd==NULL );

    //发送退出消息
    PostMessage(hOeWnd, WM_KEYDOWN, VK_ESCAPE, 0);

    //等待退出
    if( WaitForSingleObject(piProcInfo.hProcess, 4000)==WAIT_TIMEOUT )
        return FALSE;

    return TRUE;
DSC0008.gif }
源代码下载:
/Files/God4/AttachExtractor.rar

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-112933-1-1.html 上篇帖子: 在企业中定制Outlook窗体 下篇帖子: Outlook Express 错误代码表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表