Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SMTP клиент, транзакции не проходят 
V
    Опции темы
neosapient
Дата 16.10.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Цитата

Только в MSDN не тот формат переменных для функций
Base64Encode
Base64Decode

Ответ здесь
А самостоятельная реализация здесь

Это сообщение отредактировал(а) neosapient - 16.10.2006, 14:53
PM MAIL   Вверх
neosapient
Дата 16.10.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Люди подскажите, в чем проблема.
Код

#include <atlenc.h>
#include <stdio.h> 
void main(void)
{
    BYTE str[]="test___00003";
    char buffer[240];
    int lenbuffer=240;
    ZeroMemory(buffer,sizeof(buffer));
    Base64Encode(str, sizeof(str), buffer, &lenbuffer, ATL_BASE64_FLAG_NONE);
    //buffer[lenbuffer]='\0';
    printf(buffer);
}

Мне на экране выводиться:
dGVzdF9fXzAwMDAzAA==
А в статье
dGVzdF9fXzAwMDAz

Похоже, но не то. Как определить конец возвращаемой строки.
Ведь в переменную возвращается число 20, т.е. включая хвост AA==
Ну, что я на этот раз делаю не так.
 smile  smile 

Это сообщение отредактировал(а) neosapient - 16.10.2006, 15:23
PM MAIL   Вверх
neosapient
Дата 16.10.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Понял - кодируется символ конца строки - '\0'
Надо так
Код

#include <atlenc.h>
#include <stdio.h> 
void main(void)
{
    BYTE str[]="test___00003";
    char buffer[240];
    int lenbuffer=240;
    ZeroMemory(buffer,sizeof(buffer));
    Base64Encode(str, sizeof(str)-1, buffer, &lenbuffer, ATL_BASE64_FLAG_NONE);
    //buffer[lenbuffer]='\0';
    printf(buffer);
}

Хоть бы это были последние грабли...  smile 
PM MAIL   Вверх
tnt17
Дата 16.10.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



У  тебя проблема с этим:
  invoke     socket,2,1,0    на языке С это будет выглядеть так socket(2,1,0).
Что озаначают цифры,смотри в h файле с прототипом этой функции описание констант. И сравнивай это все с мсдн. Например:
MSDN:

SOCKET socket(
  int af,
  int type,
  int protocol
);
 
winsocket2.h. & мсдн:

1) #define AF_INET  2
2) SOCK_STREAM ? SOCK_DGRAM    #define SOCK_STREAM  1 : #define SOCK_DGRAM  2
3) протокол = 0. К документации.

Пример программы на fasm-e:

http://forum.sources.ru/index.php?showtopic=103983

Добавлено @ 16:14 
В статье ошибка,посмотри коментарии. ;)
http://www.adp-gmbh.ch/cpp/common/base64.html
PM   Вверх
neosapient
Дата 16.10.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



УРА
А кукарача, а кукарача ... дальше не помню ... а ча-ча-ча
ПОЛУЧИЛОСЬ
ПИСЬМО ШЛЕТСЯ...
 smile  smile  smile 

Люди, остался маленький баг.
Использую функцию для копирования строки strdup()
Но она оставляет мусор.

Поправьте кто может,  я иссяк.
Все пошел лечить свой грип...

Это сообщение отредактировал(а) neosapient - 16.10.2006, 16:38

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  TestSocetSMTP5.rar 55,21 Kb
PM MAIL   Вверх
tnt17
Дата 16.10.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



lstrcpy юзай.  smile

Добавлено @ 16:58 
После каждого приема данных от сервера,нужно чистить буффер.Меняем:
#define getmessage(str) {sprintf(buffer,"get:\n %s",str); printf(buffer);fputs(buffer,file);} 
На:
#define getmessage(str) {sprintf(buffer,"get:\n %s",str); printf(buffer);fputs(buffer,file);memset(&buffer, 0,1024);}
1024 размер твоего буффера. 
PM   Вверх
neosapient
Дата 16.10.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Нет, не то.
Есть глобальный buffer и локальный buffer
В общем надо один из них переименовать (скажем глобальный), и компилятор перестанет ругаться.
 smile  smile 
Но я думаю утечка памяти идет, и идет она  в функции strdup()
PM MAIL   Вверх
neosapient
Дата 17.10.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Люди еще вопросик.
Вот я шлю на mail.ru кому-то письмо ([email protected])
В инструкции по отправке сказано - пишите на smtp.mail.ru, порт 25

