Киян
Автор
84
Просмотров
3.148.107.255
Ваш IP
14 января 2024
Дата создания

Массовая рассылка писем с HTML. Отправить письмо или почту через 1С с картинками, изображениями, таблицами и прочим

Массовая рассылка писем с HTML. Отправить письмо или почту через 1С с картинками, изображениями, таблицами и прочим

 12.09.18

Интеграция Email рассылки

Если вам необходимо создать красивое письмо и отправить его средствами 1С, вам поможет эта статья.

Скачать файлы

НаименованиеФайлВерсияРазмер
Массовая рассылка писем с HTML (материалы к статье).rar25,27Kb69 Скачать (1 стартмани)

 

Добрый день, Коллеги!

Допустим, есть задача, сформировать программное электронное письмо шаблон и в него вставлять какой-то свободно изменяемый текст в зависимости от ситуации а-ля официальный бланк на бумаге. Разберём на примере поздравления с новым годом наших горячо любимых клиентов! УРА! И сделаем мы это без помощи дизайнеров и верстальщиков! УРА!

1. Создаем шаблон HTML в виде строкового типа 1С

Допустим, у вас есть некий официальный или фирменный бланк в WORD (не реклама).

А если нет, то вы я думаю, легко его сможете в том же WORD создать. Для примера я создал:

Понял, что меня устраивает такой дизайн, делаю его пригодным для внутрипрограммного «парсинга». Т.е. раставляю метки, которые позже буду использовать.

Для себя нашел самый простой способ конвертировать его в HTML в том же WORDе. Просто сохраняем его в HTML и открываем с помощью браузера CHROME (не реклама).

А затем подготавливаем небольшую обработку. Чтобы легко и быстро конвертировать код HTML в строку 1С. Может можно иначе, но я решил так.

Создал внешнею обработку, на форме два реквизита оба строковые «Исходный» и «Конвертированный», одна команда «Конвертировать».

Код команды "Конвертировать":

