Отправка по электронной почте .

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 он даже его и не создаст, соответственно и отправка не пашет.(отправляет пустое письмо без вложений).
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. artik1994 29.03.17 12:52 Сейчас в теме
(1)попробуйте прописать путь, указав изначально имяСервера/home/ExchangeLocal/Акт выполненных работ.PDF
5. user606894_schana1w3 29.03.17 13:00 Сейчас в теме
(2)а как это узнать то?) вот пришел я к дяде васе у него есть сервер 1с, он со своего пк подключается через терминал на сервер и работает там.(я на сервере создал папочку(пока называется новая папка, на диске С)). путь получается C:/Новая папка. Но он в ней ничего не создает.
6. artik1994 29.03.17 14:25 Сейчас в теме
(5)это уже с админом вам нужно решать, который вносит коррективы на терминальном сервере
3. necropunk 9 29.03.17 12:57 Сейчас в теме
А не вариант просто сохранять документ в КаталогВременныхФайлов()?
4. user606894_schana1w3 29.03.17 12:58 Сейчас в теме
(3)нужно в определенной папке хранить то что отправили.
7. v3rter 29.03.17 15:54 Сейчас в теме
Можно попробовать прием из "Как Получить Атрибуты файла" https://helpf.pro/faq/view/404.html
 ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 
ДиалогОткрытияФайла.Выбрать(); 

Файл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла); 
Текст = "Файл: " + Файл.Имя; 
Текст = Текст + Символы.ПС + "Расширение: " + Файл.Расширение; 
Текст = Текст + Символы.ПС + "Полное имя: " + Файл.ПолноеИмя; 
Текст = Текст + Символы.ПС + "Путь: " + Файл.Путь;
но не пробовал &НаСервере.

Если нужно накапливать в папке все отправляемые файлы, то можно так:

ИмяФайла = "/home/ExchangeLocal/Акт выполненных работ "+Формат(ТекущаяДата(), "ггггММддЧЧммсс")+" "+Прав(ПолучитьИмяВременногоФайла("") ,7)+".PDF";
8. user606894_schana1w3 29.03.17 16:02 Сейчас в теме
(7) Да, спасибо, добавил)
9. user606894_schana1w3 29.03.17 16:41 Сейчас в теме
(7)как получить атрибуты файла, ну наверное чтобы их получать этот файл должен быть, а он не создается, скорее всего прав на запись нет, кароче сис админа жду, спрошу.)
10. v3rter 29.03.17 16:48 Сейчас в теме
У меня смутное подозрение, что сервер 1С - линуксовый. Если да, и нужен доступ к этим файлам по сети - то это точно к админу.
11. user606894_schana1w3 31.03.17 12:17 Сейчас в теме
Ну вообщем поговорил я с ним, сервер файловый.(2003)(ну как я понял)
Попробовал процедуры выполнять на клиенте и сдвинулся с мертвой точки.
Файлы он создавать стал, но не получается отправить.
Стопит на моменте
Почта.Послать(Письмо);
с ошибкой -
Подключенено
Не удалось подключиться к серверу
{Обработка.ФормированиеРеализацииУслугИСчетовФактурСОтправкойПоЭлектрон­нойПочте.Форма.УправляемаяФорма.Форма(2962)}: Ошибка при вызове метода контекста (Послать): Неверный синтаксис команды. Возможно ошибка в написании почтового адреса (SMTP error code 501)
Соединение завершено

В чем прикол, тестил я на нашем сервере(линукс) там эта процедура выполнялась на сервере и небыло проблем.
Как бы...шибки в написании почтового адреса быть не может...)) Куда рыть как думаете?)
17. ImHunter 315 12.04.17 09:56 Сейчас в теме
(11) А почему ошибки в адресе не может быть?
Вполне себе в [й.ЭлектроннаяПочтаКонтрагента] какую-нить запяшутку в конце могут приписать.
18. user606894_schana1w3 12.04.17 10:10 Сейчас в теме
(17)это рабочий код, там даже если в адресе стоит тупо - ,, он все равно отправит.
На этапе отладки я пока это закомментировал Письмо.Получатели.Добавить(й.ЭлектроннаяПочтаКонтрагента);
и написал напрямую Письмо.Получатели.Добавить(123@mail.ru);
Вся проблема в сервере наверное, у нас стоит линукс( этот код под ним работает, процедуры вызываются на сервере ) никаких нареканий, все отправляет.
У других сервер файловый(процедуры на сервере там не проходят, пишу на клиенте), когда она выполнялась на сервере там ничего не создавалось, он даже путь к папке куда сохранялись файлы не видел, и в результате выходит ошибка 501(вероятно), точку ставил, он прерывает на этапе
Почта.Подключиться(Профиль);
Сообщить("Подключенено");
Почта.Послать(Письмо); - именно на этапе послать письмо, тоесть к профилю он подключается, создает письмо, кидает файлы во вложения и на этапе послать, все валится.
12. user606894_schana1w3 31.03.17 12:47 Сейчас в теме
у меня догадка в том что у него не получается эти файлы взять, но посмотрев через отладчик все норм. возможно посылать на клиенте нельзя?
13. user606894_schana1w3 10.04.17 09:24 Сейчас в теме
Обрывается на этапе отправки, подключается к профилю и выдает ошибку.
{Обработка.ФормированиеРеализацииУслугИСчетовФактурСОтправкойПоЭлектрон­­нойПочте.Форма.УправляемаяФорма.Форма(2962)}: Ошибка при вызове метода контекста (Послать): Неверный синтаксис команды. Возможно ошибка в написании почтового адреса (SMTP error code 501)
Соединение завершено
14. v3rter 10.04.17 13:10 Сейчас в теме
(13)
SMTP error code 501

Платформа случайно не 8.2?
16. user606894_schana1w3 12.04.17 09:42 Сейчас в теме
15. user606894_schana1w3 10.04.17 14:29 Сейчас в теме
Посмотрю, отпишусь. А есть разница?
19. user606894_schana1w3 12.04.17 10:11 Сейчас в теме
Может быть есть какие-то другие варианты отправить, или все дело в ихнем сервере?
20. ImHunter 315 12.04.17 10:50 Сейчас в теме
А без вложения - что произойдет?
21. user606894_schana1w3 12.04.17 10:59 Сейчас в теме
Не вложениях дело то)) он послать не может, просто письмо послать.) если тупо зайти и ручками все сделать, допустим в яндексе, создаем письмо, вводим адрес кому отправить и жмем послать, на этом этапе в теории он выдает ошибку.)
22. v3rter 12.04.17 11:52 Сейчас в теме
В настройках ящика на сервере Яндекса разрешен протокол pop? (web-интерфейс - ⚙ (шестеренка) - ...Прочие - Почтовые программы - Разрешить доступ к почтовому ящику с помощью почтовых клиентов - ☑ С сервера pop.yandex.ru по протоколу POP3)? Или может попробовать старый добрый stunnel?
23. user606894_schana1w3 12.04.17 16:03 Сейчас в теме
может быть, я не через яндекс отправляю, майл. я яндекс для примера привел.)
24. user606894_schana1w3 09.10.17 15:20 Сейчас в теме
А косяк то был
    Письмо.Тема = й.Документ;
    Письмо.Отправитель = объект.организация;
    Письмо.ИмяОтправителя = объект.Организация;
    Письмо.Получатели.Добавить(й.ЭлектроннаяПочтаКонтрагента);
      

Объект. организация это не хрень123@mail.ru, а просто Хрень. Видимо когда код переносил и дописывал другую шляпу, что-то скопировал не так.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот