AMS Enterprise 2.x - Файл Справки

Рандомизация тела и заголовков письма

Рандомизация тела и заголовков письма

Предыдущий топик Следующий топик  

Рандомизация тела и заголовков письма

Предыдущий топик Следующий топик  

Часто спам-фильтры блокируют рассылку если количество получателей велико и при этом отправляется одно и то же письмо. Например, если фильтр видит, что с некоторого IP адреса идет большой поток одинаковых писем - с какого-то момента они начинают блокироваться или попадают в папку Спам. Конечно, в первую очередь это зависит от качества вашей базы (% не существующих, "мертвых" адресов) и числа жалоб на рассылку от ее получателей. Например, mail.ru начинает блокировать рассылку если в вашей базе больше 5% не валидных адресов или более 1% получателей нажали кнопку "это спам". Помимо блокировки по IP адресу и домену отправителя так же используется блокировка и по содержимому письма. Если его не поменять - письма могут вообще не приниматься или попадать в папку Спам.

 

В AMS Enterprise есть множество возможностей по автоматической рандомизации как письма в целом так и отдельных фрагментов или полей. В этом разделе справки будут рассмотрены все функции AMS в этой области:

 

1. Рандомизация отдельных слов, фраз или тэгов html кода путем выбора случайных синонимов из списка.

 

Для это в AMS есть два типа макросов:

 

- Макрос-перечисление.

 

С его помощью можно задать несколько синонимов, разделенных символом |. Например:

 

[%%Здравствуйте|Добрый день|Приветсвуем вас%%].

 

При генерации письма каждый раз будет выбираться случайное значение из этого списка. Данный макрос так же может использоваться для рандомизации html тэгов в исходном коде письма. Например, в исходном коде можно написать

 

<FONT face=[%%Arial|Tahoma|Courier%%]>Эта строка будет написана случайным шрифтом</FONT>

 

для рандомизации шрифта, которым будет написана строка. В этом примере будет выбираться случайный шрифт из вариантов Arail, Tahoma, Courier. Обратите внимание, что не все html тэги можно рандомизировать таким образом прямо в редакторе писем AMS ! Дело в том, что в ряде случаев, после вставки макроса, Html код письма становится не корректным с точки зрения html синтаксиса и движек Internet Explorer'a, на котором построен редактор AMS, может автоматически вырезать или изменить "плохой" код чтобы корректно отобразить письмо. В этом случае вы можете использовать функцию рандомизации всего тела письма,  о которой будет написано ниже.

 

Макрос-перечисление - это простейший способ рандомизации любых строк в письме. Он так же может использоваться и во всех остальных частях письма: например, таким образом можно рандомизировать Тему (Subject) письма, имя отправителя и т.д. Однако, данный макрос имеет и ряд ограничений: выборка нового значения производится заново для каждого письма (т.е. нельзя указать, что новое значение должно выбираться, например, каждые 3 письма), число вариантов, из которых будет осуществляться выборка не может быть слишком большим: представьте, что нужно сделать выбор не из 4-5, а из 2000-3000 вариантов. В этом случае макрос-перечисление займет собой все тело письма ! А если макросов нужно много ? Очевидно, что простое перечисление тут уже не подойдет.

 

Макрос ORandText

 

Так же предназначен для вставки случайного значения из заданного списка, но в отличии от простого макроса-перечисления имеет ряд дополнительных возможностей и настроек. Для вставки макроса зайдите в меню редактора писем Вставить макрос->Случайное значение->Случайный текст:

 

RndBlocks

 

Здесь вы можете создать или отредактировать текстовые блоки, из которых будут выбираться случайные строки:

 

RndBlockEd

 

 

Обратите внимание, что будут выбираться случайные СТРОКИ из заданного текста, а не случайные СЛОВА из этих строк ! Так же можно указать интервал выборки нового значения - например каждые два письма, способ выборки: случайная строка из перечня или перебор строк последовательно начиная с первой, а так же сделать результат выборки константным для всех повторений макроса в теле письма.

 

После того, как текстовый блок подготовлен вы можете вставить макрос ORandText в нужное место письма. Так же как и макрос-перечисление он может использоваться в любом месте письма. Синтаксис макроса: [%%ORandText,Имя_Текстового_Блока%%].

 

Рассмотрим актуальную задачу: подстановка случайной ссылки в тело письма. Для этого мы создали текстовый блок со ссылками, выбрали интервал выборки случайной ссыли каждые 100 писем, тип выборки в этом примере - Случайный, хотя можно поставить и Последовательный чтобы ссылки ротировались по кругу начиная с первой, а так же поставили галку "Постоянное значение в рамках письма".

 

Теперь вставляем в нужное место html кода письма тэг вида:

 

<A href="[%%ORandText,Links%%]">[%%ORandText,Links%%]</A>

 

Готово ! Теперь в наше письмо будет подставляться новая ссылка каждые 100 писем. Так же в этом примере становится понятным для чего нужна опция "Постоянное значение в рамках письма": в нашем примере мы рандомизировали значения html тега <A> (ссылка), при этом тег позволяет привязать ссылку как к тексту, так и, собственно, к самой ссылке. Например, для перехода на Яндекс можно написать <A href="http://www.yandex.ru">http://www.yandex.ru</A> в этом случае ссылка будет выглядеть как http://www.yandex.ru, а можно написать <A href="http://www.yandex.ru">Нажмите здесь для перехода на яндекс</A> - в этом случае ссылка будет привязана к тексту и выглядеть так нажмите здесь для перехода на яндекс. В нашем примере у нас используется первый вариант: текст ссылки такой же как и сама ссылка. Именно поэтому макрос [%%ORandText,Links%%] у нас повторяется дважды - один раз это ссылка (href), второй раз - видимый текст.  Если бы у нас не стояла опция "Постоянное значение в рамках письма" - то для каждого повторения макроса у нас бы выбралось новое значение и результат подстановки мог бы быть таким: <A href="http://www.redirect1.ru">http://www.redirect7.ru</A> т.е. получатель бы увидел одну ссылку, а при клике на нее открылась бы другая ! Именно для таких ситуаций, когда нужно рандомизировать несколько участков текста - та же ссылка на сайт может повторяться в писеме много раз - но при этом значение нового текста везде должно быть одинаковым и предназначена опция "Постоянное значение в рамках письма".

 

Еще важный момент: если выбрать тип выборки "Последовательный" - программа будет выбирать строки из текстового блока не случайно, а последовательно начиная с первой. При этом программа запоминает последнюю выбранную строку при остановке рассылки ! При продолжении рассылки выборка продолжится со следующей строки от момента остановки, а не с первой ! Например, мы рандомизируем ссылку с интервалом обновления 100 писем. Если мы отправили 600 писем и остановили рассылку - последней использовавшейся ссылкой у нас была http://www.redirect6.ru, если мы продолжим рассылку у нас

подставится ссылка http://www.redirect7.ru ! Если же мы перезапустим рассылку с начала - выборка вновь начнется с первой строки. Если в процессе рассылки все значения уже были последовательно использованы - выборка начнется заново начиная с первой строки.

 

Так же можно комбинировать макросы рандомизации в любом виде. Например, нам нужно генерировать случайный email адрес. Для этого мы создали текстовый блок Domains содержащий строки mail.ru, yandex.ru, gmail.com. Теперь мы можем написать [%%info|sales|products%%]@[%%ORandText,Domains%%] чтобы получить случайные адреса вида info@gmail.com, sales@mail.ru и т.д.

 

Макрос ORandTextFromFile

 

Макрос предназначен для подстановки случайных или последовательных строк из текстового файла. Для вставки макроса используйте меню редактора писем Вставить макрос->Случайное значение->Случайный текст из файла:

 

RndTextFromFile

 

В целом макрос работает аналогично предыдущему макросу ORandText, имеет те же настройки и может использоваться в тех же случаях и для тех же целей. Различие заключается в том, что в отличии от ORandText содержимое файла не загружается в память и выборка происходит "на лету". С помощью ORandTextFromFile можно делать выборки из огромных текстовых файлов без необходимости их загрузки в текстовый блок для макроса ORandText. Однако, есть и недостаток: в отличии от ORandText макрос ORandTextFromFile не расходует память, но сильнее загружает процессор и диск. В то время как макрос ORandText наоборот не  загружает диск и процессор, но требует много памяти. Ориентируйтесь на то, что на современном (на 2019 год) компьютере программа способна обрабатывать около 60 000 макросов ORandTextFromFile в секунду. Если в письме используется несколько сотен таких макросов это может вызвать проблемы с производительностью. Чтобы снизить нагрузку на компьютер вы можете выбрать Последовательный режим выборки и/или делать выборку новой строки не для каждого 1, а для каждого 5-10-100 письма.

 

Макрос ORandString

 

Данный макрос предназначен для генерации случайных строк вида sfCVlxJHsxsMNwr. Для вставки макроса используйте меню редактора писем Вставить макрос->Случайное значение->Случайная строка:

 

 

RndString

 

Как правило макрос ORandString используется в заголовках писем для генерации полей MessageID, boundary и других где требуются случайные и уникальные идентификаторы (рандомизация заголовков будет рассмотрена ниже), однако могут быть ситуации когда случайная строка может быть полезной и в других полях письма. Наряду с макросом-перечислением и ORandText макрос ORandString может использоваться в любом месте письма.

 

Синтаксис макроса: [%%ORandStr,Длинна_От-Длинна_До,Символ_От-Символ_До,Тип_Размера_Букв,Интервал_Обновления%%]

 

Пример на скриншоте вставит макрос [%%ORandStr,5-8,a-z,R,1%%] - длинна строки случано от 5 до 8, диапазон символов, из которых она будет состоять - от a до z, размер символов случайный, генерировать значение каждое 1 письмо. Если нам нужно сгенерировать строку из русских букв - необходимо поставить диапазон символов а-я, если нужно сгенерировать случайное число - то 0-9 и т.д. Параметр "Постоянное значение в рамках письма" работает так же как и у ранее рассмотренного макроса ORandText.

 

 

2. Рандомизация картинок в письме

 

Если стоит задача полной рандомизации письма - может быть полезным и рандомизация картинок (графики), которые могут в нем содержаться. Мы можем полностью рандомизировать текст письма, но если где-то в центре у нас стоит картинка и она всегда одинаковая - фильтр сможет понять, что это одно и то же письмо хоть у него и разный текст. Чтобы рандомизировать картинку - зайдите в меню Вставка->Рисунок редактора писем (или нажмите иконку картинки на тулбаре) и укажите путь к файлу картинки на диске:

 

AddImg

 

Далее, нажмите кнопку Случайно:

 

RndImage

 

AMS может рандомизировать картинки следующими способами:

 

 

- Для одной картинки (файла): Случайное изменение формата (bmp, gif, jpg, png), имени файла, размера выбранной картинки (случайно плюс-минус от 1 до 10% по высоте и ширине) , а так же добавление "шума" - точек случайного цвета.

 

 

- Так же можно выбрать случайную картинку из папки, куда вы можете заранее положить любое количество файлов-картинок в форматах .bmp, .gif, .jpg, .png. Программа будет выбирать из папки случайную картинку и вставлять в указанное место письма.

 

 

- Если картинка подгружается с внешних ссылок т.е. в html коде используются тэги вида: <IMG src="http://www.some-site.ru/SomeImage.jpg"> можно использовать макрос ORandText, в который можно добавить ссылки, с которых должна загружаться картинка.

 

 

В первых двух случаях программа изменяет выбранную картинку или подгружает случайную из папки для каждого письма. В третьем случае интервал выборки новой ссылки будет зависить от параметров текстового блока макроса ORandText (см. выше).

 

 

3. Рандомизация кодировки письма

 

Кроме содержимого можно так же рандомизировать и кодировки, которые используются при формировании писем. Нажмите кнопку Кодировка на тулбаре редактора:

 

 

 

RndEncoding

 

Кроме выбора фиксированной кодировки, в этом меню можно выбрать и случайные. AMS позволяет рандомизировать следующие кодировки:

 

- Кодировка тела письма (пункт Случайная кодировка):

 

 

 

RndEncodingEd

 

Для писем на русском языке можно выбрать iso-8859-5, koi8-r, utf-8, windows-1251 - во всех этих кодировках текс на русском будет выглядеть корректно. Для писем на английском можно выбрать iso-8885901, us-ascii, utf-8, windows-1252.

 

- Header Inline Encoding определяет инлайн кодирования полей From, To, Subject, Organization заголовков письма. Обычно инлайн кодирование применяется если эти поля содержат НЕ латинские буквы - например, если имя отправителя на русском языке. Само по себе инлайн кодирование используется для того, чтобы почтовый клиент, в котором получатель будет смотреть письмо, мог однозначно понять в какой кодировке те или иные поля заголовка. Иначе вместо Ивана Иванова могут быть видны "кракозяблы". В качестве кодировки может использоваться base64 (по умолчанию), quoted-printable или 7/8 bit. С точки зрения сохранения исходного вида письма лучше использовать Base64 или quoted-printable - в обоих случаях письмо будет показано корректно и одинаково. 7/8bit - не желательно, в некоторых почтовых клиентов могут быть "кракозяблы".

 

- Content-Trasfer-Endcoding - применяется для кодирования непосредственно html и текстовых частей письма. Цель та же - корректное отображение в почтовых клиентах. Как и в предыдущем случае стоит выбирать из base64 и quoted-printable.

 

Рандомизация кодировки никак не влияет на отображение письма (конечно, если выбраны кодировки применимые для языка, на котором написано письмо), однако, делает его, в определенной степени, различным с точки зрения фильтра. В целом, эффективность этого типа рандомизации не сказать чтобы высокая, но и не сказать, что совсем бесполезная. Сама по себе она точно ничего не даст, но в комбинации с другими методами, описанными в этом разделе - может помочь.

 

 

4. Рандомизация тела письма целиком

 

 

Макрос ORandMessageBody

 

Спам фильтры интенсивно развиваются, если брать крупные почтовые службы типа mail.ru и gmail.com - их уже не обмануть простой заменой слов, ссылок и картинок на синонимы. Фильтры так же анализируют html код и саму структуру письма. Допустим, у нас есть письмо в котором три абзаца текста и картинка. Даже если мы полностью рандомизируем текст абзацев и вставим случайную картинку - у нас все равно будет письмо, содержащее три абзаца (пусть и со случайным текстом) и картинку (в том же месте, путь и случайную). Для спам фильтра этого достаточно чтобы с высокой вероятностью определить, что на самом деле это одно и тоже письмо ! Для борьбы с такого типа фильтрацией вы можете подготовить несколько (чем больше тем лучше) радикально различающихся вариантов вашего письма и указать программе откуда их брать. Например, можно взять множество бесплатных html шаблонов писем, которые полностью различаются цветом, компоновкой, дизайном и т.д, вставить в них ваш текст с использованием ранее описанных макросов-перечислений, ORandText, ORandString и сохранить результат в папку на диске в виде .html файлов. Далее, в редакторе писем нужно зайти в меню Вставить Макрос->Случайное Значение->Случайное тело сообщения:

 

RndBodyFromFolder

 

 

И указать папку, в которой находятся ваши html файлы с вариантами письма, а так же выбрать интервал обновления - как часто нужно выбирать из папки случайный файл и использовать его в качестве тела письма.

 

В случае примера на скриншоте в тело письма будет вставлен макрос [%%ORandMessageBody,c:\body\,5%%] - выбирать случайные html файлы из папки c:\body\ каждые 5 писем. Кроме этого макроса наше письмо в редакторе может не содержать вообще ничего - все его содержимое это макрос ORandMessageBody, который указывает из какой папки подгружать файлы. Именно эти файлы и будут реальным содержимым нашего письма !

 

Вы можете использовать в ваших файлах любые другие макросы (ссылки на поля списков рассылки, MailMerge правила, рандомизацию: макросы-перечисления, ORandText, ORandString) в любых количествах и последовательностях, в любых местах. Каждый раз при загрузке случайного файла из папки программа парсит его содержимое и исполняет все макросы, которые в нем найдет.

 

Некоторые важные моменты:

 

1. Очень желательно, чтобы ваши html файлы содержали тэг META с указанием кодировки. Например, <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>. Для чего это нужно: в редакторе писем вы можете задать кодировку для отправляемых писем. Кодировка может быть как фиксированная так и случайная (см. выше). Чтобы корректно закодировать письмо программа должна знать его исходную кодировку ИЗ КОТОРОЙ нужно преобразовать в ТУ, что выбрана для исходящих письма в редакторе ! Поскольку программа не знает в какой кодировке ваши файлы - могут возникнуть проблемы с отображением письма. Если тэг META с кодировкой не обнаружен - программа попытается определить ее сама, однако этот метод не на 100% точен, возможны ошибки ! Если программа не правильно распознает исходную кодировку - письмо может придти в "кракозяблах".

 

2. Если в редакторе писем выбран тип письма Html - программа будет искать в заданной папке только html файлы. При этом из них будет автоматически извлечен текст, который будет использован для текстовой части письма (в AMS Html письма всегда содержат и текстовую часть для почтовых клиентов, которые не умеют отображать Html письма).

 

3. Если ваши html файлы содержат картинки, которые должны отправляться вместе с письмом - желательно чтобы в IMG src= были прямые пути к файлам картинок. Во время обработки html файла программа попытается обнаружить и загрузить картинки по указанным путям. При использовании относительных путей типа ..\..\image.bmp могут быть проблемы с их загрузкой.

 

4. Если в редакторе писем выбран типа письма Text - программа будет искать в заданной папке только текстовые файлы т.к. Html часть в таких письмах отсутствует.

 

 

5. Рандомизация заголовков письма

 

 

Макрос ORandMessageHeader

 

Спам фильтры крупных почтовых служб анализируют не только содержимое письма, но и его заголовки (не путайте с Темой (Subject) письма). Заголовки письма содержат информацию об отправителе, получателе, типе письма, его кодировке и т.д. Если заголовки письма всегда одинаковые - фильтр может определить, что несмотря на то, что содержимое писем различается, все они были отправлены из одной и той же программы. Таким образом, фильтр может понять, что все эти письма на самом деле одна рассылка. Поскольку смысл рандомизации письма в том, чтобы для принимающей стороны ваша большая рассылка выглядела как много маленьких рассылок - будет полезно рандомизировать не только содержимое письма, но и его служебные заголовки.

 

Для начала разберем что такое заголовок и какие данные он должен содержать. Пример стандартного заголовка, формируемого AMS по умолчанию, без эмуляции Outlook Express:

 

Message-ID: <F6F345161D36E310CCC97F2C2881A681@gmail.com>

From: "Sender" <sender@gmail.com>

To: "Recipient" <recipient@mail.ru>

Subject: This is a test

Date: Wed, 23 Dec 2015 15:45:55 +0300

MIME-Version: 1.0

Content-Type: multipart/alternative; boundary="d7ec56ae07c017d118b229afa6fd"

 

Заголовок содержит описание параметров письма для корректного отображения в почтовом клиенте на стороне получателя. Как минимум, заголовок должен содержать следующие данные:

 

Message-ID - уникальный идентификатор письма.

 

From - имя/email отправителя

 

To - имя/email получателя. Если используется пакетный режим отправки To или Cc - это поле может содержать список получателей, для которых было сформировано письмо.

 

Subject - тема письма.

 

Date - дата/время генерации письма.

 

MIMI-Version - версия формата MIME, на данный момент всегда 1.0.

 

Content-Type - тип письма, который зависит от его содержимого, а так же разделитель частей письма boundary. Тип письма зависит от наличия встроенных картинок, вложений, а так же формата содержимого - Html, Text, Html+Text.

 

 

При помощи макроса ORandMessageHeader вы можете полностью управлять генерацией заголовка письма: менять порядок следования полей, вставлять дополнительные поля, управлять способом генерации Message-ID и boundary. Принцип работы макроса схож с ORandMessageBody - необходимо создать какое-то количество вариантов шаблонов заголовков в виде текстовых файлов и сохранить их в папку на диске. Далее, макрос ORandMessageHeader будет выбирать случайный файл из этой папки, парсить содержащиеся в нем макросы и использовать результат в качестве заголовков писем.

 

Рассмотрим макросы, которые можно использовать в шаблонах заголовков:

 

Макрос

Описание

[%%HSubject%%]

Тема письма. Значение берется из поля "Тема" редактора писем.

[%%HFromEmail%%]

Обратный (From) адрес. Значение берется из поля "Обратный адрес" Учетной записи отправителя.

[%%HFromName%%]

Имя отправителя (в исходном виде). Значения берется из поля "Имя" Учетной записи отправителя.

[%%HReplyToEmail%%]

Адрес для ответов (reply-to). Значение берется из поля "Reply-To адрес" Учетной записи отправителя.

[%%HEncodedFullFrom%%]

Имя и email отправителя в "подготовленном" виде. Для того, чтобы письмо корректно отображалось в почтовом клиенте получателя, используется так называемое inline кодирование. Оно применяется в случае если имя содержит любые не ASCII символы, например русские буквы. Например если имя отправителя Иван Иванов, а обратный email ivan@mail.ru - результатом обработки макроса [%%HEncodedFullFrom%%] будет =?windows-1251?B?yOLg7SDI4uDt7uI=?= <ivan@mail.ru>

Строка =?windows-1251?B?yOLg7SDI4uDt7uI=?= - это и есть inline кодирование имени Иван Иванов. Если имя отправителя на английском языке - оно будет подставлено как есть, например "Ivan Ivanov" <ivan@mail.ru>

[%%HEncodedFullReplyTo%%]

Имя и reply-to адрес в "подготовленном" виде. Результат формируется аналогично предыдущему макросу, только вместо обратного (From) адреса будет подставлен reply-to адрес.

[%%HSenderOrganization%%]

Организация отправителя. Значение берется из поля "Организация" Учетной записи отпрвителя.

[%%HFromEmailDomain%%]

Домен обратного адреса. Например, если обратный (from) адрес ivan@mail.ru - значением макроса будет mail.ru

[%%HToCcRecipients%%]

Имя и email получателя(ей) в "подготовленном" виде. Если для рассылки выбран режим Персональная Копия - значением будет только одна пара имя-email. Если же используется пакетный режим отправки (To или Cc) значением будет список имен и адресов получателей, для которых формируется данное письмо. Количество получателей в списке зависит от размера BCC пакета. Важное замечание: это единственный макрос, в результат которого попадает и название поля (To или Сс). Т.е. результатом может быть To: "Ivan Ivanov" <ivan@mail.ru> или Cc: "Ivan Ivanov" <ivan@mail.ru>. Название поля зависит от метода рассылки, выбранного в Профиле отправки. Если выбран метод Персональная копия или To - имя поля будет To:, если выбран метод Cc - то Сс:

[%%HMsgContentType%%]

Content-Type: письма. Будет подставлен корректный Content-Type в зависимости от типа письма,

наличия вложений и т.д. Вместе с Content-Type будет так же подставлено корректное значение для

поля Content-Transfer-Encoding. Тип кодировки для Content-Transfer-Encoding можно выбрать на тулбаре Редактора писем. По умолчанию используется Quoted-Printable кодировка. Так же можно выбрать Base64 или случайный выбор между ними.

[%%HContentTransferEncoding%%]

Значение для поля Content-Trasnfer-Encoding. В большинстве случаев использование этого макроса не требуется т.к. [%%HMsgContentType%%] уже подставит нужное значение. Однако, в некоторых случаях этот макрос может быть полезен.

[%%HMsgCharset%%]

Кодировка (charset) письма, заданная в Редакторе писем.

[%%HPriorityNumber%%]

Приоритет письма в виде цифры (для поля X-Priority:). Значение приоритета берется из Редактора писем - кнопка Приоритет на тулбаре редактора.

[%%HPriorityString%%]

Приоритет письма в виде строки (для поля X-MSMail-Priority:). Значение так же зависит от выбранного приоритета в Редакторе писем.

[%%HLocalComputerName%%]

Имя компьютера, на котором установлен AMS. Иногда используется при генерации поля Message-ID.

[%%HResolvedComputerHostName%%]

Имя домена, полученное через DNS запрос по IP адресу компьютера, на котором установлен AMS. Так же может использоваться для генерации поля Message-ID.

[%%HBoundary%%]

Боунадри (разделитель) Multi-Part писем.

[%%HOutlookBoundary%%]

Боундари (разделитель) Multi-Part писем в формате OutLook Express/Widnows Live Mail.

[%%HOutLookMessageID%%]

Идентификатор Message-ID в формате OutLook Express/Widnows Live Mail.

[%%HRandOutLookXMailer%%]

X-Mailer одной из 4 версий OutLook Express/Windows Live Mail (выбирается случайно).

[%%HRandOutLookMimeOle%%]

Версия X-MimeOLE одной из 4 версий OutLook Express/Windows Live Mail (выбирается случайно).

[%%HCurHeloString%%]

Строка (обычно домен) для команды HELO, которая будет использоваться для данного письма. Может быть использована для генерации Message-ID

[%%HRandIP%%]

Случайно сгенерированный IP адрес. Может использоваться для генерации полей Received:

[%%HCurrentRFCDateTime%%]

Текущее время в формате RFC. Например, Wed, 23 Dec 2015 15:45:55 +0300

[%%HRandRFCDateTime%%]

Cлучайно сгенерированное время в формате RFC. Получается вычитанием случайного числа

минут (от 1 до 60) от текущего времени.

[%%HCurrentYear%%]

Номер года из текущей даты/времени.

[%%HCurrentMonth%%]

Номер месяца из текущей даты/времени.

[%%HCurrentDay%%]

Номер дня из текущей даты/времени.

[%%HCurrentHour%%]

Номер часа из текущей даты/времени.

[%%HCurrentMin%%]

Номер минуты из текущей даты/времени.

[%%HCurrentSec%%]

Номер секунды из текущей даты/времени.

[%%HCurrentMilliSec%%]

Номер миллисекунды из текущей даты/времени.

SetBoundary=

С помощью директивы SetBoundary можно управлять генерацией разделителей частей письма. Обычно для генерации используются макросы ORandStr и/или ORandText. Например:

