[英]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)相關的功能。 您可以
使用IConverterSession內置MAPI接口-只能在C ++或Delphi中使用,不能在Java Script中使用
自己解析EML文件
使用救贖 -它可以讓你使用創建一個臨時的MSG文件RDOSession .CreateMesageFromMSGFile,然后導入使用EML文件RDOMail .IMPORT其次RDOMail.Display。
附帶說明一下,如果您要做的只是向用戶顯示EML文件,為什么不簡單地創建WScript.Shell實例來調用Run()並將EML文件名作為參數來調用呢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.