&НаКлиенте
Процедура Конвертировать(Команда)
    БуферКод = СтрЗаменить(Исходный,Символы.ПС,Символы.ПС + "|");
    БуферКод = СтрЗаменить(БуферКод,"""","""""");
    Конвертированный = БуферКод;
КонецПроцедуры


 

Теперь мы готовы и возвращаемся в CHROME к нашей заготовке. Правой кнопкой по самому полю страницы вызываем контекстное меню и выбираем пункт «Просмотреть код страницы».

Копируем его весь, не парьтесь вы же ни верстальщик и ни дизайнер, по этому просто пока бездумно всё забираем (но конечно можете блеснуть знанием HTML и сверстать так как вам угодно, но мне это не интересно пока), вставляем в нашу свежеиспеченную обработку и конвертируем ;)

Всё текст готов для вставки в код.

2. Создаем рассыльщик с поддержкой HTML

Теперь займёмся написанием процедуры отправки почты. В примере создадим обработку, через которую будет производиться отправка почты.

Реквизиты все строкового типа: Адреса, Должность, ЗаголовокПисьма, Подпись, ТекстПисьма, ТемаПисьма и ФИО.

Обработка готова, теперь нам нужно написать типовой код подключения к почте и отправке письма. В качестве электронной почты, с которой будет производиться рассылка, выступит YANDEX.RU (не реклама).

&НаКлиенте
Процедура ОтправитьПочту(Команда)
	
	ТекстДляОтправки = СформироватьТекстПисьма();
	
	//Настройки почты
	АдресСервераSMTP = "smtp.yandex.ru";
	ПортSMTP = "465";
	Email = "ВАШАПОЧТА@yandex.ru";
	Пароль = "ВАШПАРОЛЬ!!!";
		
	//Создаем профиль подключения
	//Тестировал, этого достаточно для работы с YANDEX.RU
	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АдресСервераSMTP = АдресСервераSMTP;
	Профиль.ПортSMTP = ПортSMTP;
	Профиль.ПользовательSMTP = Email; 
	Профиль.ПарольSMTP = Пароль; 
	Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
	Профиль.ИспользоватьSSLSMTP = Истина;	

	//Можно так определиться в каком форма слать письмо, мы конечно выберем HTML
	HTML = ИСТИНА;
	ТипТекста = ?(HTML,ТипТекстаПочтовогоСообщения.HTML,ТипТекстаПочтовогоСообщения.ПростойТекст);
	
	//Создаем письмо	
	ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение; 
	ПочтовоеСообщение.Тема = ТемаПисьма; 
	ПочтовоеСообщение.ИмяОтправителя="Дед Мороз";
	ПочтовоеСообщение.Отправитель = Email;
	АдресаСписком = СтрЗаменить(СокрЛП(Адреса),",",Символы.ПС);
	//Участок кода ответственный за массовую рассылку.
	//Если все адреса ввести через запятую!
	//Есть минус, все получатели увидят других получателей.
	//Если не хотите чтобы получатели видели весь список,
	//отправляйте каждому индивидуально много раз вызывая данную процедуру.
	Для Индекс = 1 По СтрЧислоСтрок(АдресаСписком) Цикл
        ТекущийАдрес = СтрПолучитьСтроку(АдресаСписком, Индекс);
		ПочтовоеСообщение.Получатели.Добавить(СокрЛП(ТекущийАдрес));
	КонецЦикла;	 
	ПочтовоеСообщение.Тексты.Добавить(ТекстДляОтправки,ТипТекста);
	ПочтовоеСообщение.ОбработатьТексты();
	
	Почта = Новый ИнтернетПочта;
	
	//Подключаемся к почте
	Попытка
		Почта.Подключиться(Профиль);
		ОшибкаПодключения = "";
	Исключение
		ОшибкаПодключения = ОписаниеОшибки();
	КонецПопытки;
		
	//Отправляем письмо	
	Попытка
		Почта.Послать(ПочтовоеСообщение);
		ОшибкаПриОтправке = "";
	Исключение
		ОшибкаПриОтправке = ОписаниеОшибки();
		//Сообщить(ОшибкаПриОтправке);
	КонецПопытки;
	
	//Ведём лог при необходимости
	Если ЛОЖЬ
		ИЛИ ОшибкаПодключения <> ""
		ИЛИ ОшибкаПриОтправке <> ""
		Тогда		
		//Тут вы можете вести лог или отправлять себе почту, об нежданчиках		
	КонецЕсли;
	
	//Закрываем письмо
	Почта.Отключиться();

КонецПроцедуры

После проверки кода, конфигуратор выдаст ошибку: «Процедура или функция с указанным именем не определена (СформироватьТекстПисьма)». Вот и переходим к конечному пункту формированию самого письма.

Создаем новую функцию и одну текстовую переменную в ней для начала «Шаблон», которой присваиваем заранее скопированный из буфера конвертированной в обработке созданной нами выше текст, просто не задумывая с набор этих букв.

&НаКлиенте

Функция СформироватьТекстПисьма()



                Шаблон = "      

                |<html>

                |

                |<head>

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

                |<meta name=Generator content=""Microsoft Word 14 (filtered)"">

                |<style>

                |<!--

                | /* Font Definitions */

                | @font-face

                |             {font-family:Calibri;

                |             panose-1:2 15 5 2 2 2 4 3 2 4;}

                |@font-face

                |             {font-family:Tahoma;

                |             panose-1:2 11 6 4 3 5 4 4 2 4;}

                | /* Style Definitions */

                | p.MsoNormal, li.MsoNormal, div.MsoNormal

                |             {margin-top:0cm;

                |             margin-right:0cm;

                |             margin-bottom:10.0pt;

                |             margin-left:0cm;

                |             line-height:115%;

                |             font-size:11.0pt;

                |             font-family:""Calibri"",""sans-serif"";}

                |p.MsoAcetate, li.MsoAcetate, div.MsoAcetate

                |             {mso-style-link:""Текст выноски Знак"";

                |             margin:0cm;

                |             margin-bottom:.0001pt;

                |             font-size:8.0pt;

                |             font-family:""Tahoma"",""sans-serif"";}

                |span.a

                |             {mso-style-name:""Текст выноски Знак"";

                |             mso-style-link:""Текст выноски"";

                |             font-family:""Tahoma"",""sans-serif"";}

                |.MsoPapDefault

                |             {margin-bottom:10.0pt;

                |             line-height:115%;}

                |@page WordSection1

                |             {size:595.3pt 841.9pt;

                |             margin:2.0cm 42.5pt 2.0cm 3.0cm;}

                |div.WordSection1

                |             {page:WordSection1;}

                |-->

                |</style>

                |

                |</head>

                |

                |<body lang=RU>

                |

                |<div class=WordSection1>

                |

                |<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0 width=""100%""

                | style='width:100.0%;border-collapse:collapse;border:none'>

                | <tr>

                |  <td width=""36%"" valign=top style='width:36.68%;border:none;border-right:solid windowtext 1.0pt;

                |  padding:0cm 5.4pt 0cm 5.4pt'>

                |  <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:

                |  normal'><img width=216 height=43 id=""Рисунок 1""

                |  src=""Информационно1.files/image001.png""></p>

                |  <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:

                |  normal'>&nbsp;</p>

                |  <p class=MsoNormal align=center style='margin-bottom:0cm;margin-bottom:.0001pt;

                |  text-align:center;line-height:normal'><span style='font-size:9.0pt'>Информационно-аналитический

                |  центр по автоматизации учета и управления</span></p>

                |  </td>

                |  <td width=""63%"" valign=top style='width:63.32%;border:none;padding:0cm 5.4pt 0cm 5.4pt'>

                |  <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:

                |  normal'>Инфостарт — информационно-аналитический центр по автоматизации учета

                |  и управления на 1С 7.7, 1С 8.0, 1С 8.1, 1С 8.2, 1С 8.3.</p>

                |  </td>

                | </tr>

                |</table>

                |

                |<p class=MsoNormal>&nbsp;</p>

                |

                |<p class=MsoNormal style='margin-left:304.8pt'>Должность</p>

                |

                |<p class=MsoNormal style='margin-left:304.8pt'>ФИО</p>

                |

                |<p class=MsoNormal style='margin-left:304.8pt'>ТекущаяДата</p>

                |

                |<p class=MsoNormal>&nbsp;</p>

                |

                |<p class=MsoNormal align=center style='text-align:center'><span

                |style='font-size:20.0pt;line-height:115%'>ЗаголовокПисьма</span></p>

                |

                |<p class=MsoNormal><span style='font-size:14.0pt;line-height:115%'>ТекстПисьма</span></p>

                |

                |<p class=MsoNormal><span style='font-size:14.0pt;line-height:115%'>&nbsp;</span></p>

                |

                |<p class=MsoNormal><span style='font-size:14.0pt;line-height:115%'>Подпись</span></p>

                |

                |</div>

                |

                |</body>

                |

                |</html>

                |";



КонецФункции

Нужно главное не забыть! Что у нас есть картинка, и её придётся ручками под редактировать в коде… Сейчас путь указан «src=""Информационно1.files/image001.png""». Где это 1С не поймёт, по этому я создал папочку и положил картинку в неё и разместил все для примера на диске С.

Получил новый путь и вставлю его в тег SRC. Выходит «src="" C:publiclogo.jpg""».

ВНИМАНИЕ! Если папка шара, то путь указывается с одним слешем типа «src="" 192.168.1.1.Bidkotovlogo.jpg», 1С и это съест нормально. Почему один не знаю, но так работает у меня проверено ;)

Вот теперь после присвоения переменной «Шаблон», будем её изменять и редактировать программно всего одной функцией СтрЗаменить и идти к успеху! Вы же помните наши метки, по ним и будем ориентироваться. Готовая функция:

&НаКлиенте
Функция СформироватьТекстПисьма()

	Шаблон = "	
	|<html>
	|
	|<head>
	|<meta http-equiv=Content-Type content=""text/html; charset=windows-1251"">
	|<meta name=Generator content=""Microsoft Word 14 (filtered)"">
	|<style>
	|<!--
	| /* Font Definitions */
	| @font-face
	|	{font-family:Calibri;
	|	panose-1:2 15 5 2 2 2 4 3 2 4;}
	|@font-face
	|	{font-family:Tahoma;
	|	panose-1:2 11 6 4 3 5 4 4 2 4;}
	| /* Style Definitions */
	| p.MsoNormal, li.MsoNormal, div.MsoNormal
	|	{margin-top:0cm;
	|	margin-right:0cm;
	|	margin-bottom:10.0pt;
	|	margin-left:0cm;
	|	line-height:115%;
	|	font-size:11.0pt;
	|	font-family:""Calibri"",""sans-serif"";}
	|p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	|	{mso-style-link:""Текст выноски Знак"";
	|	margin:0cm;
	|	margin-bottom:.0001pt;
	|	font-size:8.0pt;
	|	font-family:""Tahoma"",""sans-serif"";}
	|span.a
	|	{mso-style-name:""Текст выноски Знак"";
	|	mso-style-link:""Текст выноски"";
	|	font-family:""Tahoma"",""sans-serif"";}
	|.MsoPapDefault
	|	{margin-bottom:10.0pt;
	|	line-height:115%;}
	|@page WordSection1
	|	{size:595.3pt 841.9pt;
	|	margin:2.0cm 42.5pt 2.0cm 3.0cm;}
	|div.WordSection1
	|	{page:WordSection1;}
	|-->
	|</style>
	|
	|</head>
	|
	|<body lang=RU>
	|
	|<div class=WordSection1>
	|
	|<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0 width=""100%""
	| style='width:100.0%;border-collapse:collapse;border:none'>
	| <tr>
	|  <td width=""36%"" valign=top style='width:36.68%;border:none;border-right:solid windowtext 1.0pt;
	|  padding:0cm 5.4pt 0cm 5.4pt'>
	|  <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
	|  normal'><img width=216 height=43 id=""Рисунок 1""
	//КАРТИНКА КОТОРАЯ ТРЕБУЕТ ЗАМЕНЫ НА РЕАЛЬНО СУЩЕСТВУЮЩИЮ У ВАС
	|  src=""C:publiclogo.jpg""></p>
	|  <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
	|  normal'>&nbsp;</p>
	|  <p class=MsoNormal align=center style='margin-bottom:0cm;margin-bottom:.0001pt;
	|  text-align:center;line-height:normal'><span style='font-size:9.0pt'>Информационно-аналитический
	|  центр по автоматизации учета и управления</span></p>
	|  </td>
	|  <td width=""63%"" valign=top style='width:63.32%;border:none;padding:0cm 5.4pt 0cm 5.4pt'>
	|  <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
	|  normal'>Инфостарт — информационно-аналитический центр по автоматизации учета
	|  и управления на 1С 7.7, 1С 8.0, 1С 8.1, 1С 8.2, 1С 8.3.</p>
	|  </td>
	| </tr>
	|</table>
	|
	|<p class=MsoNormal>&nbsp;</p>
	|
	|<p class=MsoNormal style='margin-left:304.8pt'>Должность</p>
	|
	|<p class=MsoNormal style='margin-left:304.8pt'>ФИО</p>
	|
	|<p class=MsoNormal style='margin-left:304.8pt'>ТекущаяДата</p>
	|
	|<p class=MsoNormal>&nbsp;</p>
	|
	|<p class=MsoNormal align=center style='text-align:center'><span
	|style='font-size:20.0pt;line-height:115%'>ЗаголовокПисьма</span></p>
	|
	|<p class=MsoNormal><span style='font-size:14.0pt;line-height:115%'>ТекстПисьма</span></p>
	|
	|<p class=MsoNormal><span style='font-size:14.0pt;line-height:115%'>&nbsp;</span></p>
	|
	|<p class=MsoNormal><span style='font-size:14.0pt;line-height:115%'>Подпись</span></p>
	|
	|</div>
	|
	|</body>
	|
	|</html>
	|";
	
	ПисьмоДляОтправки = СтрЗаменить(Шаблон,"Должность",Должность);
	ПисьмоДляОтправки = СтрЗаменить(ПисьмоДляОтправки,"ФИО",ФИО);
	ПисьмоДляОтправки = СтрЗаменить(ПисьмоДляОтправки,"ТекущаяДата",Формат(ТекущаяДата(),"ДЛФ=Д"));
	ПисьмоДляОтправки = СтрЗаменить(ПисьмоДляОтправки,"ЗаголовокПисьма",ЗаголовокПисьма);
	ПисьмоДляОтправки = СтрЗаменить(ПисьмоДляОтправки,"ТекстПисьма",ТекстПисьма);
	ПисьмоДляОтправки = СтрЗаменить(ПисьмоДляОтправки,"Подпись",Подпись);
	
	Возврат ПисьмоДляОтправки;

КонецФункции

 

3. Проверка работы

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

Результат проверил на разных почтовых сервисах, программах и устройствах:

 

А вот в мобильной версии из меня не удачный верстальщик ;)

По этому смотрите сами, корректируйте и выстраивайте шаблон так в WORDе, чтобы он читабелен был везде ;)

Резюме

Мы имеем возможность создать свой универсальный шаблон, в который можно выводить отчет, вставлять разные картинки от ситуации, конечно потребуется минимальное понимание HTML (для динамического формирования таблицы и её заполнения), но это позволит создавать рассылку или уведомления более привлекательными. А это хороший шаг в Email-маркетинге иметь привлекательное письмо.

Можно развить шаблон до формата редактирования его прямо в 1С используя одну из многочисленных обработок: 

//infostart.ru/public/all/?st=t&public-filter%5Bsearch%5D=%F0%E5%E4%E0%EA%F2%EE%F0+HTML

Но лично мне удобнее и проще показалось создать шаблон в ворде, чем ковыряться в html-редакторе.

Удачного кодинга! С наступающим Новым Годом!

 

ПС (добавим таблицу значений в официальное письмо):

Хочется отметить, что данная работа развилась в желание отправлять отчетность прямо в теле письма, по этому нужен был простой и удобный механизм трансформации таблицы значений в строковый тип 1С содержащий таблицу HTML. Вот тут вам и поможет моя функция в открытом доступе - //infostart.ru/public/717412/ функции можно передать структуру параметров, в которой указать ряду колонок своё выравнивание, задать цвет шапки, свои размеры колонкам, переименовать заголовки колонок, а так же вывести зачастую необходимый пункт по порядку. Т.е. выгружаем запрос в таблицу значений, передаем таблицу значений в функцию и получаем результат вставив строку в тело официального письма: