7.7 Отправка Почты

Тема в разделе "1C и всё что с ней связано", создана пользователем olga13, 20 мар 2013.

  1. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Добрый день! Вопрос по Rom-mail. Третьего дня без видимых причин перестала работать процедура получения почты через обработку ожидания. Вылетает на команде П.Подключиться("Прием"). Причем та же процедура, вызываемая через обычную обработку, прекрасно работает. В чем может быть причина?
     
  2. demetrius2003

    demetrius2003 Member

    Регистрация:
    20 окт 2010
    Сообщения:
    16
    Симпатии:
    0
    Вылетает и что-то сообщает? Дополнительная инфа есть? "Та же процедура выполняемая через обычную обработку..." Обычная это V7Mail из V7Plus что-ли? Может настройки SMTP сервера поменялись а Вы и не знаете? Вообще с данного компа почта через этот SMTP сервер уходит? Может брандмауэр пакеты режет? CRC у самой Rom-mail.dll совпадает с оригиналом, а то может она того... В том то и проблема, что причины видимой нет, но мы то знаем, что она есть. Более того. их может быть очень много. Надо всего-лишь начать их перебирать.
     
  3. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Код ( (Unknown Language)):
        П = СоздатьОбъект("AddIn.AddInMail");
    П.СерверПриема = СокрЛП(Константа.СерверПриема);
    П.ПортПриема = "110";
    П.Логин = СокрЛП(Константа.Логин);
    П.Пароль = СокрЛП(Константа.Пароль);
    П.ОставлятьНаСервере = 1;
    П.ПоказыватьПредупреждения = 0;
    П.КаталогВложений = СокрЛП(Константа.КаталогПочтыВходящей);
    П.Таймаут = 15;
    //подключение
    Если П.Подключиться("Прием") = 0 Тогда
    Сообщить("Не удалось подключиться к почтовому серверу для получения почты","!");
    Возврат;
    КонецЕсли;
    Это кусок глобального модуля. Его вызывает ОбработкаОжидания() и обработка "ПолучениеПочты", в которой есть на форме кнопка "Получение почты". Так вот, если открыть обработку, нажать кнопку - все отлично подключается и получается. Если срабатывает ОбработкаОжидания() - то П.Подключиться("Прием") = 0, дальше Возврат. SMTP-сервер работает нормально, письма уходят. Но отправка осуществляется только в ручном режиме, через обработку "ОтправкаПочты".
     
  4. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Опытным путем удалось установить, что сбой не зависит от места вызова процедуры. В обоих случаях процедура то работает, то не работает. Насколько я понимаю, можно сделать вывод, что дело не в 1С. Через TheBat все работает, через браузер тоже. Где же тогда копать?
     
  5. demetrius2003

    demetrius2003 Member

    Регистрация:
    20 окт 2010
    Сообщения:
    16
    Симпатии:
    0
    Знаете, у меня почтовая программа IncrediMail. В ней четыре учётки. Так вот учётка на rambler регулярно сообщает, что, мол, ошибка подключения. Приходится по несколько раз давить на кнопку "Get mail". прежде чем соединение установится нормально. Кто его знает, что там у них не так. Дайте возможность программе подключиться десяток-другой раз прежде чем возвращаться ни с чем. Как-то вот так:
    Код ( (Unknown Language)):
        //подключение
    тСчетчик = 0;
    тСостояние = П.Подключиться("Прием");
    Пока тСостояние = 0 Цикл
    Если (тСостояние = 0) И (тСчетчик > Константа.МаксимальноеКоличествоПопытокПодключения) Тогда
    Сообщить("Не удалось подключиться к почтовому серверу для получения почты","!");
    Возврат;
    КонецЕсли;
    тСостояние = П.Подключиться("Прием");
    тСчетчик = тСчетчик + 1;
    КонецЦикла;
     
  6. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    П.Таймаут = 15;

    попробуйте увеличить.
     
  7. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0

    Увеличила до 20000, не помогло.
     
  8. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Попробовала, результат тот же. Покрутила обработку в цикле. Выявилась странная закономерность - всегда 5 успешных попыток, после них 600-670 неудачных (если быть точным - в моем примере 600, 670, 660, 661). Но успешных всегда 5 подряд. Ерунда какая-то...
     
  9. demetrius2003

    demetrius2003 Member

    Регистрация:
    20 окт 2010
    Сообщения:
    16
    Симпатии:
    0
    Кхм. ОС какая? Нет ли в журнале сообщений событий типа "Достигнут предел безопасности для TCP/IP, налагаемый на количество попыток одновременных TCP-подключений."? "netstat -a" в момент отправки чего показывает? Проблема то скорее всего и не в 1С вовсе. Числа шибко "красивые", не находите? Признавайтесь! Грешите поди частенько? :) Вам бы ещё на virusinfo.info сходить. Ещё бы одну вероятную проблему откинуть. Начните с журналов сообщений и нетстата.
     
  10. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Действительно похоже на проблему самого инструментария. Или ОС или библиотека dll.
    Могу только провести аналогию: я сделал клиента в 8-ке на встроенных средствах. Так вот отправка успешно работает,
    но при небольшом количестве писем в сеансе (5-8). А при большем метод слетает и выдает ругательное сообщение (не помню).
    И причину фиг найдешь.
     
  11. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Я в свое время отказался и от ром-майл и от диал майл. Просто microsoft cdo. И никаких левых компонент.
     
  12. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Плюсую в пользу CDO!
     
  13. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Попробовала через CDO. Выдает ошибку:
    Na?aa? ioeeiiee iaei eee ianeieuei aa?ania iieo?aoaeae. Ioeeee na?aa?a: 501 syntax error

    Код ( (Unknown Language)):
        Попытка
    objMessage = Createobject("CDO.Message");
    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = АдресSMTPСервера;
    objMessage.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = НомерПортаSMTP;
    objMessage.Configuration.Fields.Item("urn:schemas:mailheader:Content-Type").Value = "text/plain; charset=windows-1251";
    objMessage.Subject = "Subject test";
    objMessage.From = Отправитель;
    objMessage.To = Получатель;
    iBp = objMessage.AddAttachment(ПутьВложения);
    iBp.Fields.Item("urn:schemas:mailheader:content-type").Value = "text/plain; name=" + iBp.FileName;
    iBp.Fields.Item("urn:schemas:mailheader:content-transfer-encoding").Value = "7bit";

    objMessage.Configuration.Fields.Update();
    objMessage.Fields.Update();
    iBp.Fields.Update();
    objMessage.Send(); //отправляем письмо

    Исключение
    Сообщить("Ошибка отправки сообщения!"); 
    Сообщить("Описание ошибки: " + ОписаниеОшибки());  
    КонецПопытки;
    Что опять не так?
    И как сделать, чтобы сообщение об ошибке выдавалось в нормальном виде, а не кракозябрами?
     
  14. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    У вас точно аутенификация на почте виндовая? зачем-то есть шифрование, а SSL нету.. Если не надо - отрубите.

    насчет кракозябр - сохраняйте лучше сообщение об ошибках в текстовый файл - там хоть кодировку поменять можно. А как от них совсем избавится - не подскажу, это давние танцы с бубном (по сути он пытается отобразить текст с использованием неправильной таблицы кодировки, ее можно подменить на правильную в реестре, но вот только этих таблиц кодировок там тьма)

    Я пользовал вот такое

    Код ( (Unknown Language)):
    Процедура ОтправкаПочтыВиндой(СерверОтправки,ИмяОтправителя,ПарольПользователя,АдресПолучателя,Файл = "",ТекстСообщения,Описание,Отправитель,ПользовательОС)

    oMessage = СоздатьОбъект("CDO.Message");
    //Кому

    oMessage.To = АдресПолучателя;
    //От кого

    oMessage.From = Отправитель;
    //Заголовок сообщения

    oMessage.Subject = Описание;
    //Текст сообщения (может быть текстовым или в формате HTML)

    oMessage.TextBody = ТекстСообщения;
    //Добавляем вложение

    oMessage.AddAttachment(Файл);
    //Если возникает проблема с кодировками (обычно, если в системе не установлен русский язык), то можно перед отправкой добавить строку //вида:

    oMessage.TextBodyPart.Charset = "windows-1251";
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").value = 2;

    //В этом параметре по умолчанию используется значение 1, которое означает использование каталог Pickup.

    //Указать почтовый сервер можно так:

    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").value = СерверОтправки;

    //Настройка режима аутентификации производится при помощи того же объекта CDO.Configuration:

    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").value=2;

    //Значение 1 этого параметра означает, что используется базовая аутентификация, значение 0 - без аутентификации (анонимно), значение 2

    //- аутентификация NTLM.

    //Имя пользователя и пароль можно передать точно так же:

    //oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").value = ИмяОТправителя;

    //oMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword").value = ПарольПользователя;


    //Иногда необходимо также определить использование специфического порта (отличного от 25), будет или нет использоваться SSL и время //тайм-аута:

    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").value = 25;

    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").value = 0;


    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").value = 60;


    //После любых изменений, вносимых в конфигурацию, изменения нужно обязательно сохранить:

    oMessage.Configuration.Fields.Update();
    //и только после вызывать метод Send():

    oMessage.Send();



    КонецПроцедуры
    брал вроде отсюда http://www.askit.ru/custom/vba_office/m13/13_08_cdo_vba.htm
     
  15. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Спасибо огромное, с отправкой все получилось! А что с получением почты делать? Насколько я поняла, CDO работает только с протоколом SMTP...
     
  16. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Ну-у такого не может быть... Выходит этот объект придуман только для рассылки спама. Может встречались примеры только для отправки.
     
  17. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    К сожалению получение писем только по MAPI, то бишь работает только с exchange server.
     
Загрузка...
Похожие Темы - Отправка Почты
  1. Мыш
    Ответов:
    9
    Просмотров:
    1.535
  2. Реник
    Ответов:
    2
    Просмотров:
    1.390
  3. Experimentator
    Ответов:
    1
    Просмотров:
    3.940
  4. Experimentator
    Ответов:
    1
    Просмотров:
    2.625
  5. makaset
    Ответов:
    13
    Просмотров:
    4.231

Поделиться этой страницей