Теперь я шлю на rambler.ru кому-то письмо ([email protected])
В инструкции по отправке сказано - пишите на maild.rambler.ru, порт 25

Но тут у меня закрались сомнения.
Как почтовая  программа определяет "префикс" (smtp. или скажем maild.)?
1) Допустим в почтовом клиенте есть некая база данных с полными путями.
Но тогда я не верю что она полная, врядли наш производитель софта из села Гадюкино включит в свою базу данных все почтовые ящики в каком-нибудь Занзебаре. Эту версию я отметаю.
2) Дотустим есть некая глобальная база данных в инете. Но тогда управляющий этой базой данных врядли будет беспокоиться, о включении самопального почтового ящика нашего программиста из села Гадюкино. И если наш программист не знает о существовании такой базы данных, то на его почтовый ящик не будут приходить письма. Мне такой расклад не нравиться - отвергаю.
3) Возможно есть некий стандартный сервис - я спрашиваю у mail.ru:
"А здесь есть почта, можно точный адресок?"
В ответ:
"Да есть - smtp.mail.ru"
или
" Нет, нету"
Эта идея имеет право на жизнь, но может оказаться проблематичной в реализации. 
И все же если так и есть - Подскажите так ли это? И что можно почитать?
4) Для всех почтовиков справедливо - smtp.somehost.org
Я попробовал через telnet так подключиться:
- на rambler.ru - open smtp.rambler.ru 25 -> меня перекинуло на maild.rambler.ru (ура)
- на e-mail.ru - open smtp.e-mail.ru 25 -> клинит (плохо)
Такой вариант тоже может подойти, но почему то не для всех.
Прав ли я что такой метод используется?
Возможно есть другой стандартный префикс?


...

PM MAIL   Вверх
ptr
Дата 18.10.2006, 05:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



Цитата(neosapient @  17.10.2006,  22:02 Найти цитируемый пост)
Как почтовая  программа определяет "префикс" (smtp. или скажем maild.)?

Ты сам задаёшь ей какой smtp сервер использовать.


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
neosapient
Дата 18.10.2006, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Цитата

Ты сам задаёшь ей какой smtp сервер использовать. 

Нет, я отсылаю письмо на [email protected] скажем через The bat.
Я пользователь и не представляю как там все работает, в частности какой префикс брать. 
За меня все продумано и написано сторонними программистами.

Вопрос, как эти сторонние программисты  определяют префикс?
PM MAIL   Вверх
dumb
Дата 18.10.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 1
Всего: 158



Цитата(neosapient @  18.10.2006,  21:58 Найти цитируемый пост)
За меня все продумано и написано сторонними программистами.

ЩАЗ. smile
если ты ни разу не настраивал почтовую программу, это вовсе не означает, что она "сама все делает". видел когда-нибудь волосато-бородатого дядьку с синими кругами под глазами и перманентным пивным духаном?..
PM MAIL   Вверх
neosapient
Дата 18.10.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Мой вопрос из паралельной ветки.

Цитата

SMTP-серверы определяю адреса друг друга, выполня запросы MX записей к системе DNS
 

По подробнее, как это посмотреть через telnet.

Ну допустим я хочу отправить письмо через на [email protected]
То есть мне надо узнать програмно что я должен коннектиться через 25 порт к smtp.mail.ru
По логике мне надо сначала обратиться к mail.ru
Т.е. я подключаюсь через какой то порт к mail.ru

Через какой порт я должен подключаться, чтоб в дальнешем получить нужную мне информацию?
Какова дальнешая последовательность действий?
Скажите для приема почты (POP3) все тот же префикс или он может быть иной?
Если иной какая методика его получения?

Часики тикают, ответы нужны к затрашнему вечеру (четвергу).
PM MAIL   Вверх
neosapient
Дата 19.10.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Цитата

ЩАЗ. 
если ты ни разу не настраивал почтовую программу, это вовсе не означает, что она "сама все делает". видел когда-нибудь волосато-бородатого дядьку с синими кругами под глазами и перманентным пивным духаном?.. 

Ну это вообще не ответ.

Я пользуюсь web интерфейсом, предоставляемым mail.ru, на котором рассположен мой почтовый ящик. Чтобы отправить письмо другу, я пишу его почтовый ящик. Далее пишу текст письма и нажимаю кнопку "отправить".
Ну ведь все за меня делает web-интерфейс, в том числе определяет точный почтовый сервер получателя (префикс.somemailhost.ru)
Как он это определяет???

