powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / POP3 Как, что и где взять реально бесплатно и легально?
13 сообщений из 38, страница 2 из 2
POP3 Как, что и где взять реально бесплатно и легально?
    #35336047
Старый фоксистВ принципе лови тогда более современную версию smtpmail.prg.
Вот несколько упрощённый класс message.prg (выкинуты зависимости от других классов). Не уверен, что на скорую руку без ошибок всё выкинул и ничего не напортачил, но думаю, сможешь понять, если где проблема вылезет :-)
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35336060
Старый фоксистВ принципе лови тогда более современную версию smtpmail.prg.
И последняя зависимость, которую хлопотно предлагать тебе вручную делать :)
Класс работы с реестром regclass.prg, используется в message.prg
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35341422
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вау!

Тут уже риспектами не отмашишсо, тут пиво заливать нада :) ! Спасибо, буду разбираццо!

Да я уже вторые сутки плодотворно обпиливаю альфового клиента. Создал класс на основе формы с едитбоксом и 2мя текстбоксами. В первый у меня падают трейс событий, телодвижения короче, типа как в бате: соединяемсо... ляля... авторимся... бла-бла и тд, а в текстбоксы кол-во принятой/переданной инфы. Сразу наглядно видать че как и не висняги ли. Сперва хотел прогресс-бар лепить - но спрыгнул с темы, еще думал в статусную строку фоксы инфить, но так мне больше понравилось. Хочу вот еще кнопу "внезапного аборта" прилепить да и все. По СМТП. а по рор3 еще толком не дошло дело пока... Но его тоже на основе формы мучу. Кста, одна из причин именно формы - на нее можно осх лепить, который я в класс залил. Поэтому у меня не
Код: plaintext
.WinSock=CREATEOBJECT("MSWinsock.Winsock")
а
Код: plaintext
1.
.AddObject("oWinSock","winsock")
.WinSock = .oWinSock.Object
Еще возник вопрос почему закаменчен метод авторизации МД5-дайджест? (Я еще в новый смтп-класс не глядел, возможно вопрос отпадет.)

Не воспримите как поппытку оттяпать руку по локоть :), но если выложить по каким-либо соображениям невозможно, просто скажите, Константин, а что у Вас, собственно, лежит в классе socket.prg? (Cмотрю в нем появился конверт IP2Host/Host2IP) Я-то использовал ОСХ. Может у Вас там все без ОСХ вообще, т.е. все через API? Или Вы там просто проверяете зареган ли осх и если нет - регаете и тогда его инициализируете?
Такой вариант (через API) в принципе лучше по причине отсутствия необходимости регать ОСХ, а значит нести его с прогой и тд и тп. Кроме того уже наступил на грабли (подозревал об их наличии)! У юзера какая-то нестандартная сборка ХР - дык там mswinsck.ocx в папке system32 отсуцтвует напрочь. Вот я юзаю сборку от филки - так там есть, только зарегай и все ок, даже ниче никуда копировать не надо. А ему скопировал файло в ту папку, успешно зарегал... и грабли прога:)Error: OLE Error Code 0x80040112: Appropriate license for this class not found.ну я не растерялсо и спросил у дяди Гугля, который отправил меня сюда, к МС - там как раз про эти самые грабли. Так оказалось что у того юзера все те файлы есть окромя первого, ну так и у меня на кампе тоже первого нет, но все ок... В который раз убедился что МССаппорт нифига не помогает своими "салюшенами"...

ЗЫ. Предположительно щас начнеццо поломничество умнегов с проповедями на тему граблей...
Только не надо! Я подозревал об их существовании еще до их появления и в любом случае буду искать методы их деструкции :) поэтому лучше дайте дельный совет по поводу методов борьбы с оными, если знаете.

ЗЗЫ. У Вас в смтп-классе похоже остался мелкий баг (возможно я ошибаюсь - бегло просмотрел), это я про случай, когда в мессаге одним словом больше 78 букав. мессаго у Вас нарезаеццо по пробелам, табам и ; чем слово не поделено. Проверте отсыл такой мессаги.
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35341815
CTAC-KO Еще возник вопрос почему закаменчен метод авторизации МД5-дайджест? (Я еще в новый смтп-класс не глядел, возможно вопрос отпадет.)
Закомментирован он по одной простой причине: я не смог этот алгоритм запрограммировать. Сколько RFC не читал, вроде и примеры там были, хоть и куцые, но результат работы моего алгоритма всегда отличался от того, что возвращал пример из RFC, и pop-сервера ни разу не вернули мне "+OK" на такой запрос. Так и не доковырял из-за этого.

CTAC-KO что у Вас, собственно, лежит в классе socket.prg? (Cмотрю в нем появился конверт IP2Host/Host2IP) Я-то использовал ОСХ. Может у Вас там все без ОСХ вообще, т.е. все через API? Или Вы там просто проверяете зареган ли осх и если нет - регаете и тогда его инициализируете?
У меня в socket.prg работа с сокетами организована через WinAPI. То есть это просто замена OCX'у. Единственное, что я когда его делал, то сделал работу только на получение данных, то бишь "Listen" я там не сделал, поэтому не 100%-ная замена OCX'у получилась (в моей программе слушать порт не нужно было, вот и не стал делать).

CTAC-KOЗЗЫ. У Вас в смтп-классе похоже остался мелкий баг (возможно я ошибаюсь - бегло просмотрел), это я про случай, когда в мессаге одним словом больше 78 букав. мессаго у Вас нарезаеццо по пробелам, табам и ; чем слово не поделено. Проверте отсыл такой мессаги.
Ну если есть ошибка и ты знаешь, как её исправить - исправляй :) Я не натыкался, но это не означает, что программа безошибочна.
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35343049
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый фоксист CTAC-KOЗЗЫ. У Вас в смтп-классе похоже остался мелкий баг (возможно я ошибаюсь - бегло просмотрел), это я про случай, когда в мессаге одним словом больше 78 букав. мессаго у Вас нарезаеццо по пробелам, табам и ; чем слово не поделено. Проверте отсыл такой мессаги.Ну если есть ошибка и ты знаешь, как её исправить - исправляй :) Я не натыкался, но это не означает, что программа безошибочна. так я ж об этом написал чтобы Вы у себя исправили, не ровен час споткнеццо прога там. У себя-то я конечно исправил. Выяснилось как - я для пробы отсылал мылом ошибку, а там иерархическая ссылка не объект вызвавший ошибку, через точки и получилось около 100 символов, типа такого: егорVeryCoolFormWithGrid.pageframe1.pageSomeServiceForGrid.pageframe1.pageCountRecords.btnCountRecords.Click
чем я и заключил - попробуйте такое отослать у себя чтобы проверить...
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35343130
CTAC-KO егорVeryCoolFormWithGrid.pageframe1.pageSomeServiceForGrid.pageframe1.pageCountRecords.btnCountRecords.Click
чем я и заключил - попробуйте такое отослать у себя чтобы проверить...
На самом деле ошибки не будет: протокол SMTP нормально переваривает строки любой длины, иначе как бы передавались бинарные файлы, не кодируемые Base64 и Quoted-Printable (формат Binary). Просто стандарт описывает, что строки должны быть порезаны, но это не является обязательным.
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35343160
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый фоксист CTAC-KO егорVeryCoolFormWithGrid.pageframe1.pageSomeServiceForGrid.pageframe1.pageCountRecords.btnCountRecords.Click
чем я и заключил - попробуйте такое отослать у себя чтобы проверить...
На самом деле ошибки не будет: протокол SMTP нормально переваривает строки любой длины, иначе как бы передавались бинарные файлы, не кодируемые Base64 и Quoted-Printable (формат Binary). Просто стандарт описывает, что строки должны быть порезаны, но это не является обязательным.дело не в этом, а в том, что метод StrFolding зацикливается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
* Строка длиннее  78  символов?
IF LEN(m.tcString)> 78 
	* Да! Тогда произведём над ней необходимые манипуляции

************************
*вот без этого - зацикл будед
************************
	* если будет слово больше  78  символов - бьем его переносами
	* на куски по  77 -
	LOCAL lnWordCount, lcWord
	lnWordCount = GETWORDCOUNT(tcString,' -')
	nI= 1 
	DO WHILE m.nI <= m.lnWordCount
		lcWord = GETWORDNUM(m.tcString,m.nI,' -')
		IF LEN(m.lcWord)> 78 
			m.tcString = STUFF(m.tcString,AT(m.lcWord,m.tcString),LEN(m.lcWord),LEFT(m.lcWord, 77 )+'-'+SUBSTR(m.lcWord, 78 ))
			lnWordCount = GETWORDCOUNT(m.tcString,' -')
		ENDIF
		nI = m.nI + 1 
	ENDDO
************************

	* Разделим строку по разделителям, включая в массив разделители
	nLines = ALINES(aLn,m.tcString, 2 + 16 ," ",CHR( 9 ),";",'-')
	
	* Есть такие разделители в строке?
	IF m.nLines >  0 
		cRetVal = ''
		cStr = ''
		
		FOR nI= 1  TO m.nLines
			* Сравним сумму длин строки из массива с собираемой строкой
			* на длину больше  78  символов плюс  1  разделитель, то есть  79 
			IF LEN(m.cStr + m.aLn[m.nI]) >  79 
				* Если склеивание идёт не с первой строкой массива...
				IF m.nI >  1 
					* ... значит у нас уже есть в cStr строка, которая
					* не превышает нужной длины и к которой достаточно
					* добавить CRLF и пробел
					cRetVal = m.cRetVal + RTRIM(m.cStr, 0 ," ",CHR( 9 )) + CRLF &&+" "
					
					* Далее уменьшим текущий индекс, чтобы пройти
					* обработку этой строки из массива ещё раз
					nI = m.nI - 1 
					
					* И обнулим cStr, так как начинается новая строка
					cStr = ''
				ELSE
					* А здесь проверим превышение длины строки максимальных
					*  998  символов и если она превышает это значение, тогда
					* разделим её принудительно
					IF LEN(m.aLn[m.nI]) >  998 
						DO WHILE .T.
							IF LEN(m.aLn[m.nI]) >  998 
								cStr = m.cStr + SUBSTR(m.aLn[m.nI], 1 , 998 ) +CRLF
								aLn[m.nI] = SUBSTR(m.aLn[m.nI], 999 )
							ELSE
								cStr = m.cStr + m.aLn[m.nI]
								EXIT
							ENDIF
						ENDDO
					ELSE
						* Принимаем первую строку какая есть
						cStr = m.cStr + RTRIM(m.aLn[m.nI], 0 ," ",CHR( 9 ))+CRLF &&+" "
					ENDIF
				ENDIF
			ELSE
				* Склеиваем строки из массива в одну переменную
				cStr = m.cStr + m.aLn[m.nI]
			ENDIF
		ENDFOR
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35343252
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый фоксист CTAC-KO что у Вас лежит в классе socket.prg? (Cмотрю в нем появился конверт IP2Host/Host2IP) Я-то использовал ОСХ. Может у Вас там все без ОСХ вообще, т.е. все через API? Или Вы там просто проверяете зареган ли осх и если нет - регаете и тогда его инициализируете?У меня в socket.prg работа с сокетами организована через WinAPI. То есть это просто замена OCX'у. Единственное, что я когда его делал, то сделал работу только на получение данных, то бишь "Listen" я там не сделал, поэтому не 100%-ная замена OCX'у получилась (в моей программе слушать порт не нужно было, вот и не стал делать). вобщем без socket.prg нет смысла использовать обновленный смтп-клиент - слишком долго разбираться и напильничать.
Скажите, вот в примере смтп-клиента В. Колосова тоже вся работа была организована через выньапи, а не через выньсокет.осх. Но там проблема недополучения данных, как я уже упоминал. В частности отправка-прием органивана через
Код: plaintext
1.
declare integer send in ws2_32.dll integer, string @, integer, integer
declare integer recv in ws2_32.dll integer, string @, integer, integer
метод recv:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
local lcBuffer, ll_return_status, lcFDREAD , lnByteCount
with this
	m.lcBuffer = .get_null_terminal_string(.size_buffer)
	m.lcFDREAD = .int_n_str( 1 , 4 ) + .int_n_str(.hsocket, 4 )
	* SOCKET_ERROR
	do while socketselect( 0 ,@m.lcFDREAD, 0 , 0 , 0 ) <  1 
	enddo

	m.lnByteCount = recv(.hsocket,@m.lcBuffer,.size_buffer, 0 )

	store m.lnByteCount # SOCKET_ERROR to m.ll_return_status
	if m.ll_return_status
		.byte_count_in = .byte_count_in + m.lnByteCount
	endif
	.pop3_buffer = alltrim(m.lcBuffer)
	.recv_buffer = right(.pop3_buffer,len(.pop3_buffer)- 4 )
	if m.ll_return_status
		m.ll_return_status = .out_protocol('s',.alltrim(m.lcBuffer))
	else
		.out_message('Recv',WSAGetLastError())
	endif
endwith
return m.ll_return_status
и вот с recv потом проблема такая - в строке
Код: plaintext
m.lnByteCount = recv(.hsocket,@m.lcBuffer,.size_buffer, 0 ) 
метод загребает только то, что успел принят к моменту исполнения. Это не всегда даже полностью ответ на посланную команду (к примеру LIST/TOP). Я попробовал зациклить по условию что m.lnByteCount изменяется, но тогда метод зависает на команде recv(.hsocket,@m.lcBuffer,.size_buffer,0), когда уже ничего реально не приходит, потому что и не должно. И дальше код в методе не исполняется, соотв. тайм-аутами не отмазаццо.
Да и с буфером тоже непонятно - заранее же неизвестно сколько данных упадет...

Не подскажете как это решаемо?
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35343551
CTAC-KOНе подскажете как это решаемо?
Проще выложить socket.prg, чтобы не пилить код :-)
Лично я не натыкался на проблемы с получением всех данных: я достаточно долго тестировал на разных вариантах получения данных
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35345961
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Буду разбираться.
По ходу принципиальных различий в реализации выньапи не заметил, т.е. те же send/recv...
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35346457
CTAC-KOПо ходу принципиальных различий в реализации выньапи не заметил, т.е. те же send/recv...
Конечно :-)
И там и там windows sockets второй версии. Различие не в работе с сокетами, а в реализации SMTP и POP3 протоколов, а именно как реализовано получение всех данных для случая, когда заранее неизвестен размер этих данных.
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35346489
maple4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример реализации (в zip.файле)
с :
mswinsock.winsock - получение письма
ADODB.Stream - преобразование для CDO
CDO.Message - ПОЛНЫЙ доступ к содержимому письма (в том числе к файлам, прикрепленным к письму)

На данном примере построена программа приема писем и анализа (+выполнение дальнейших действий - формирование/отсылка, занесение в базу и т.д.).

В теле программы необходимо разместить код обработки (для чего-то это же надо, все таки)
логин, пароль, порт и имя сервера

Использован и переработан код, размещенный ранее на
foxclub.ru ,
sql.ru ,
microsoft.com ,
www.delphikingdom.com .

P.S.
отпала необходимость в The Bat, easeemail и т.д.
глюков пока не замечено



Не стреляйте в пианиста, он играет как умеет
...
Рейтинг: 0 / 0
POP3 Как, что и где взять реально бесплатно и легально?
    #35365407
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С 2000 года юзаю в проектах на MSA и VFP почту
postie
Никаких проблем никогда не было. Хоть и не freeware, но shareware ООЧЕЕНЬ добротное.
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / POP3 Как, что и где взять реально бесплатно и легально?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]