簡體   English   中英

使用ActiveX在Outlook 2010中打開.eml文件

[英]Open .eml file in Outlook 2010 using ActiveX

我正在研究文檔管理Intranet應用程序。 文件將位於共享的網絡驅動器上; 用戶將單擊一個鏈接,該文件將在其本機應用程序(Outlook,Word,Excel等)中打開。 除eml外,我已經使用ActiveX打開了所有Office文件。 當我嘗試在Outlook 2010中打開eml文件時,在IE中調試時收到無效的路徑錯誤。

在此處輸入圖片說明

這是html鏈接:

<a class="documentLink" href="file:///E:\FileShareDocs\996-0-Client\test 107 Copy.eml">test 107 Copy</a>

和js:

var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
    $('.documentLink').click(function () {
        var app;
        var path = $(this).attr('href');
        var extension = path.split('.').pop();
        switch(extension) {
            case "docx":
            case "doc":
            case "rtf":
                app = "Word.Application";
                try {
                    var objword = new ActiveXObject(app);
                } catch (e) {
                    alert(e);
                }
                if (objword != null) {
                    objword.Visible = true;
                    objword.Documents.Open(path);
                }
                break;
            case "xlsx":
            case "xls":
                app = "Excel.Application";
                    try {
                        var objexcel = new ActiveXObject(app);
                    } catch (e) {
                        alert(e);
                    }
                if (objexcel != null) {
                    objexcel.Visible = true;
                    objexcel.Workbooks.Open(path);
                }
                break;
            case "pptx":
            case "ppt":
                app = "PowerPoint.Application";
                try {
                    var objppt = new ActiveXObject(app);
                } catch (e) {
                    alert(e);
                }
                if (objppt != null) {
                    objppt.Visible = true;
                    path = path.substring(8, path.length);
                    objppt.Presentations.Open(path);
                }
                break;
            case "msg":
            case "eml":
                app = "Outlook.Application";
                try {
                    var objoutlook = new ActiveXObject(app);
                    var objNS = objoutlook.GetNameSpace('MAPI'); 
                } catch (e) {
                    alert(e);
                }
                if (objoutlook != null) {
                    path = path.substring(8, path.length);
                    var mailItm = objoutlook.Session.OpenSharedItem(path);
                    mailItm.Display();
                }
                break;
            case "tiff":
            case "tif":
            case "pdf":
                app = "AcroExch.AVDoc";
                try {
                    var objacro = new ActiveXObject("AcroExch.App");
                    var objpdf = new ActiveXObject(app);
                } catch (e) {
                    alert(e);
                }
                if (objacro != null && objpdf != null) {
                    path = path.substring(8, path.length);
                    objpdf.Open(path,$(this).html());
                    objacro.Show();
                }
                break;
            case "txt":
            case "htm":
                path = path.substring(8, path.length);
                var shell = new ActiveXObject("WScript.shell");
                var command = "NOTEPAD.EXE " + path;
                shell.run(command, 3);
                //document.execCommand("SaveAs",true,path);
                break;
            default:
                //Open file's containing folder in explorer
                path = path.substring(8, path.length);
                path = path.substring(0, path.lastIndexOf('\\'));
                var shell = new ActiveXObject("WScript.shell");
                var command = "explorer " + path;
                shell.run(command, 3);
        }   
    });
}

我嘗試注釋掉下面的行,這會將'file:///'留在路徑中,但是IE仍然拋出錯誤,指出找不到文件。

path = path.substring(8, path.length);

Outlook不通過其對象模型提供任何與MIME(EML)相關的功能。 您可以

  1. 使用IConverterSession內置MAPI接口-只能在C ++或Delphi中使用,不能在Java Script中使用

  2. 自己解析EML文件

  3. 使用救贖 -它可以讓你使用創建一個臨時的MSG文件RDOSession .CreateMesageFromMSGFile,然后導入使用EML文件RDOMail .IMPORT其次RDOMail.Display。

附帶說明一下,如果您要做的只是向用戶顯示EML文件,為什么不簡單地創建WScript.Shell實例來調用Run()並將EML文件名作為參數來調用呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM