PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Существует ли POP3 с авторизацией?


Существует ли POP3 с авторизацией?

Сообщений 31 страница 47 из 47

31

Ловится ошибка 354 Enter mail, end with "." on a line by itself, теперь постоянно. Может кто помочь что это такое и с чем его прибивают.
Работал с Рамблером и Яндексом.

Можно ли поставить на 354 ошибку, собственное сообщение (типа "Возникли ошибки при отправке, но сообщение могло быть отправлено") или это некоректно по отношению к пользователю? (он достаточно слабо знающий)

Отредактировано greece (26.10.2015 17:19:58)

0

32

http://forum.nvrsk.ru/index.php?showtopic=19035

ты послал команду DATA - указание SMTP-серверу, что дальше будет идти тело письма
ответ сервера: 354 Enter mail, end with "." on a line by itself - команда DATA принята, можно передавать тело письма, признак конца письма точка на отдельной строке (комбинация <CR><LF>.<CR><LF>)

т.е. это нормальный ответ-подтверждение сервера на команду DATA.
теперь сервер ждет тело письма напомнив отправителю что тело письма должно заканчиваться строкой с единственной точкой

см. пример в https://ru.wikipedia.org/wiki/SMTP

см. все варианты ответов в http://opds.sut.ru/old/electronic_manua … 3_SMTP.htm

0

33

Да, это понятно из описания протокола. Но в том то вся веселуха, что тело (DATA) отправляется, но возвращается такая ошибка. Поэкспериментировал с

Код:
             Case "251"
                          SendNetworkData("DATA")
                         state=#Data
                      Case "354"
                         SendNetworkData("X-Mailer: ExchWater 1.0")
                         SendNetworkData("To: " + recipient)
                         SendNetworkData("From: " + name + " <" + sender + ">")
                         SendNetworkData("Reply-To: "+sender)
                         SendNetworkData("Date:" + FormatDate("%dd/%mm/%yyyy @ %hh:%ii:%ss", Date()) )
                         SendNetworkData("Subject: " + Subject)
                         SendNetworkData("MIME-Version: 1.0")
                         SendNetworkData("Content-Type: multipart/mixed; boundary="+Chr(34)+"MyBoundary"+Chr(34))
                         SendNetworkData("")
                         send("--MyBoundary")
                         SendNetworkData("Content-Type: text/plain; charset=windows-1251")
                         SendNetworkData("")                     
                         SendNetworkData(body.s)
                         SendNetworkData("--MyBoundary--")
                         SendNetworkData(".")

Все равно возвращает такую ошибку, правда один раз из четырех, примерно.

Убиться об стенку и не проснуться с такой совместимостью вызовом Shell и PureBasic. Но самое загадочное что батник отрабатывает без ошибок. Значит что-то в вызове из Аксеса. Посижу завтра еще, если не разберусь, оставлю обработчик ошибок только на инициализацию и отсутствие ящика и неверный логин/пароль.  Не с кем посоветоваться о таких тонкостях совместной работы..((

0

34

greece написал(а):

с такой совместимостью вызовом Shell и PureBasic.

Совместимость нормальная (правильная). Главное не нарушать правила (кавычек и пробелов быть не должно). Иначе не нужно что-то винить в своих ошибках.

0

35

Петр:
Благодарю за замечания, но каждый блок на Аксесса и на Пурике работает отлично. Когда организуется вызов внешней программы появляется ошибка.
Пробовал организовать вызов через бат-файл, все отработало без ошибок. Делал строку параметров и путь к программе отправки в Аксессе просто одной переменной и запускал через Shell, та же самая ошибка.
При вызове передача почты отрабатывает нормально, потом как будто теряет эту точку (ошибка 354), но письмо с вложением отправляется в ящик. Что и пытаюсь понять.

Если я кого то задел, приношу извинения. Не могу понять, вроде все правильно, но работет не так как ожидал.

0

36

SendNetworkData("...") - это команда какого языка ? Она автоматом добавляет CRLF ?

В Пурике синтаксис

Result = SendNetworkData(Connection, *MemoryBuffer, Length)

0

37

SendNetworkData это из Пурика. Но работает она у меня и без присвоения, а так как описал.
А насчет CRLF это приходится самому.

Код:
    msg+crlf.s
    SendNetworkData(ConnectionID, @msg, Len(msg))

Этот код я упростил так как ранее давал полный листинг, здесь показал только действующие ОПЕРАТОРЫ.

Но не в операторе дело.  Из ящика на Яндексе все письмо достается из Входящих (т.е. пришло валидно) и ненарушенная целостность приложения и тела. Основная проблема в том что после отправки тела письма и атачмента PureSMTP_SendMail (и не только он) возвращает ошибку 354 (ожидание "." получения DATA).
На сегодня у меня только одно решение как не пугать пользователя - запретить обработку этой ошибки на что либо более оптимистичное ("Пись отправлено, проверьте в ящике получателе").
Если есть предложения как мне обойтись без такого костыля, прошу помочь.

0

38

greece написал(а):

Если есть предложения как мне обойтись без такого костыля, прошу помочь.

greece написал(а):

Пробовал организовать вызов через бат-файл, все отработало без ошибок. Делал строку параметров и путь к программе отправки в Аксессе просто одной переменной и запускал через Shell, та же самая ошибка.

Предложение поискать ошибку в передаче параметров из Аксесса.

0

39

Я тоже уже окончательно уверился, что это Аксесс. Но лопатить коды Мелкософта это путь в психушку...))
У меня такая идея что Shell в аксесе создает для запуска область памяти не совсем соответствующую работе SMTP, можно ли в Пурике сделать такую программу чтобы запускала из себя программу работы с почтой?
Т.е. вызываем программу-ланчер, а она стартует программу работы с мылом. Непонятно как из ланчера передавать параметры в запускаемую программу.

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

0

40

И кто может помочь как сделать бар для ожидания пока отправится/примется почта. Что то типа процентов выполненного или как наполнение.

0

41

PurePOP3_SetRetrieveCallback()

Syntax

PurePOP3_SetRetrieveCallback(*ProcedureAddress)
Description

Set the progression callback address for PurePOP3_RetrieveMessage().
The callback is called in realtime during message retrieval.
Useful to indicate the progress when a big file is retrieved.

Procedure MyCallback(Progression.f)
; Progression : progression percentage)
EndProcedure

Example

Procedure PurePOP3_RetrieveMessageCallback(Progression.f)
  Debug "Progression = " + StrF(Progression)
EndProcedure
;
PurePOP3_SetRetrieveCallback(@PurePOP3_RetrieveMessageCallback())

----

MailProgress()

Синтаксис

Result = MailProgress(#Mail)
Описание

Возвращает прогресс отправки почты, начатой SendMail().

'Result' это количество отправленных байт или одно из следующих значений:
  #PB_Mail_Connected: Отправка почты находится в стадии инициализации.
  #PB_Mail_Finished : почта отправлена правильно.
  #PB_Mail_Error    : почта отправлена, но произошла ошибка.

0

42

Кстати, SendMail поддерживает защищенное соединение.

#PB_Mail_UseSSL      : uses TLS/SSL to send the mail (the server needs to support this protocol).

0

43

Это в какой версии?
В доках от 5.31 нет такого.

0

44

5.40.

0

45

Спасибо всем кто помогал с решением моей проблемы. Перепробовал все но остановился на варианте с заглушкой. В связке с аксессом работает нормально, теперь, в случае ошибки 354, будет появляться чуть измененное сообщение.
Вариант с прогресс баром не понял, оставил все как есть. В общем, работа на троечку. :)

ПС Если можете скиньте новую версию. Посмотреть, сравнить.

Отредактировано greece (10.11.2015 00:20:30)

0

46

Сейчас версию 5.40 можно скачать только тут. http://purebasic.com/download.php
Для тестирования отправки почты ее хватит.

0

47

Что-то не работает там вообще передача через командную строку из Аксесс (вызов Shell, команда VBA for MSOffice). Ошибка и вываливается. Даже из строки данные не ловит..(((
А через батник и на прямую все славненько. :)

Так что, как породнить глюки Аксесса и Пурика неизвестно..)))

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Существует ли POP3 с авторизацией?