Иногда возникает ситуация, что при выполнении рассылки (шаблон в формате html) - конечный пользователь получает письмо с сплошным текстом, без единого форматирования (которое было выполнено в шаблоне сообщения).
Такая ситуация может происходить в версиях 3.3.1 и 3.3.2.
Для начала, необходимо обновить исполняемы файлы до самых поздних (сделав запрос в службу технической поддержки).
Далее, запускаем TSAdmin.exe и находим сервис scr_OutlookUtils.
В данном сервисе нам необходимо добавить метод CreateNewOutlookMessageByCopy:
function CreateNewOutlookMessageByCopy(FileName) {
var Message;
if (FileName) {
TemplateMessage = Outlook.Application.CreateItemFromTemplate(FileName);
RemoveOutlookMessageProperties(TemplateMessage);
Message = Outlook.Application.CreateItem(0);
RemoveOutlookMessageProperties(Message);
Message.Subject = TemplateMessage.Subject;
var NewMailItemBodyFormat = GetMailItemBodyFormat(Message);
var MessageText;
if ((NewMailItemBodyFormat == olFormatHTML) ||
(NewMailItemBodyFormat == olFormatRichText)) {
MessageText = GetDecodedMessageText(TemplateMessage);
if (GetMailItemBodyFormat(TemplateMessage) == olFormatPlain) {
MessageText = PreparePlainTextForHTML(MessageText, true);
}
if (GetOutlookCodePageOut() != -1) {
var CodePage = GetMailItemCharsetName(Message);
MessageText = System.EncodeText(MessageText, CodePage);
}
} else {
MessageText = TemplateMessage.Body;
}
CopyAttachments(TemplateMessage, Message, false, Log);
SetMailItemBody(Message, MessageText);
var Recipient;
var SourceRecipient;
for (var i = 1; i = TemplateMessage.Recipients.Count; i++) {
SourceRecipient = TemplateMessage.Recipients.Item(i);
Recipient = null;
if (SourceRecipient.AddressEntry.Type != 'EX') {
Recipient = Message.Recipients.Add(SourceRecipient.Address +
' ' + SourceRecipient.Name + '>');
} else {
Recipient = Message.Recipients.Add(SourceRecipient.Name);
Recipient.Resolve();
}
Recipient.Type = TemplateMessage.Recipients.Item(i).Type;
}
TemplateMessage.Close(0);
} else {
Message = Outlook.Application.CreateItem(0);
if (Outlook.CodePageOut) {
Message.InternetCodepage = Outlook.CodePageOut;
} else {
Message.InternetCodepage = 20866;
}
}
return Message;
}
В этом же сервисе модифицировать функцию GetOutlookCodePageOut (добавить return Outlook.CodePageOut;):
function GetOutlookCodePageOut() {
if (!Outlook.OutlookCodePageOutInitialize) {
var MSOfficeRootKey = 'Software\\Microsoft\\Office\\';
var OutlookCodePageOptionsKey = '\\Outlook\\Options\\MSHTML\\International';
var Version = GetOutlookVersion();
var OutlookSettingKey = MSOfficeRootKey + Version +
OutlookCodePageOptionsKey;
Outlook.AutoDetectCodePageOut = GetRegParamValue(REG_DWORD,
HKEY_CURRENT_USER, OutlookSettingKey, 'Autodetect_CodePageOut');
Outlook.CodePageOut = GetRegParamValue(REG_DWORD,
HKEY_CURRENT_USER, OutlookSettingKey, 'Default_CodePageOut')
|| 20866;
Outlook.OutlookCodePageOutInitialize = true;
}
return Outlook.CodePageOut;
}
А также, модифицировать метод CreateOutlookMessage
(добавить var Message = CreateNewOutlookMessageByCopy(Params.Template ?
Params.Template.FileName : null):
function CreateOutlookMessage(Params) {
var Message = CreateNewOutlookMessageByCopy(Params.Template ?
Params.Template.FileName : null);
if (Params.Address) {
if (typeof(Params.Address) == 'string') {
Params.Address = [Params.Address];
} else {
Params.Address = RemoveDublicates(Params.Address);
}
for (var i = 0; i Params.Address.length; i++) {
AddRecipient(Message, Params.Address[i], olTo);
}
}
if (Params.CopyAddress) {
if (typeof(Params.CopyAddress) == 'string') {
Params.CopyAddress = [Params.CopyAddress];
}
for (var i = 0; i Params.CopyAddress.length; i++) {
AddRecipient(Message, Params.CopyAddress[i], olCC);
}
}
}
Для версии 3.3.1, необходимо выполнить еще одно изменение.
В сервисе scr_MailUtils найтифукцию CreateNewMessage(Params) и добавить ByCopy в строчке var Message = CreateNewOutlookMessage(Params.Template ? Params.Template.FileName : null);
:
function CreateNewMessage(Params) {
if (!GetCanCreateMessage(true)) {
return;
}
if (!InitMailUtils()) {
return;
}
if (!Params) {
Params = new Object();
}
var Message = CreateNewOutlookMessageByCopy(Params.Template ?
Params.Template.FileName : null);
Сохраняем сервис и проверяем рассылку!
С уважением
Белецкий Арсений
Группа компаний Terrasoft