SetBoundary=-------[%%ORandStr,3-4,1-9,L,1%%][%%ORandStr,4-5,a-f,U,1%%][%%ORandStr,3-4,1-9,L,1%%][%%ORandStr,4-5,a-f,U,1%%]

 

Рассмотрим примеры нескольких шаблонов для рандомизации заголовков письма:

 

 

Пример шаблона

Результат обработки

MessageID: <[%%HOutLookMessageID%%]>

Reply-To: [%%HEncodedFullReplyTo%%]

From: [%%HEncodedFullFrom%%]

[%%HToCcRecipients%%]

Subject: [%%HSubject%%]

Date: [%%HCurrentRFCDateTime%%]

Organization: [%%HSenderOrganization%%]

MIME-Version: 1.0

Content-Type: [%%HMsgContentType%%]

X-Priority: [%%HPriorityNumber%%]

X-MSMail-Priority: [%%HPriorityString%%]

X-Mailer: [%%HRandOutLookXMailer%%]

X-MimeOLE: [%%HRandOutLookMimeOle%%]

 

This is a multi-part message in MIME format.

HdrOutlook

Date: [%%HCurrentRFCDateTime%%]

From: [%%HEncodedFullFrom%%]

X-Mailer: The Bat! (v6.7.36)

X-Priority: [%%HPriorityNumber%%]

MessageID: <[%%ORandStr,8-8,1-9,L,1%%].[%%HCurrentYear%%][%%HCurrentMonth%%][%%HCurrentDay%%][%%HCurrentHour%%][%%HCurrentMin%%][%%HCurrentSec%%][%%HCurrentMilliSec%%]@[%%HFromEmailDomain%%]>

[%%HToCcRecipients%%]

Subject: [%%HSubject%%]

MIME-Version: 1.0

Content-Type: [%%HMsgContentType%%]

SetBoundary=-------[%%ORandStr,3-4,1-9,L,1%%][%%ORandStr,4-5,a-f,U,1%%][%%ORandStr,3-4,1-9,L,1%%][%%ORandStr,4-5,a-f,U,1%%]

 

HdrBat

Обратите внимание, на результат генерации поля Message-ID, а так же значение boundary, которое генерировалось с помощью директивы SetBoundary.

Reply-To: [%%HEncodedFullReplyTo%%]

From: [%%HEncodedFullFrom%%]

MessageID: <[%%ORandStr,15-15,a-f,U%%]@[%%ORandStr,4-6,a-z,L%%]>

Subject: [%%HSubject%%]

[%%HToCcRecipients%%]

Date: [%%HCurrentRFCDateTime%%]

Content-Type: [%%HMsgContentType%%]

MIME-Version: 1.0

X-Priority: [%%HPriorityNumber%%]

SetBoundary=[%%ORandStr,10-10,1-9,U%%]__[%%ORandStr,5-5,1-9,U%%]

 

This is a multi-part message in MIME format.

 

HdrRnd

Reply-To: [%%HEncodedFullReplyTo%%]

From: [%%HEncodedFullFrom%%]

Subject: [%%HSubject%%]

MIME-Version: 1.0

[%%HToCcRecipients%%]

Content-Type: [%%HMsgContentType%%]

SetBoundary=[%%ORandStr,10-10,1-9,U%%]__[%%ORandStr,5-5,1-9,U%%]

Date: [%%HCurrentRFCDateTime%%]

MessageID: <[%%ORandStr,15-15,a-f,U%%]@[%%ORandStr,4-6,a-z,L%%]>

X-Field: my field content

HdrRnd1

 

Для рандомизации заголовков вы можете создать любое количество шаблонов как в примерах выше. Каждый шаблон следует сохранить в отдельный .txt файл в папку на диске. Далее, в редакторе писем зайдите в меню Вставить макрос->Случайное значение->Случайный заголовок сообщения и укажите папку, в которую вы сохранили шаблоны заголовков, а так же интервал загрузки случайного шаблона. В письмо будет вставлен макрос вида [%%ORandMessageHeader,c:\SomeFolder\,5%%], в результате программа будет загружать случайный шаблон заголовка из папки c:\SomeFolder\ каждые 5 писем.

 

Если вы хотите использовать рандомизацию тела письма и заголовков одновременно - шаблон рандомизации заголовков (т.е. ORandMessageHeader) должен быть вставлен в каждый вариант тела письма, используемых для ORandMessageBody. Т.е. вначале программа обрабатывает рандомизации тела письма и если в ваших вариантах письма обнаруживается шаблон ORandMessageHeader - программа начинает рандомизацию заголовков.

 

 

6. Загрузка тела письма и заголовков с URL

 

Часто встает необходимость генерировать уникальные письма для разных получателей по достаточно сложным алгоритмам, которые анализируют содержимое полей списка рассылки и подставляют в письмо разные блоки текста или графики в зависимости, к примеру, от региона получателя или других данных. Поскольку в большинстве случаев письмо формируется в html формате - задача сводится к генерации html страниц, которые должны использоваться программой в качестве тела письма. Для этих целей удобно использовать web сервер и PHP или другой язык вэб разработки. Один из простых вариантов - это установить пакет DENWER (http://www.denwer.ru, в состав которого входит web сервер Apache, язык PHP, Perl, а так же база данных MySQL). В результате у вас появится возможность генерировать высоко персонализированный контент любой сложности, используя всю мощь языка PHP, а результат генерации отдавать AMS для использования в качестве тела письма. Так же этот подход может использоваться для более сложной рандомизация тела письма и его заголовков: можно будет рандомизировать не только отдельные строки с помощью макросов ORandStr/ORandText, но и случайным образом менять последовательность текстовых блоков (абзацев), последовательность полей заголовков и т.д.

 

Макрос WMessageBodyFromURL

 

Макрос предназначен для загрузки тела письма с URL. Для вставки макроса используйте меню Вставить макрос->Строки с URL->Тело письма с URL редактора писем. В параметрах макроса нужно указать ссылку на ваш генератор контента (например, при использовании Denwer'a ссылка будет выглядеть примерно так: http://localhost/GetBody.php), а так же интервал загрузки нового тела письма. Если вы планируете использовать макрос для генерации персонализированного контента - необходимо поставить интервал обновления 1 письмо.

 

Пример простейшего PHP скрипта, отдающего тело письма:

 

<?php

echo <<<HTMLBODY

<HTML><HEAD>

<META content="text/html; charset=windows-1251" http-equiv=Content-Type>

</HEAD>

<BODY bgColor=#ffffff>

<DIV align=left>[%%Добрый день|Здравствуйте|Приветствуем вас%%], [%%FFullName%%] !</DIV>

<DIV align=left>Это текст письма, отданный из PHP скрипта.</DIV>

<DIV align=left>А здесь будет случайная строка из текстового блока с названием Strings: [%%ORandText,Strings%%]</DIV>

</BODY></HTML>

HTMLBODY;

?>

 

Обратите внимание, что вы можете использовать внутри Html кода любые [%%...%%] макросы. В примере выше используется макрос-перечисление, подстановка имени получателя из поля FullName списка рассылки (макрос [%%FFullName%%]), а так же макрос подстановки случайной строки [%%ORandText,Strings%%]). После загрузки html кода с ссылки программа выполнит поиск и парсинг макросов, а результат будет использован в качестве тела письма.

 

Внимание ! Очень желательно чтобы html код содержал META тэг с указханием кодировки: <META content="text/html; charset=windows-1251" http-equiv=Content-Type> в противном случае ваше письмо может придти в не читабельном виде.

 

В целом, макрос WMessageBodyFromURL работает аналогично макросу ORandMessageBody, разница в том, что первый макрос загружает содержимое письма с URL, а второй из файлов на диске.

 

 

Макрос WMessageHeaderFromURL

 

Макрос предназначен для загрузки шаблонов заголовков с URL. Работает аналогично ORandMessageHeader, но загружает данные с URL, а не из файлов на диске. Для вставки макроса используйте меню Вставить макрос->Строки с URL->Заголовки письма с URL. В параметрах макроса нужно выбрать интервал загрузки заголовков с вашей ссылки.

 

Пример простого PHP скрипта, генерирующего заголовки со случайным порядком следования полей:

 

<?php

// Массив с полями заголовка

$FieldsArray=array("From: [%%HEncodedFullFrom%%]","[%%HToCcRecipients%%]","Date: [%%HCurrentRFCDateTime%%]","Content-Type: [%%HMsgContentType%%]","Subject: [%%HSubject%%]","MIME-Version: 1.0","MessageID: <[%%HOutLookMessageID%%]>");

shuffle($FieldsArray); // случайно перемешать массив

foreach($FieldsArray as $FieldValue)  // выдать все элементы перемешанного массива

echo $FieldValue."\r\n";

?>

 

Если требуется загружать и тело письма и заголовки с URL - ваш html код, который отдается как тело письма, должен содержать макрос [%%WMessageHeaderFromURL%%] в любом месте. Например, нужно загружать тело письма по ссылке http://localhost/GetBody.php а заголовки по ссылке http://localhost.GetHeader.php. Для этого, в редакторе писем, вставляем единственный макрос [%%WMessageBodyFromURL,http://localhost/GetBody.php,1%%], а наш скрипт GetBody.php должен отдавать примерно такой код:

 

<?php

echo <<<HTMLBODY

[%%WMessageHeaderFromURL,http://localhost/GetHeader.php,1%%]

<HTML><HEAD>

<META content="text/html; charset=windows-1251" http-equiv=Content-Type>

</HEAD>

<BODY bgColor=#ffffff>

<DIV align=left>[%%Добрый день|Здравствуйте|Приветствуем вас%%], [%%FFullName%%] !</DIV>

<DIV align=left>Это текст письма, отданный из PHP скрипта.</DIV>

<DIV align=left>А здесь будет случайная строка из текстового блока с названием Strings: [%%ORandText,Strings%%]</DIV>

</BODY></HTML>

HTMLBODY;

?>

 

Обратите внимание, что первая строка html кода - это макрос WMessageHeaderFromURL. Таким образом у нас будет загружаться с URL и тело письма и шаблон заголовка.

 

Макрос WTextFromURL

 

Макрос предназначен для загрузки отдельных текстовых блоков или html кода с URL. Макрос исполняется для каждого письма, т.е. интервал обновления у него всегда равен 1. Макрос может быть полезен, когда нужно загружать не все тело письма, а только отдельные строки (например, результат выборки из базы данных). Пример использовавания макроса в письме:

 

Здравствуйте, [%%FFullName%%] !

 

Номер вашего заказа [%%WTextFromURL,http://www.site.ru/GetNumber.php%%]

 

 

Макрос WFullMessageBodyFromURL

 

Макрос предназначен для загрузки готового MIME письма целиком (тело + заголовки), дает вам полный контроль над генерацией письма. Ваш генератор контента должен отдавать готовое письмо в MIME формате, например:

 

Мessage-ID: <343187D4DFF421D20E0BBDEEEAD97D87@mail.ru>

From: [%%HEncodedFullFrom%%]

[%%HToCcRecipients%%]

Subject: This is a test message

Date: Sun, 27 Dec 2015 00:15:14 +0300

Organization: Ivan Company

MIME-Version: 1.0

Content-Type: multipart/alternative; boundary="26a3c5e5100642978564e567a14a"

 

This is a multi-part message in MIME format.

 

--26a3c5e5100642978564e567a14a

Content-Type: text/plain; charset="windows-1251"

Content-Transfer-Encoding: quoted-printable

 

=DD=F2=EE =F2=E5=EA=F1=F2 =EF=E8=F1=FC=EC=E0.

 

--26a3c5e5100642978564e567a14a

Content-Type: text/html; charset="windows-1251"

Content-Transfer-Encoding: quoted-printable

 

<HTML><HEAD>

<META http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dwindows=

-1251">

</HEAD>

<BODY bgColor=3D#ffffff>

<DIV align=3Dleft>=DD=F2=EE =F2=E5=EA=F1=F2 =EF=E8=F1=FC=EC=E0.</DIV></BO=

DY></HTML>

 

--26a3c5e5100642978564e567a14a--

 

Программа загрузит письмо и отправит его "как есть" почти без парсинга и модификаций. Если вы генерируете письмо целиком самостоятельно вы можете использовать только два макроса [%%HEncodedFullForm%%] и [%%HToCcRecipients%%] вместо которых AMS подставит данные об отправителе и получателе. Программа не ищет и не исполняет никаких других макросов и не вносит никаких других изменений в то, что отдаст ваш генератор. Фактически, с этим макросом AMS будет использоваться только как транспорт, а генерация контента полностью отдается под ваш контроль.

 

 

6. Использование параметров $_[GET] в вашем генераторе контента

 

При вызове ссылок из макросов [%%WMessageBodyFromURL%%],[%%WMessageHeaderFromURL%%],[%%WTestFromURL%%],[%%WFullMessageBodyFromURL%%] AMS автоматически добавляет к ссылке параметры с данными о том, от кого и для кого формируется письмо.

 

Например, мы вставили в письмо макрос [%%WMessageBodyFromURL,http://localhost/GetBody.php, 1%%]. Перед вызовом ссылки http://localhost/GetBody.php к ней будут добавлены данные об отправителе и получателе, для которого формируется письмо. Т.е. фактически ссылка будет вызвана в таком виде:

 

http://localhost/GetBody.php?Send_Method=PersonalCopy&Sender_Name=Ivan Ivanov&Sender_Email=ivan@mail.ru&Sender_ReplyToEmail=ivan-reply@mail.ru&Sender_Organization=Ivan Company&MailList_ID=125&MailList_Email=sergei@mail.ru&MailList_FullName=Sergei Sergeev

 

Как видите, после GetBody.php? передается инофрмация о режиме рассылки, отправителе и получателе. Разберем передаваемые параметры:

 

 

Send_Method - метод рассылки, возможные значения To, Cc, Bcc, PersonalCopy.

 

Sender_Name - имя отправителя из Учетной записи отправителя.

 

Sender_Email - email отправителя из поля Обратный email Учетной записи отправителя.

 

Sender_ReplyToEmail - reply-to адрес из Учетной записи отправителя.

 

Sender_Organization - содержимое поле Организация из Учетной записи Отправителя.

 

ProxyIP - IP адрес прокси, через который будет отправлено письмо (если включена рассылка через прокси).

 

ProxyPort - порт прокси, через который будет отправлено письмо (если включена рассылка через прокси).

 

ProxyLogin - логин прокси, через который будет отправлено письмо (если включена рассылка через прокси)

 

ProxyHost - имя хоста прокси т.е. содержимое PTR (Reverse DNS) записи, привязанной к IP прокси, через который будет отправлено письмо (если включена рассылка через прокси)

 

SmtpSeverName - имя Smtp сервера, через которое будет отправлено письмо (если режим рассылки через smtp релеи).

 

SmtpLogin - логин Smtp сервера, через которое будет отправлено письмо (если режим рассылки через smtp релеи).

 

Далее идет содержимое всех полей списка рассылки для контакта, для которого формируется письмо. Поля передаются в виде пар значений MailList_ИмяПоля=значение поля. Например, email получателя будет передан в параметре с названием MailList_Email.

 

Таким образом, ваш генератор контента будет получать данные о том, для кого нужно генерировать письмо ! Это может быть особенно удобно если рассылка идет по "внешнему" списку рассылки (т.е. получает список рассылки из внешней базы данных через подключение через ODBC драйвер).

 

Пример использования параметров внутри PHP скрита:

 

<?php

echo "Это тело письма сформировано для получателя: ".$_GET["MailList_FullName"];

?>

 

Конструкция $_GET["MailList_FullName"] вернет значение параметра MailList_FullName в котором будет содержимое поля FullName списка рассылки.

 

Творчески комбинируя возможности, описанные в этом топике, вы можете добиться высочайшей рандомизации или персонализации ваших писем ;-)