Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
725 views
in Technique[技术] by (71.8m points)

javascript - Open new email in outlook with html body from IE web site

I am working in a corporate environment on an internal use web application and have a requirement to generate an email in the users Outlook retaining their signature so that they can then modify if required and send it themselves.

All users are on IE8+ and the site is a part of Trusted Sites with ActiveX objects enabled so I was hoping to use outlook automation to achieve this.

Here is a quick summary of my requirements to differentiate this from existing questions.

  • Only needs to support IE8+ and Outlook
  • HTML body formatting support
  • Attachment support
  • Must retain the users configured signature
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This can be achieved using JavaScript in IE if the site is a Trusted Site and ActiveX objects are enabled. I have had this script work as far back as IE6 and tested up to IE10 I am unsure about its support in IE11.

An important point about the script below is that you must call Display on the email before trying to extract the signature from it or trying to set its HTMLBody otherwise you will lose the signature information.

try {

    //get outlook and create new email
    var outlook = new ActiveXObject('Outlook.Application');
    var email = outlook.CreateItem(0);

    //add some recipients
    email.Recipients.Add('user1@company.com').Type = 1; //1=To
    email.Recipients.Add('user2@company.com').Type = 2; //2=CC

    //subject and attachments
    email.Subject = 'A Subject';
    //email.Attachments.Add('URL_TO_FILE', 1); //1=Add by value so outlook downloads the file from the url

    // display the email (this will make the signature load so it can be extracted)
    email.Display();

    //use a regular expression to extract the html before and after the signature
    var signatureExtractionExpression = new RegExp('/[^~]*(<BODY[^>]*>)([^~]*</BODY>)[^~]*/', 'i');
    signatureExtractionExpression.exec(email.HTMLBody);
    var beforeSignature = RegExp.$1;
    var signature = RegExp.$2;

    //set the html body of the email
    email.HTMLBody = beforeSignature + '<h1>Our Custom Body</h1>' + signature;

} catch(ex) {
    //something went wrong
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...