1.
user606894_schana1w3
29.03.17 12:31 Сейчас в теме
Здравствуйте, подскажите пожалуйста как лучше сделать или может быть чего-то не хватает. Конфигурация УТ 10.3
Есть обработка (ФормированиеРеализацииУслугИСчетовФактурСОтправкойПоЭлектроннойПочте). - самописная.(см. рисунок)
Работает как - выбираем с какой даты выгружать документы нужной нам организации, в данном случае есть 6 документов, нажимаем на кнопочку отправки по эл. почте(выделена красным прямоугольником(см. вложение)) и отсылает контрагенту по указанной у него эл. почте.
Вот код:
у кнопки
Процедура СоздатьФайл()
// Вставить содержимое обработчика.
Для каждого й из Объект.Документы Цикл
Если Не ЗначениеЗаполнено(й.ЭлектроннаяПочтаКонтрагента) Тогда
Продолжить;
КонецЕсли;
МассивНакладных = Новый Массив;
МассивНакладных.Добавить(й.Документ);
ОбъектыПечати = Новый СписокЗначений;
ТабДок = ПечатьАктов(МассивНакладных, ОбъектыПечати, ИСТИНА, Истина);
ИмяФайла = "/home/ExchangeLocal/Акт выполненных работ.PDF";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Если ЗначениеЗаполнено(й.Счет) Тогда
МассивНакладных = Новый Массив;
МассивНакладных.Добавить(й.Счет);
ТабСчет = ПечатьСчетов(МассивНакладных, ОбъектыПечати);
ИмяФайла1 = "/home/ExchangeLocal/Счет на оплату.PDF";
ТабСчет.Записать(ИмяФайла1, ТипФайлаТабличногоДокумента.PDF);
ИначеЕсли ЗначениеЗаполнено(й.СчетФактура) Тогда
МассивНакладных = Новый Массив;
МассивНакладных.Добавить(й.СчетФактура);
ТабСчет = ПечатьСчетовФактур(МассивНакладных, ОбъектыПечати);
ИмяФайла2 = "/home/ExchangeLocal/Счет-фактура.PDF";
ТабСчет.Записать(ИмяФайла2, ТипФайлаТабличногоДокумента.PDF);
КонецЕсли;
Если ЗначениеЗаполнено(й.Претензия) Тогда
МассивНакладных = Новый Массив;
МассивНакладных.Добавить(й.Претензия);
ТабПретензия = ПечатьПретензий(МассивНакладных, ОбъектыПечати);
ИмяФайла3 = "/home/ExchangeLocal/Претензия.PDF";
ТабПретензия.Записать(ИмяФайла3, ТипФайлаТабличногоДокумента.PDF);
КонецЕсли;
КонецЦикла;
УстановитьСоединение(ИмяФайла,ИмяФайла1,ИмяФайла2,ИмяФайла3);
КонецПроцедуры
Показать
ну и собственно отправка
//Отправкапоимейлу
Процедура УстановитьСоединение(ИмяФайла,ИмяФайла1,ИмяФайла2,ИмяФайла3)
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.АдресСервераPOP3 = "pop.mail.ru";
Профиль.ПортPOP3 = 995;
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "123@mail.ru";
Профиль.Пароль = "йцукен";
Профиль.ПользовательSMTP = "123@mail.ru";
Профиль.ПарольSMTP = "йцукен";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ИспользоватьSSLPOP3 = Истина;
Профиль.ИспользоватьSSLSMTP = Истина;
Почта = Новый ИнтернетПочта;
// Создадим почтовое сообщение
Для каждого й из объект.Документы Цикл
Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо.Вложения.Добавить(ИмяФайла);
Текст = Письмо.Вложения.Добавить(ИмяФайла1);
Попытка
Исключение Текст = Письмо.Вложения.Добавить(ИмяФайла2);
КонецПопытки;
Текст = Письмо.Вложения.Добавить(ИмяФайла3);
// Текст.ИмяФайла = ТипФайлаТабличногоДокумента.PDF;
//Письмо.Тема = "Тест";
Письмо.Тема = й.Документ;
Письмо.Отправитель = объект.организация;
Письмо.ИмяОтправителя = объект.Организация;
Письмо.Получатели.Добавить(й.ЭлектроннаяПочтаКонтрагента);
//Письмо.Получатели.Добавить("123@mail.ru");
Попытка
Почта.Подключиться(Профиль);
Сообщить("Подключенено");
Почта.Послать(Письмо);
Сообщить("Письма отправлены");
Исключение
Сообщить("Не удалось подключиться к серверу");
Сообщить(ОписаниеОшибки());
КонецПопытки;
Почта.Отключиться();
Сообщить("Соединение завершено");
КонецЦикла;
КонецПроцедуры
Показать
Так то все работает. Но есть проблема. Не могу понять как правильно прописывать путь к папке.
/home/ExchangeLocal/Акт выполненных работ.PDF
этот вариант создает в папке екчейнч на сервере наш акт и все зашибись, отправляет. Сис. админ пришел чета там в cmd прописал и все, бывает он очень "часто" и вот уже месяц не пойму как этот путь узнать.)
в случае если я размещу его на лок. машине, он его создает но при отправке не видит.
Вопрос такой, как можно узнать полный путь к папке на сервере? через командную строку мб(что-то там прописать).
Так как если прописать что-то типа C:/Новая папка/Акт выполненных работ. PDF он даже его и не создаст, соответственно и отправка не пашет.(отправляет пустое письмо без вложений).
5.
user606894_schana1w3
29.03.17 13:00 Сейчас в теме
(2)а как это узнать то?) вот пришел я к дяде васе у него есть сервер 1с, он со своего пк подключается через терминал на сервер и работает там.(я на сервере создал папочку(пока называется новая папка, на диске С)). путь получается C:/Новая папка. Но он в ней ничего не создает.
9.
user606894_schana1w3
29.03.17 16:41 Сейчас в теме
(7)как получить атрибуты файла, ну наверное чтобы их получать этот файл должен быть, а он не создается, скорее всего прав на запись нет, кароче сис админа жду, спрошу.)
11.
user606894_schana1w3
31.03.17 12:17 Сейчас в теме
Ну вообщем поговорил я с ним, сервер файловый.(2003)(ну как я понял)
Попробовал процедуры выполнять на клиенте и сдвинулся с мертвой точки.
Файлы он создавать стал, но не получается отправить.
Стопит на моменте
Почта.Послать(Письмо);
с ошибкой -
Подключенено
Не удалось подключиться к серверу
{Обработка.ФормированиеРеализацииУслугИСчетовФактурСОтправкойПоЭлектроннойПочте.Форма.УправляемаяФорма.Форма(2962)}: Ошибка при вызове метода контекста (Послать): Неверный синтаксис команды. Возможно ошибка в написании почтового адреса (SMTP error code 501)
Соединение завершено
В чем прикол, тестил я на нашем сервере(линукс) там эта процедура выполнялась на сервере и небыло проблем.
Как бы...шибки в написании почтового адреса быть не может...)) Куда рыть как думаете?)
18.
user606894_schana1w3
12.04.17 10:10 Сейчас в теме
(17)это рабочий код, там даже если в адресе стоит тупо - ,, он все равно отправит.
На этапе отладки я пока это закомментировал Письмо.Получатели.Добавить(й.ЭлектроннаяПочтаКонтрагента);
и написал напрямую Письмо.Получатели.Добавить(123@mail.ru);
Вся проблема в сервере наверное, у нас стоит линукс( этот код под ним работает, процедуры вызываются на сервере ) никаких нареканий, все отправляет.
У других сервер файловый(процедуры на сервере там не проходят, пишу на клиенте), когда она выполнялась на сервере там ничего не создавалось, он даже путь к папке куда сохранялись файлы не видел, и в результате выходит ошибка 501(вероятно), точку ставил, он прерывает на этапе
Почта.Подключиться(Профиль);
Сообщить("Подключенено");
Почта.Послать(Письмо); - именно на этапе послать письмо, тоесть к профилю он подключается, создает письмо, кидает файлы во вложения и на этапе послать, все валится.
13.
user606894_schana1w3
10.04.17 09:24 Сейчас в теме
Обрывается на этапе отправки, подключается к профилю и выдает ошибку.
{Обработка.ФормированиеРеализацииУслугИСчетовФактурСОтправкойПоЭлектроннойПочте.Форма.УправляемаяФорма.Форма(2962)}: Ошибка при вызове метода контекста (Послать): Неверный синтаксис команды. Возможно ошибка в написании почтового адреса (SMTP error code 501)
Соединение завершено
21.
user606894_schana1w3
12.04.17 10:59 Сейчас в теме
Не вложениях дело то)) он послать не может, просто письмо послать.) если тупо зайти и ручками все сделать, допустим в яндексе, создаем письмо, вводим адрес кому отправить и жмем послать, на этом этапе в теории он выдает ошибку.)
В настройках ящика на сервере Яндекса разрешен протокол pop? (web-интерфейс - ⚙ (шестеренка) - ...Прочие - Почтовые программы - Разрешить доступ к почтовому ящику с помощью почтовых клиентов - ☑ С сервера pop.yandex.ru по протоколу POP3)? Или может попробовать старый добрый stunnel?