Вход | Регистрация


1С:Предприятие ::

Метки:

v7: Подключение к почте в семерке

Я
   Мисти
 
08.09.17 - 18:13
Написано так - 
    ЗагрузитьВнешнююКомпоненту("V7Plus.dll");
    Попытка
        Почта = СоздатьОбъект("AddIn.V7Mail");
        Почта.Подключиться();
Ругается так:

Ошибка подключения :
Почта.Подключиться();
{Документ.ЗаявкаПокупателя.Форма.Модуль(1460)}: Ошибка при выполнении метода объекта компоненты C:\Program Files (x86)\1Cv77\BIN\V7Plus.dll
 
 
   Мисти
 
1 - 08.09.17 - 18:16
с запрошенным действием не связана программа электронной почты - и еще вот так!
   Генератор
 
2 - 08.09.17 - 18:25
CDO.Message используй, а то еще со всякими ssl проблемы вылезут
   Мисти
 
3 - 08.09.17 - 18:26
а как это написать? в 8 у меня совсем доугие волшебные слова!
   Генератор
 
4 - 08.09.17 - 18:27
(3)  в гугл, там все понятно, я даже в 8 его использую
   Злопчинский
 
Ведущий
5 - 08.09.17 - 18:41
   Мисти
 
6 - 08.09.17 - 19:02
(5) Спасибо!
Только там тоже много всего не хватает
Отстутствует ВК (внешняя компонента)  <FormEX>, необходимая для работы программы!
ВК <FormEX> можно скачать здесь: http://www.dorex.ru/?projects&formex&download

Отстутствует обработка <ECDO> для отсылки почты, необходимая для работы программы!
Обработку <ECDO> можно скачать здесь: http://www.infostart.ru/projects/index.php?id=266
Обработку <ECDO> можно скачать здесь: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=81&lid=5747

Устраните возникшие ошибки и попытайтесь вновь!
   Генератор
 
7 - 08.09.17 - 19:03
написано же где можно скачать!
   Мисти
 
8 - 08.09.17 - 19:08
(4) А там - так
{Документ.ЗаявкаПокупателя.Форма.Модуль(1453)}: CDO.Message.1: Недопустимое значение конфигурации "SendUsing".
   Мисти
 
9 - 08.09.17 - 19:09
Это я всё поставлю себе, потом заказчикам...
Мне надо что-то более универсальное.
   Генератор
 
10 - 08.09.17 - 19:09
а главное не надо ничего скачивать, надо просто СоздатьОбъект("CDO.Message") и найти как им пользоваться
 
  Рекламное место пустует
   Злопчинский
 
Ведущий
11 - 08.09.17 - 19:12
(6) formex любой пойдёт
Взять можно на dorex.pro
   Генератор
 
12 - 08.09.17 - 19:13
   Злопчинский
 
Ведущий
13 - 08.09.17 - 19:14
(10) по ссылке что я привёл это и есть cdo в навороченной обертке
   Генератор
 
14 - 08.09.17 - 19:15
(13) но там еще куча обвязки, которую тс надо найти и зарегистрировать
   Мисти
 
15 - 08.09.17 - 19:16
(12) Спасибо!
   Злопчинский
 
Ведущий
16 - 08.09.17 - 21:14
(14) для клюшечника формекс де-факто стандарт.
   Злопчинский
 
Ведущий
17 - 08.09.17 - 21:15
(14) другая обвязка которая там есть - не является обязательной, и без неё работать будет
   Мисти
 
18 - 13.09.17 - 18:42
iMsg = CreateObject("CDO.Message"); 


  iConf =CreateObject("CDO.Configuration");

  iConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;

  iConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value ="smtp.mail.ru";

  iConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 10;

  iConf.Fields.Update();

  iMsg.Configuration = iConf;

  iMsg.To = "md@mail.ru";

  iMsg.From = "md@mail.ru";

  iMsg.Subject = "????";

  iMsg.TextBody = "????";

  iMsg.TextBodypart.charset="koi8-r";
  iMsg.Send();
   Мисти
 
19 - 13.09.17 - 18:43
А вот ругань -
iMsg.Send();
{Документ.ЗаявкаПокупателя.Форма.Модуль(1480)}: : Сервер отклонил один или несколько адресов получателей. Отклик сервера: 550 SMTP is available only with SSL or TLS connection enabled.

Что не так?
   VladZ
 
20 - 13.09.17 - 18:55
(19) Проблема вот тут указана ".. only with SSL or TLS connection". Хочу, говорит, быть владычицей морской! Упс.. Это из другого проекта. Говорит, что только SSL или TLS соединение могут быть. Читай, как соединиться по SSL.
   Мисти
 
21 - 13.09.17 - 19:08
{Документ.ЗаявкаПокупателя.Форма.Модуль(1534)}: : Не удалось отправить сообщение на SMTP-сервер. Код ошибки транспорта: 0x80040217. Отклик сервера: not available - Теперь так
   Базис
 
22 - 13.09.17 - 19:11
Глянь свойства конфигурации почты, это где-то в панели управления. Если я не путаю под вечер. Ну и загугли правильные настройки CDO под свой почтовый сервер. И завязывай с мейлру, оно глючное.
   Мисти
 
23 - 13.09.17 - 19:20
А вот пароль я нигде не задала, вроде?
   Мисти
 
24 - 13.09.17 - 19:21
Пароль не помог
   Мисти
 
25 - 14.09.17 - 13:40
loConfig = CreateObject("CDO.Configuration");
loCdoMessage = CreateObject("CDO.Message");
Этот фокус заработал!
Простой вопрос остался, какое там волшебное слово, чтобы прицепить вложение?
   Мисти
 
26 - 14.09.17 - 17:50
ау?
   Мисти
 
27 - 14.09.17 - 18:06
А еще вопрос. В списке отправленных почему-то не появляется! Отправлять, что ли на свой адрес копию?
   Господин ПЖ
 
28 - 14.09.17 - 18:07
(6) клюшки такие клюшки...

каша из топора
   Мисти
 
29 - 14.09.17 - 18:08
loCdoMessage.AddAttachment (файл+ ".XLS"); - нашла.
Файл при этом приходит, нужного размера, но не открывается!
   Мисти
 
30 - 14.09.17 - 18:10
Файл = Путь +"\"+ НаименованиеФайла;
            
            Если ФС.СуществуетФайл(Файл+".xls")=1 Тогда
                Если Вопрос("Такой документ уже существует, заменить его ?",4)=6  Тогда
                    ИсхТабл.Записать(Файл,"XLS");
                КонецЕсли;
            Иначе
                ИсхТабл.Записать(Файл,"XLS");
                //ИмяФайла = Файл+".xls"; 

                //Комментарий = Комментарий + "_Сохранен:" + ИмяФайла;

            КонецЕсли;   
        КонецЕсли;
    КонецЕсли;
    //>Федоров

    Возврат(Файл);
   Мисти
 
31 - 14.09.17 - 19:10
РПаЎ±б - Вот такая штука внутри пришедшего файла.
   Мисти
 
32 - 14.09.17 - 19:12
HTMLBody - а вот это зачем?
   Fram
 
33 - 14.09.17 - 19:14
(30) ИсхТабл - это ТбаличныйДокумент полагаю? что говорит синтак-помощник насчет параметров метода Записать?
 
  Рекламное место пустует
   Fram
 
34 - 14.09.17 - 19:15
(32) а интуиция и базовые знания англ языка вам что подсказывают?
   Мисти
 
35 - 14.09.17 - 19:16
Во дела!
Не хватало строчки - loCdoMessage.textbody = "";
   Мисти
 
36 - 14.09.17 - 19:16
Копию просто в адресе через запятую сделала (хотя было бы симпатично указать отдельно)
   Мисти
 
37 - 14.09.17 - 19:17
(34) Всё записывается! Теперь еще и прислалось правильно.
   Fram
 
38 - 14.09.17 - 19:20
(33) снимаю вопрос. это ж 7ка
   Злопчинский
 
Ведущий
39 - 14.09.17 - 19:55
(27) с списке отправленных ГДЕ?
   Злопчинский
 
Ведущий
40 - 14.09.17 - 19:55
(29) я предлагал ссылку....
   Злопчинский
 
Ведущий
41 - 14.09.17 - 19:57
(36) используй поле сс  или bcc
   Мисти
 
42 - 14.09.17 - 19:57
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver";).           Value = "smtp.mail.ru";

с почты ...mail уходило.
Поменяла адрес на почту Ya
Ругается!
loCdoMessage.Send();
{Документ.ЗаявкаПокупателя.Форма.Модуль(1482)}: : Не удалось отправить сообщение на SMTP-сервер. Код ошибки транспорта: 0x80040217. Отклик сервера: not available
   Мисти
 
43 - 14.09.17 - 19:58
написать там "smtp.yandex.ru"?
   Злопчинский
 
Ведущий
44 - 14.09.17 - 19:58
(28)
- Давид, тебя убили!
- Да ты шо? Насмерть?!
   Злопчинский
 
Ведущий
45 - 14.09.17 - 19:59
Клюшки пережили и 8.0 и 8.1 и 8.3 и переживут и 8.3
   Мисти
 
46 - 14.09.17 - 20:00
loCdoMessage.Send();
{Документ.ЗаявкаПокупателя.Форма.Модуль(1482)}: : Сервер отклонил адрес отправителя. Отклик сервера: 553 5.7.1 Sender address rejected: not owned by auth user.
   Злопчинский
 
Ведущий
47 - 14.09.17 - 20:01
(43)  открой оутлок и настрой почту там, добейся отправки из оутлука, потом перенести настройки на цдо
Можно ещё на яндекспочте посмотреть настройки для почтовых агентов и вписатьт в цдо
   Мисти
 
48 - 14.09.17 - 20:07
у меня ваще оутлука нет. Никогда им не пользовалась.
   Мисти
 
49 - 14.09.17 - 20:11
На яндекс-почте где это можно увидеть?
 
 
   Злопчинский
 
Ведущий
50 - 14.09.17 - 20:15
(49) в хелпах по настройке почты для почтовых программ
   Злопчинский
 
Ведущий
51 - 14.09.17 - 20:16
(48) да по барабану, хот ЗеБат, хоть Тандеберд
   Мисти
 
52 - 14.09.17 - 20:21
https://yandex.ru/support/ - Дайте уже ссылку! Не могу найти ничего подходящего.
Для майл добрый человек прислал
https://help.mail.ru/mail-help/mailer/popsmtp
   Мисти
 
53 - 14.09.17 - 20:25
   Fram
 
54 - 14.09.17 - 20:25
У автора иммунитет к пользованию поисковиками что ли?
   Мисти
 
55 - 14.09.17 - 20:27
ага!
   Злопчинский
 
Ведущий
56 - 14.09.17 - 20:28
(52) я далеко и инет елееле
   Лефмихалыч
 
57 - 14.09.17 - 21:21
(46) значит работает твоя каша из топора. ЭТо ответ от smtp-сервера. Проблема в том, что смтп требует авторизации и переданные почтовику логин-пароль не соответсвуют тому адресу, который в поле From в письме.

Надо перестать трогать внешние все эти компоненты и сосредоточиться на коде, которым отправка производится - там не те логин-пароль написаны
   vadim777
 
58 - 14.09.17 - 22:12
Работающая процедура для отправки писем с вложениями:
Процедура глОтправить(АдресПолучателя,Вложения="",Тема="",Текст="")

    oMessage = CreateObject("CDO.Message");
    oMessage.To = СокрЛП(АдресПолучателя);
    oMessage.From = СокрЛП(АдресОтправителя);
    oMessage.Subject = Тема;
    oMessage.TextBody = Текст;
    Если ТипЗначения(Вложения)=2 Тогда
        Если ПустоеЗначение(Вложения)=0 Тогда
            oMessage.AddAttachment(Вложения);
        КонецЕсли;
    ИначеЕсли ТипЗначения(Вложения)=100 Тогда
        Для Сч=1 По Вложения.РазмерСписка() Цикл                            
            oMessage.AddAttachment(Вложения.ПолучитьЗначение(Сч));
        КонецЦикла;
    КонецЕсли;
    oMessage.TextBodyPart.Charset = "windows-1251";
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").value = 2;
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").value = СокрЛП(СерверОтправкиПочты);
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").value=1;
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").value = СокрЛП(Логин);
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").value = СокрЛП(Пароль);
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").value = 465;
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").value = 1;
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").value = 60;
    oMessage.Configuration.Fields.Update();
    Попытка
        oMessage.Send();
        Текст = Шаблон("[СокрЛП(Тема)] на [СокрЛП(АдресПолучателя)] отправлена!");
        Сообщить(Текст);
    Исключение
        Текст = Шаблон("Не удалось отправить сообщение [СокрЛП(Тема)] на [СокрЛП(АдресПолучателя)]!");
        Сообщить(Текст);
        Сообщить(ОписаниеОшибки(), "!");
    КонецПопытки;
КонецПроцедуры

Для получения, распаковки и удаления писем на сервере почты:

// ===============================

Функция ЗагрузитьDialMail()
    Если ЗагрузитьВнешнююКомпоненту("DialMail.dll")=0 Тогда
        Сообщить("Не удалось обнаружить компоненту DialMail.dll!");
        Возврат 0;
    КонецЕсли;
    Возврат 1;
КонецФункции

// ===============================

Функция УстановитьPOP3()
    Если ЗагрузитьDialMail() = 0 Тогда
        Возврат 0;
    КонецЕсли;
    Попытка
        POP3 = СоздатьОбъект("AddIn.POP3");
        POP3.ВестиЛогФайл = 1;
        POP3.ИмяЛогФайла = ИмяЛогФайла;
        // Сообщить(POP3.ВерсияОбъектаСтр);

    Исключение
        Сообщить("Не удалось создать объект POP3 из компоненты DialMail.dll!");
        Возврат 0;
    КонецПопытки;
    Возврат 1;
КонецФункции

// ===============================

Функция УстановитьSMTP()
    Если ЗагрузитьDialMail() = 0 Тогда
        Возврат 0;
    КонецЕсли;
    Попытка
        SMTP = СоздатьОбъект("AddIn.SMTP");
        SMTP.ВестиЛогФайл = 1;
        SMTP.ИмяЛогФайла = ИмяЛогФайла;
        // Сообщить(SMTP.ВерсияОбъектаСтр);

    Исключение
        Сообщить("Не удалось создать объект SMTP из компоненты DialMail.dll!");
        Возврат 0;
    КонецПопытки;
    Возврат 1;
КонецФункции

// ===============================

Функция ПодключитьсяКPop3()
    Если УстановитьPOP3() = 0 Тогда
        Возврат 0;
    КонецЕсли;
    POP3.РабочийКаталог=СокрЛП(ВременныйКаталог);
    Получили=0;
    POP3.ИспользоватьПрокси=0;
    POP3.ИспользоватьSSL=1;
    POP3.ИспользоватьTSL=1;
    POP3.ЛокальныйИнтерфейс = "";
    Если POP3.Подключиться(СерверПриемаПочты,"995",Логин,Пароль,1,1)=0 Тогда
        Предупреждение("Не смогли подключиться к POP3-серверу");
        Возврат 0;
    КонецЕсли;
    ВсегоПисемНаСервере=POP3.КоличествоПисем;
    ОбщаяДлинаПолучение=Число(POP3.ОбщийРазмерПисем);
    Если ВсегоПисемНаСервере=0 Тогда
        СообщениеПолучение="Нет Писем";
        Возврат -1;
    КонецЕсли;
    Возврат 1;
КонецФункции

// ===============================

Процедура глПолучить()
    Если ПодключитьсяКPop3() <> 1 Тогда
        Возврат;
    КонецЕсли;
    тз.УдалитьСтроки();
    POP3.ОчиститьРабочийКаталог();//! Временный каталог

    Получили=0;
    ИндикПолучение=Индик;
    Форма.Обновить(0);
    Состояние("Получаем сообщения для офиса");
    Для нс=1 по POP3.КоличествоПисем Цикл
        POP3.ПолучитьЗаголовокПисьма(нс);
        Состояние(""+СокрЛП(POP3.ОтКого)+" "+СокрЛП(POP3.ДатаСоздания)+" "+POP3.КоличествоПрисоединенныхФайлов);
        тз.НоваяСтрока();
        тз.НС=нс;
        тз.EMail=POP3.ОтКого;
        тз.Дата=POP3.ДатаСоздания;
        Если POP3.ПолучитьПисьмо(нс,0,0) <> 1 Тогда
            Текст = Шаблон("Ошибка получения письма № [нс] от '[тз.EMail]'");
            Сообщить(Текст,"!!!");
            Продолжить;
        КонецЕсли;
        х=POP3.ПолученоВБайтах/ОбщаяДлинаПолучение*СтрДлина(Индик);
        ИндикПолучение=Лев(Индик,СтрДлина(Индик)-х);
        Если POP3.РаспаковатьПисьмо() <> 1 Тогда
            Если ПустоеЗначение(POP3.ТекущееПисьмо) = 1 Тогда
                Текст = Шаблон("Ошибка распаковки письма № [нс] от '[тз.EMail]'");
            Иначе
                Текст = Шаблон("Ошибка распаковки письма № [нс] '[POP3.ТекущееПисьмо]'");
            КонецЕсли;
            Сообщить(Текст, "!!!");
            Продолжить;
        КонецЕсли;
        Для нф=1 по POP3.КоличествоПрисоединенныхФайлов Цикл
            тз.Вложение = СокрЛП(тз.Вложение)+POP3.ПолучитьИмяПрисоединенногоФайла(нф);
        КонецЦикла;
        Форма.Обновить(0);
    КонецЦикла;
    Состояние("Получение сообщений завершено!");
    POP3.Отключиться();
    ИндикПолучение="";
КонецПроцедуры

// ===============================

Процедура СохранитьДанные()
    Если Вопрос("Сохранить все данные?",4)<>6 Тогда
        Возврат;
    КонецЕсли;
    ВсегоПисемНаКомпьютере = POP3.КоличествоПисемВРабочемКаталоге;
    Если тз.КоличествоСтрок() <> ВсегоПисемНаКомпьютере Тогда
        Текст = "Количество писем в рабочем каталоге не равно количеству полученных писем: ";
        Текст = Текст + Шаблон("[ВсегоПисемНаКомпьютере] <> [тз.КоличествоСтрок()]")+РазделительСтрок;
        Текст = Текст + "Произойдет повторное получение писем!";
        Предупреждение(Текст);
        глПолучить();
        ВсегоПисемНаКомпьютере = POP3.КоличествоПисемВРабочемКаталоге;
    КонецЕсли;
    Для нс=1 По ВсегоПисемНаКомпьютере Цикл
        Если POP3.РаспаковатьПисьмо(ВсегоПисемНаКомпьютере-нс+1) <> 1 Тогда
            Текст = Шаблон("Ошибка распаковки письма № [нс] '[POP3.ТекущееПисьмо]'");
            Сообщить(Текст, "!!!");
            Продолжить;
        КонецЕсли;
        Для нф=1 по POP3.КоличествоПрисоединенныхФайлов Цикл
            ИмяФайла = POP3.ПолучитьИмяПрисоединенногоФайла(нф);
            POP3.СохранитьПрисоединенныйФайл(нф,КаталогВложений,ИмяФайла);
            КодОтправителя= СокрЛП(Лев(ИмяФайла,Найти(ИмяФайла,"_")-1));
            Если ФС.СуществуетФайл(КаталогВложений+КодОтправителя)=0 Тогда
                ФС.СоздатьКаталог(КаталогВложений+КодОтправителя);
            КонецЕсли;
            КатОтправителя = КаталогВложений+КодОтправителя;
            ЗапуститьПриложение(КаталогВложений+"RAR32.exe e -y "+КаталогВложений+ИмяФайла+" "+КатОтправителя+"\");
        КонецЦикла;
        POP3.УдалитьПисьмоИзРабочегоКаталога();
    КонецЦикла;
    POP3.Отключиться();
    Предупреждение("Сохранение данных завершено!");
КонецПроцедуры

// ===============================

Процедура УдалитьСообщение()
    Если ПодключитьсяКPop3() <> 1 Тогда
        Возврат;
    КонецЕсли;
    Если Вопрос("Удалить сообщение №"+СокрЛП(тз.нс)+" от """+СокрЛП(тз.EMail)+""" за "+тз.Дата+"?",4)<>6 Тогда
        Возврат;
    КонецЕсли;
    Если POP3.ПолучитьПисьмо(тз.нс)=1 Тогда
        POP3.ПолучитьЗаголовокПисьма(тз.нс);
        Если (СокрЛП(POP3.ОтКого)=СокрЛП(тз.EMail))и(Дата(POP3.ДатаСоздания)=тз.Дата) Тогда
            Рез = POP3.УдалитьПисьмо(тз.нс);
            Если Рез<>1 Тогда
                Текст = Шаблон("Ошибка удаления письма: [POP3.ПоследняяОшибка]");
                Сообщить(Текст,"!!!");
            КонецЕсли;
            тз.УдалитьСтроку(тз.нс);
            // Перенумеруем строки тз

            нс=1;
            тз.ВыбратьСтроки(); 
            Пока тз.получитьстроку()=1 Цикл
                тз.нс=нс;
                нс=нс+1;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
    POP3.Отключиться();
КонецПроцедуры
Для обеспечения работы на прием используется stunnel 5.36



Список тем форума
Рекламное место пустует  
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует