Откройте новое электронное письмо в Outlook с помощью html body с веб-сайта IE

Я работаю в корпоративной среде на веб-приложении внутреннего использования и имею требование генерировать электронное письмо в Outlook, сохраняя свою подпись, чтобы затем они могли модифицировать, если необходимо, и отправить его сами.

Все пользователи находятся на IE8 +, и сайт является частью доверенных сайтов с включенными объектами ActiveX, поэтому я надеялся использовать автоматизацию Outlook для достижения этой цели.

Вот краткое изложение моих требований, чтобы отличить это от существующих вопросов.

  • Только поддержка IE8 + и Outlook
  • Поддержка форматирования HTML-кода.
  • Поддержка прикрепления
  • Должен сохранить подпись, настроенную пользователями

Ответ 1

Это может быть достигнуто с использованием JavaScript в IE, если сайт является надежным сайтом и активны объекты ActiveX. У меня была эта работа script еще в IE6 и протестирована до IE10. Я не уверен в ее поддержке в IE11.

Важным моментом в script ниже является то, что вы должны вызывать Display по электронной почте, прежде чем пытаться извлечь из него подпись или попытаться установить ее HTMLBody, иначе вы потеряете информацию о подписи.

try {

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

    //add some recipients
    email.Recipients.Add('[email protected]').Type = 1; //1=To
    email.Recipients.Add('[email protected]').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
}