User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active
 

Добрый день. 

Сегодня мы с Вами разберемся, как пользоваться почтой в 1С. Какие есть приемы и методы, когда какие надо использовать.

Начнем с того, что в 1С предусмотрено два объекта для работы с почтой. "Почта" и "ИнтернетПочта". Отличие между ними в том, что первый использует почтовый клиент установленный на машине пользователя. Минус тут очевиден - требуется наличие настроенного почтового клиента, при отправке письма открывается сторонняя программа. Но есть и плюс, нам не обязательно знать данные учетной записи, от лица которой мы хотим написать письмо. Какая учетка настроена у клиента, с той и отправится письмо. При этом поведение письма полностью будет определяться настройками клиента, т.е. будет таким, как удобно пользователю, а не как мы решили (спрограммировали).

Второй объект - ИнтернетПочта. Это встроенный в 1С почтовый клиент, который позволяет отправлять письма без использования стороннего ПО. В нем есть все необходимое и он напрямую общается с почтовым сервером. Плюс в том, что у нас все под контролем, но это и минус. Нам надо знать все параметры учетной записи: логины пароли адреса порты IMAP POP3 SMTP. Незнание одного из параметров сразу приводит к невозможности сделать то или иное действие.



Про работу с объектом почта мы поговорим в другой короткой статье. Тут мы поговорим про свойства и методы 1С объекта ИнтернетПочта. Это самый интересный с точки зрения программирования объект, т.к. в нем все придется писать самому.

Т.к. мы все тут должны указывать сами, то для работы с ИнтернетПочта нам потребуется подробно заполненный объект ПрофильПочты. В профиле мы должны указать все данные, необходимые для связи с почтовым сервером. Собственно объект ПрофильПочты содержит однотипные свойства для разных протоколов. Ниже приведу пример их заполнения для сервера mail.ru:

 ПрофильПочты = Новый ИнтернетПочтовыйПрофиль;
 ПрофильПочты.АдресСервераIMAP = "imap.mail.ru";
 ПрофильПочты.ПортIMAP = 993;
 ПрофильПочты.ИспользоватьSSLIMAP = Истина;
 ПрофильПочты.ПользовательIMAP = "This email address is being protected from spambots. You need JavaScript enabled to view it.";
 ПрофильПочты.ПарольIMAP = "pass";
 ПрофильПочты.АдресСервераSMTP = "smtp.mail.ru";
 ПрофильПочты.ПортSMTP = 587;
 ПрофильПочты.ПользовательSMTP = "This email address is being protected from spambots. You need JavaScript enabled to view it.";
 ПрофильПочты.ПарольSMTP = "pass";
 ПрофильПочты.АдресСервераPOP3 = "pop.mail.ru";
 ПрофильПочты.ПортPOP3 = 110;
 ПрофильПочты.Пользователь = "This email address is being protected from spambots. You need JavaScript enabled to view it.";
 ПрофильПочты.Пароль = "pass";
 ПрофильПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;

Соответственно, все эти поля не являются обязательными, если Вы не планируете в данном случае, то можете их не заполнять. Далее Вам будет понятно что и для чего нужно. Все эти параметры как правило можно узнать у поставщика почтовых услуг. Если почтовый сервер Ваш собственный, спросите их у себя или у админа:) Я взял эту информацию со странички http://help.mail.ru/mail-help/mailer/popsmtp

Далее, чтобы послать письмо, нам понадобится само письмо, оно создается с помощью объекта ИнтернетПочтовоеСообщение. Свойства этого объекта довольно понятны интуитивно. Оговорюсь только о свойсве ОбратныйАдрес. Оно нам нужно в тех случаях, когда мы отправляем письмо от лица некой "служебной" учетной записи, а ответ получатель должен направить другому человеку. Проблема в том, что чтобы отправить письмо от лица того, куму нужно потом писать ответ, нам нужны его пароли. А это не всегда корректно хранить в системе полные учетные данные всех пользователей. Плюс иногда по политике безопасности пароли должны меняться с определенной периодичностью, а смена пароля на почтовом сервере без изменения его в базе приведет к отказу нашей учетной системы.

 ИсходящееПисьмо = Новый ИнтернетПочтовоеСообщение;
 ИсходящееПисьмо.Отправитель = "This email address is being protected from spambots. You need JavaScript enabled to view it.";
 ИсходящееПисьмо.Тема = "Отчет за I квартал";
 ИсходящееПисьмо.Получатели.Добавить(Объект.ПочтовыйАдрес);
 ИсходящееПисьмо.Тексты.Добавить("Пробное письмо");
 ИсходящееПисьмо.ОбратныйАдрес.Добавить("This email address is being protected from spambots. You need JavaScript enabled to view it.");

Многих пугает то, что Получатели и ОбратныйАдрес доступны только для чтения, но обратите внимание, что это коллекция и писать туда надо методами "Добавить()".

Ну и теперь приступаем к объекту ИнтернетПочта. Первым делом нам надо соединиться с сервером. Делается это методом Подключиться(...). Первый параметр у него - профиль, заполненный нами ранее. Второй параметр - протокол. Можно указывать IMAP и SMTP. По умолчанию SMTP, POP3 - не допустим, поэтому, если надо, указываем IMAP или ничего не указываем.

Тут отвлекусь и расскажу, зачем нам нужен IMAP. Большинство примеров в интернете - игнорируют его. Скажу сразу, что указав IMAP мы сможем пользоваться и SMTP. SMTP нам нужен, чтобы сказать серверу "отправь письмо". IMAP нужен нам, чтобы поработать с письмом на сервере. Если Вы отправите письмо через SMTP, то оно отправится адресату, но на сервере следов не останется. Вы не сможете потом зайти на почтовый сервер и увидеть там в папке "отправленные" письма, которые отправила 1С программно. Иногда это удобно, чтобы не засирать сервер, а иногда хочется иметь копии писем на сервере. Дело Ваше! В примере мы отправим письмо получателю и сохраним его в папке "отправленные". для этого мы пошлем письмо два раза: один раз через SMTP получателю, второй - IMAP себе на сервер. Причем по умолчанию IMAP работает с папкой "Входящие"/"Inbox", ему надо будет сказать, что сейчас мы пишем отправленное письмо.

 ИнтернетПочта = Новый ИнтернетПочта;
 Попытка
  Сообщить("Отправка почты.");
  ИнтернетПочта.Подключиться(ПрофильПочты,ПротоколИнтернетПочты.IMAP);
  ИнтернетПочта.ТекущийПочтовыйЯщик = "Отправленные";
  ИнтернетПочта.Послать(ИсходящееПисьмо,,ПротоколИнтернетПочты.IMAP);
  ИнтернетПочта.Послать(ИсходящееПисьмо,,ПротоколИнтернетПочты.SMTP);
  Сообщить("Ваше письмо отправлено!");
  ИнтернетПочта.Отключиться();
 Исключение
  // В случае ошибки при отправке
  Сообщить("Ошибка связи с почтовым сервером."+ОписаниеОшибки());
 КонецПопытки;

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

На сегодня все, спасибо

 

Авторизуйтесь пожалуйста