Надеюсь теперь вопрос понятен.
Дайте "разжеванный" ответ.
PM MAIL   Вверх
ptr
Дата 20.10.2006, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



Цитата(neosapient @  19.10.2006,  14:57 Найти цитируемый пост)
Ну ведь все за меня делает web-интерфейс, в том числе определяет точный почтовый сервер получателя (префикс.somemailhost.ru)

Префикса может вообще не быть.

Цитата(neosapient @  19.10.2006,  14:57 Найти цитируемый пост)
Ну ведь все за меня делает web-интерфейс, в том числе определяет точный почтовый сервер получателя (префикс.somemailhost.ru)

Он ничего за тебя не делает. Он лишь отправляет письмо на тот сервер, чей веб-интерфейс smile , а тот уже доставляет почту.

Цитата(neosapient @  19.10.2006,  02:14 Найти цитируемый пост)
Ну допустим я хочу отправить письмо через на [email protected]То есть мне надо узнать програмно что я должен коннектиться через 25 порт к smtp.mail.ruПо логике мне надо сначала обратиться к mail.ruТ.е. я подключаюсь через какой то порт к mail.ru

Сервер - тот через который будет отправлена почта.

Цитата(neosapient @  19.10.2006,  01:58 Найти цитируемый пост)
Нет, я отсылаю письмо на [email protected] скажем через The bat.Я пользователь и не представляю как там все работает, в частности какой префикс брать. За меня все продумано и написано сторонними программистами.

А это что тогда? (см. картинку)

Это сообщение отредактировал(а) ptr - 20.10.2006, 07:03

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  test.JPG 35,91 Kb


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
neosapient
Дата 20.10.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Цитата

Префикса может вообще не быть

Это я догадываюсь.
-------------------------------------------------
Цитата

Он ничего за тебя не делает. Он лишь отправляет письмо на тот сервер, чей веб-интерфейс  , а тот уже доставляет почту.

Да, а как сервер определяет куда правильно отправить почту.
Предположим я отправляю письмо с [email protected] на [email protected]
И так сервак-rambrel должен произвести соединение с smtp.mail.ru.
Откуда сервак-rambrel`а знает про существование префикса smtp.mail.ru, ведь единственное что он знает это mail.ru как часть письма адреса получателя [email protected] Это просто текстовое вычленение.
------------------------------------------------
Цитата

Сервер - тот через который будет отправлена почта.


Люди, вы меня не можете понять.

Слушайте внимательно мою мысль. Есть два способа для программиста организовать отправку почты:
1) "Ленивый". Тот о чем вы все мне пытаетесь объяснить. Этот способ реализован и в примере, что стаким трудом, но вместе удалось запустить.
Письмо отправляется на сервер-почтовик, на котором расположен почтовый ящик отправителя. А затем этот сервак перенаправляет почту по месту назначения, возможно на другой сервер-почтовик.
2) "Геморойный" (потому что ответа не найти, извените  smile ). Почтовый клиент отправляет письма сразу на сервак получателя. Только если письмо отправляется на [email protected], то к чему должен коннектиться почтовый клиент через 25 порт:
   - xxx.ru
   - smtp.xxx.ru
   - mail.xxx.ru
   - еще что то
Вопрос понятен?
-------------------------------------------------------
Цитата

А это что тогда? (см. картинку)

Гляжу внимательно - внутри обведенной рамки, в строке SMTP address в скобках "smtp.domain.tdl" <-- видете префикс
А ниже вводим то самое domain.tdl
Почему такой префикс? 
Возможно тут подходит идея:
Цитата

4) Для всех почтовиков справедливо - smtp.somehost.org
Я попробовал через telnet так подключиться:
- на rambler.ru - open smtp.rambler.ru 25 -> меня перекинуло на maild.rambler.ru (ура)
- на e-mail.ru - open smtp.e-mail.ru 25 -> клинит (плохо)
Такой вариант тоже может подойти, но почему то не для всех.
Прав ли я что такой метод используется?
Возможно есть другой стандартный префикс?

Но для e-mail.ru префиксом выбран mail.

Но несбрасываю со счетов версию про сервис
Цитата

3) Возможно есть некий стандартный сервис - я спрашиваю у mail.ru:
"А здесь есть почта, можно точный адресок?"
В ответ:
"Да есть - smtp.mail.ru"
или
" Нет, нету"
Эта идея имеет право на жизнь, но может оказаться проблематичной в реализации. 
И все же если так и есть - Подскажите так ли это? И что можно почитать?


PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.