gifts2017

Отправка сообщения посредством почтового клиента Lotus Notes

Опубликовал Алексей _ (iolko) в раздел Программирование - Практика программирования

Отправка сообщения посредством почтового клиента Lotus Notes из 1С 7,7 и 1с 8
Доброго времени суток.


Недавно столкнулся с необходимостью не только отправлять сообщения по средствам SMTP и POP3 протоколов, но и хранить отправленное сообщение в 
 папке "Отправленные" у пользователей. Для того, чтобы это реализовать, нужно было воспользоваться именно учетной записью конкретного пользователя.
Установить соединение с ЕГО клиентом LN и при помощи ЕГО же клиента осуществить отправку. 
 Есть несколько статей на данную тему, но нигде нет полностью работающего когда, а лишь отрывки.... Попытаюсь исправить ситуацию.

Используемые источники:

http://forum.ru-board.com/topic.cgi?forum=33&topic=0478

http://www.kb.mista.ru/article.php?id=679

Документация LN



 Итак, для 1С 7

 
 Процедура Сформировать ()
	ФайлВложения = "C:\123.txt";ЛотусСессия = CreateObject( "Lotus.NotesSession" );Если ЛотусСессия = "" ТогдаТекстОшибки = "Не установлен Lotus Notes !";
	Сообщить (ТекстОшибки);Иначе
	ЛотусСессия.Initialize("ПАРОЛЬ");
	ПользовательЛотуса = ЛотусСессия.CommonUserName;ИмяФайлаБд = ЛотусСессия.GETENVIRONMENTSTRING("mailFile", 1);
	БазаДанных = ЛотусСессия.GETDATABASE("", ИмяФайлаБД);Если БазаДанных.IsOpen=1 Тогда
	Сообщить ("Лотус готов для работы");Иначе Дирриктория = ЛотусСессия.GETDBDIRECTORY("");
	БазаДанных = Дирриктория.OpenMailDatabase();КонецЕсли;
	ПочтовыйДокумент = БазаДанных.CREATEDOCUMENT();
	ПочтовыйДокумент.AppendItemValue ("Form","Memo");ПочтовыйДокумент.AppendItemValue ("subject","test");ПочтовыйДокумент.AppendItemValue ("SendTo","mail@mail.com");
	ПочтовыйДокумент.AppendItemValue ("SendTo","mail@mail.com");
	ПочтовыйДокумент.AppendItemValue ("Body","тело письма");
	ВложениеПисьма = ПочтовыйДокумент.CREATERICHTEXTITEM("Attachment");
	ВложенныйОбъект=ВложениеПисьма.EMBEDOBJECT(1454, "", ФайлВложения, "Attachment");
	ПочтовыйДокумент.SaveMessageOnSend = 1;
	ПочтовыйДокумент.Save (1, 0);ПочтовыйДокумент.Send (1);КонецЕсли;КонецПроцедуры
Для 1С 8 практически то же самое:
 Процедура ОткрытьЛотус(Команда)
		ФайлВложения = "C:\123.txt";
		ЛотусСессия = Новый COMОбъект( "Lotus.NotesSession" ); Если ЛотусСессия = Неопределено Тогда
		ТекстОшибки = "Не установлен Lotus Notes !";
		Сообщить (ТекстОшибки); Иначе
		ЛотусСессия.Initialize("МойПароль");
		ПользовательЛотуса = ЛотусСессия.CommonUserName;
		ИмяФайлаБд = ЛотусСессия.GETENVIRONMENTSTRING("mailFile", True);
		БазаДанных = ЛотусСессия.GETDATABASE("", ИмяФайлаБД); Если БазаДанных.IsOpen=True Тогда
		Сообщить ("Лотус готов для работы"); Иначе Дирриктория = ЛотусСессия.GETDBDIRECTORY("");
		БазаДанных = Дирриктория.OpenMailDatabase(); КонецЕсли;
		ПочтовыйДокумент = БазаДанных.CREATEDOCUMENT();
		ПочтовыйДокумент.AppendItemValue ("Form","Memo");
		ПочтовыйДокумент.AppendItemValue ("subject","test");
		ПочтовыйДокумент.AppendItemValue ("SendTo","mail.mail.com");
		ПочтовыйДокумент.AppendItemValue ("Body","тело письма");
		ВложениеПисьма = ПочтовыйДокумент.CREATERICHTEXTITEM("Attachment");
		ВложенныйОбъект=ВложениеПисьма.EMBEDOBJECT(1454, "", ФайлВложения, "Attachment");
		ПочтовыйДокумент.SaveMessageOnSend = Истина;
		ПочтовыйДокумент.Save (Истина, Ложь);
		ПочтовыйДокумент.Send (Истина); КонецЕсли; КонецПроцедуры
	
В принципе, код понятен,  сильно объяснять ничего не надо. Показано, как работать с com объектом LN, как создать письмо и прикрепить Аттач.
Недостатки метода - ПАРОЛЬ, и конечно же сам LN ))), но не мы придумываем корпоративные стандарты.
Пароль можно как нибудь шифровать, или набирать разово при первой отправке, а далее хранить где нибудь, допустим, в параметрах сеанса.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр (smit1c) 27.08.14 16:11
2. Михаил Ильчук (MIracloid2000) 30.08.14 02:11
3. Алексей _ (iolko) 02.09.14 05:36
(2) MIracloid2000, В целом, конечно лучше IMAP потому как гораздо проще и безопаснее, НО!!!! Есть варианты, когда надо отправить именно под УЗ конкретного пользователя и при этом (обязательно!!!) сохранить письмо в исходящих. Вот в этой ситуации (во всяком случае я не нашел решения) кроме как использовать именно клиента LN.
4. Светлана Юсубуллина (Swetlana) 12.12.14 14:32
Спасибо за хороший материал, как раз нужен :)
5. Светлана Юсубуллина (Swetlana) 15.12.14 09:29
Ошибка выходит при получении почты- Сохраненная форма не может содержать вычисляемые подформы, и вроде поначалу она не выходила. В чем может быть дело?
6. Алексей _ (iolko) 16.12.14 08:58
(5) Swetlana, Доброго дня, если честно с получением почты я как то не разбирался, цель была отправить сообщение. Посмотрите в документации к LN. Ссылка присутствует в шапке.
7. Natali Yu (crazy.admin91119) 18.12.14 17:13
Спасибо за статью!
очень полезная!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа