Откройте новую электронную почту в Outlook с HTML-тела с веб-сайта IE
Я работаю в корпоративной среде над веб-приложением для внутреннего использования, и у меня есть требование сгенерировать электронное письмо в Outlook пользователей, сохраняя свою подпись, чтобы они могли затем изменить ее при необходимости и отправить ее самостоятельно.
Все пользователи используют IE8+, и сайт является частью доверенных сайтов с включенными объектами ActiveX, поэтому я надеялся использовать автоматизацию Outlook для достижения этой цели.
Вот краткое изложение моих требований, чтобы отличить это от существующих вопросов.
- Нужно только поддерживать IE8+ и Outlook
- Поддержка форматирования тела HTML
- Поддержка вложений
- Необходимо сохранить настроенную подпись пользователя
1 ответ
Это может быть достигнуто с помощью JavaScript в IE, если сайт является доверенным сайтом и включены объекты ActiveX. Этот скрипт работал еще в IE6 и тестировался до IE10. Я не уверен в его поддержке в IE11.
Важным моментом в сценарии ниже является то, что вы должны вызвать 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('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
}