![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
(Другая ветка форума)
Нашел в рунете пример работы SMTP клиента. Настроил на себя, а он вот что дает:
554 - транзакции не проходят, так как 503 - неверная последовательность команд Помогите разобраться, что не так делаю! ![]() Программа записывает в файле "c:\\socket.log" весь лог работ И еще, что за wsnet.ru такой, я ж его не вызываю? Это сообщение отредактировал(а) neosapient - 14.10.2006, 14:23 Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
А что же ты делаешь? Ты же к нему подключаешься (wsnet.ru - 212.96.192.1) :
Всё уже написано: 554 <[email protected]>: Recipient address rejected: Relay access denied -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
||||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
1) А можно пояснить про работу WSAAsyncGetHostByName?
Почему ассинхроная отсылка сообщеня окну? 2) Есть ли синхроная функция, чтоб приложение зависло на некоторое время на этой функции, но зато вернула в консоль только IP (очень не хочется радикально модифицировать этот пример). Для этого подойдет gethostbyname? Это сообщение отредактировал(а) neosapient - 14.10.2006, 16:17 |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Это сообщение отредактировал(а) ptr - 14.10.2006, 16:27 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Спасибо, буду знать про gethostbyname().
А теперь супер бонусный вопрос ![]() Если дебагером пробежаться, то сразу после connect(), вызывается recv(), но данные в сокет не приходят и приложение уходит в бесконечное ожидание. Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Сервер - smtp.mail.ru, а не mail.ru. И какова глубина вложенности "супер"? Это сообщение отредактировал(а) ptr - 14.10.2006, 17:37 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
[off topic]
"вложеность" №2 ![]() [/off topic] ------------
А теперь супер-пупер вопрос ("вложеность" №3) ![]() ------------ Ну и наконец вопрос на засыпку ("вложеность" №4) ![]() ![]() Я в переменной hostname заменил значение с "mail.ru" на "smtp.mail.ru" Но это не помогло (смотри в прилогаемом архиве лог-файл: socket1.log) Тогда я заменил первую переменную массива строк MailMessage с "HELO mail.ru\r\n" на "HELO smtp.mail.ru\r\n" Но это не помогло (смотри в прилогаемом архиве лог-файл: socket2.log) Как то начинаю путаться. ![]() почему не работает ![]() ------------ И еще бонусный вопрос (как можно было догадаться "вложеность" №1) : В массиве строк MailMessage есть добавки из "\r" и "\n". Зачем они здесь нужны, в смысле обезательны ли? ------------ [off topic] Хочу предупредить встречный вопрос, есть ли еще типы "вложености" реторический - (-1) - не требует ответа обычный - (0) - простой, обычный, заурядный на сон грядущий - (5) - не имеет однозначного ответа; задается только врагам, чтоб всю ночь не спали и мучались в поисках ответов... ![]() [/off topic] Это сообщение отредактировал(а) neosapient - 14.10.2006, 17:57 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
||||
|
|||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
А можно прокоментировать концовку вот этой ветки
Там где речь идет про mail.ru Может я вообще не на тех "кошках" тренеруюсь ![]() Это сообщение отредактировал(а) neosapient - 14.10.2006, 18:30 |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Может кто-нибудь предоставить простой, но работающий пример передачи почты по расширеному SMTP-протоколу, т.е. по стандарту RFC 1427.
На ящики: mail.ru, yandex.ru, rambler.ru Пытался по протоколу RFC 821, но не нашел ни одного известного мне ящика, чтобы отправка проходила успешно по старой технологии. |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Я своих людей не выдаю ![]() ![]()
"\r\n" - перевод строки. Они обязательны. Что-то я такого не припомню. Может быть RFC2821. Вообще-то вместо smtp.mail.ru надо слать свой адрес. Потому что неправильно написана ![]() Что конкретно тебе прокомментировать? Это сообщение отредактировал(а) ptr - 15.10.2006, 13:50 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Что-то я приболел и слабо соображаю
![]()
А какой у моей машины адрес... ![]() как узнать ![]() IP посмотрел -> 192.168.1.2
Там, где свои мысли высказывает oleg1973. |
||||||
|
|||||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Вот часть статьи: Как отправить e-mail; Способ последний (для мазохистов)
![]() Так в командной строке вызываю "telnet" Далее "open smtp.mail.ru 25" Затем "HELO mail.ru" Получаю "ОК" "MAIL FROM:<[email protected]>" Получаю "ОК" И наконец "RCPT TO:<[email protected]>" выдает ошибку 550 - почтовый ящик не доступен, что за баг ![]() ---- По поводу telnet создал еще одну ветку форума Это сообщение отредактировал(а) neosapient - 15.10.2006, 19:45 |
|||
|
||||
tnt17 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.10.2006 Репутация: нет Всего: нет |
smtp.mail.ru 25 не везде проходит, так как некоторые провы блокируют 25 порт.На мейлру есть альтернативный 2525 .Почтовик узнает об этом просто авторизировавшись по протоколу pop3.
Вобщем это все хорошо, но на mail.ru нужна авторизация. Есть статья по этой теме: http://wasm.ru/article.php?article=simplesmtp ![]() |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
tnt17, спасибо.
Статья очень интерестная. ---- Только в MSDN не тот формат переменных для функций Base64Encode Base64Decode Бонусный вопрос: что инклудить, чтоб у функций был тот же формат передачи парамертров, как и в статье http://wasm.ru/article.php?article=simplesmtp Где в MSDN для функций описан такой же формат передачи параметров. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
||||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Люди подскажите, в чем проблема.
Мне на экране выводиться: dGVzdF9fXzAwMDAzAA== А в статье dGVzdF9fXzAwMDAz Похоже, но не то. Как определить конец возвращаемой строки. Ведь в переменную возвращается число 20, т.е. включая хвост AA== Ну, что я на этот раз делаю не так. ![]() ![]() Это сообщение отредактировал(а) neosapient - 16.10.2006, 15:23 |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Понял - кодируется символ конца строки - '\0'
Надо так
Хоть бы это были последние грабли... ![]() |
|||
|
||||
tnt17 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
УРА
А кукарача, а кукарача ... дальше не помню ... а ча-ча-ча ПОЛУЧИЛОСЬ ПИСЬМО ШЛЕТСЯ... ![]() ![]() ![]() Люди, остался маленький баг. Использую функцию для копирования строки strdup() Но она оставляет мусор. Поправьте кто может, я иссяк. Все пошел лечить свой грип... Это сообщение отредактировал(а) neosapient - 16.10.2006, 16:38 Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() |
|||
|
||||
tnt17 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.10.2006 Репутация: нет Всего: нет |
lstrcpy юзай.
![]() Добавлено @ 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 размер твоего буффера. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Нет, не то.
Есть глобальный buffer и локальный buffer В общем надо один из них переименовать (скажем глобальный), и компилятор перестанет ругаться. ![]() ![]() Но я думаю утечка памяти идет, и идет она в функции strdup() |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 -> клинит (плохо) Такой вариант тоже может подойти, но почему то не для всех. Прав ли я что такой метод используется? Возможно есть другой стандартный префикс? ... |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Ты сам задаёшь ей какой smtp сервер использовать. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Нет, я отсылаю письмо на [email protected] скажем через The bat. Я пользователь и не представляю как там все работает, в частности какой префикс брать. За меня все продумано и написано сторонними программистами. Вопрос, как эти сторонние программисты определяют префикс? |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 1 Всего: 158 |
ЩАЗ. ![]() если ты ни разу не настраивал почтовую программу, это вовсе не означает, что она "сама все делает". видел когда-нибудь волосато-бородатого дядьку с синими кругами под глазами и перманентным пивным духаном?.. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Мой вопрос из паралельной ветки.
По подробнее, как это посмотреть через telnet. Ну допустим я хочу отправить письмо через на [email protected] То есть мне надо узнать програмно что я должен коннектиться через 25 порт к smtp.mail.ru По логике мне надо сначала обратиться к mail.ru Т.е. я подключаюсь через какой то порт к mail.ru Через какой порт я должен подключаться, чтоб в дальнешем получить нужную мне информацию? Какова дальнешая последовательность действий? Скажите для приема почты (POP3) все тот же префикс или он может быть иной? Если иной какая методика его получения? Часики тикают, ответы нужны к затрашнему вечеру (четвергу). |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Ну это вообще не ответ. Я пользуюсь web интерфейсом, предоставляемым mail.ru, на котором рассположен мой почтовый ящик. Чтобы отправить письмо другу, я пишу его почтовый ящик. Далее пишу текст письма и нажимаю кнопку "отправить". Ну ведь все за меня делает web-интерфейс, в том числе определяет точный почтовый сервер получателя (префикс.somemailhost.ru) Как он это определяет??? Надеюсь теперь вопрос понятен. Дайте "разжеванный" ответ. |
|||
|
||||
ptr |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Префикса может вообще не быть.
Он ничего за тебя не делает. Он лишь отправляет письмо на тот сервер, чей веб-интерфейс ![]()
Сервер - тот через который будет отправлена почта.
А это что тогда? (см. картинку) Это сообщение отредактировал(а) ptr - 20.10.2006, 07:03 Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||||||
|
|||||||||
neosapient |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Это я догадываюсь. -------------------------------------------------
Да, а как сервер определяет куда правильно отправить почту. Предположим я отправляю письмо с [email protected] на [email protected] И так сервак-rambrel должен произвести соединение с smtp.mail.ru. Откуда сервак-rambrel`а знает про существование префикса smtp.mail.ru, ведь единственное что он знает это mail.ru как часть письма адреса получателя [email protected] Это просто текстовое вычленение. ------------------------------------------------
Люди, вы меня не можете понять. Слушайте внимательно мою мысль. Есть два способа для программиста организовать отправку почты: 1) "Ленивый". Тот о чем вы все мне пытаетесь объяснить. Этот способ реализован и в примере, что стаким трудом, но вместе удалось запустить. Письмо отправляется на сервер-почтовик, на котором расположен почтовый ящик отправителя. А затем этот сервак перенаправляет почту по месту назначения, возможно на другой сервер-почтовик. 2) "Геморойный" (потому что ответа не найти, извените ![]() - xxx.ru - smtp.xxx.ru - mail.xxx.ru - еще что то Вопрос понятен? -------------------------------------------------------
Гляжу внимательно - внутри обведенной рамки, в строке SMTP address в скобках "smtp.domain.tdl" <-- видете префикс А ниже вводим то самое domain.tdl Почему такой префикс? Возможно тут подходит идея:
Но для e-mail.ru префиксом выбран mail. Но несбрасываю со счетов версию про сервис
|
||||||||||||
|
|||||||||||||
ptr |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Видишь перед этим e.g. ![]() Не подходит.
Ты не ищешь лёгких путей ![]() Тебе уже сказали как всё работает:
Почтовый сервер обращается к DNS серверу и ищет все MX (Mail Exchanger) записи для сервера получателя. Далее он перебирает все найденные записи в порядке приоритета и отсылает через подходящую запись письмо. Подробнее можешь почитать например здесь. Список MX записей можешь посмотреть так (из командной строки ![]()
В программе же это можно сделать с использование gethostbyname(). Это сообщение отредактировал(а) ptr - 20.10.2006, 18:22 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||||||
|
|||||||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 1 Всего: 158 |
neosapient, повторюсь: можешь расслабиться на тему прямой засылки - не пустят тебя практически нигде.
|
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
PTR, спасибо за статью, интерестная.
Ладно, основное для чего делалась ветка форума уже доведено до конца. Результат работ Всем спасибо. Для ptr + к репутации Добавлено @ 15:06 закрываю |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |