Russian Qt Forum

Qt => Вопросы новичков => Тема начата: virtual_root от Ноябрь 21, 2012, 12:54



Название: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 21, 2012, 12:54
Добрый день ребята. Наверное я глупый вопрос задаю, ну прошу у вас чуточку терпения) Объясните мне пожалуйста, как мне имея адрес прокси сервера и адрес электронной почты отправить сообщение на \тот адрес через заданный прокси сервер?


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: mutineer от Ноябрь 21, 2012, 12:58
Протокол какой используешь? Какого типа прокси?


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 21, 2012, 13:53
протокол SMTP.  Я уже отправляла через него простые письма. А теперь мне дан сторонний прокси сервер и надо послать сообщение через него.
В самом протоколе я не вижу где можно указать что отправлять нужно через сторонний прокси сервер. Подскажите пожалуйста)


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 21, 2012, 13:54
попробую сейчас через QTcpSocket::setProxy


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: Hellraiser от Ноябрь 21, 2012, 14:02
Для SMTP-proxy надо письмо отправлять на адрес прокси-сервера, т.е. соединяться с его IP.


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: mutineer от Ноябрь 21, 2012, 14:11
Кроме того, нужен именно SMTP-proxy, а какой у ТС прокси она так и не сказала


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 21, 2012, 14:13
я поняла вас, спасибо. А прокси сервера различаются, так? Т.е. не через все можно отправить письмо на электронный адрес?


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 21, 2012, 14:14
а как узнать поддерживает ли прокси сервер SMTP протокол?


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: Hellraiser от Ноябрь 21, 2012, 14:26
Если уж речь пошла о прокси: то, что настраивается в IE (и подобных ему браузерах), называется Web-proxy (http://en.wikipedia.org/wiki/Proxy_server) и работает с протоколом http (можно с ftp, но админ должен настроить). А SMTP-proxy (http://en.wikipedia.org/wiki/SMTP_proxy) - это, в общих чертах, просто еще один почтовый сервер в сети, принимающий, обрабатывающий и пересылающий почтовое сообщение. Вот как-то так...


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: Serr500 от Ноябрь 21, 2012, 14:35
Чтобы отправлять почту, нужен либо специальный SMTP-прокси, либо SOCKS (4, 4a, 5), либо http-прокси с поддержкой метода CONNECT. При этом, последний вариант может не работать.


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 21, 2012, 14:37
спасибо ребята большое!


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 22, 2012, 10:34
Ребята, можете мне подсказать, что не так в коде. Почему-то у меня не отправляется письмо. При чем после отправки команды DATA\r\n мне приходит всё время ошибка 503... ничего не могу с этим поделать.. Подскажите что не так. До этой команды мне в ответ приходит 250, вроде всё хорошо, но как только хочу отправить DATA то сразу ошибка..
Код:
if ( state == Init && responseLine == "220" ){
            *(this->_strm) << "EHLO " << this->_mailInfo.host << "\r\n";
            (this->_strm)->flush();
            state = Mail;
    }else{
        if ( state == Mail && responseLine == "250" ){
            *(this->_strm) << "MAIL FROM: " << this->_mailInfo.senderEMail << "\r\n";
            (this->_strm)->flush();
            state = Rcpt;
        }else{
            if ( state == Rcpt && (responseLine == "250" || responseLine == "251") ){
                qDebug ()<<"rcpt2"<< "RCPT TO:<" << this->_mailInfo.recipients << ">\r\n";
                    *(this->_strm) << "RCPT TO: <" << this->_mailInfo.recipients << ">\r\n";
                    (this->_strm)->flush();
                    state = Data;
               
            }else{
                if ( state == Data && (responseLine == "250" || responseLine == "251") ){
                    qDebug ()<<"data";
                       *(this->_strm) << "DATA\r\n";
                       (this->_strm)->flush();
                       state = Body;
                }else{
                    if ( state == Body && responseLine == "354" ){
                        qDebug ()<<"body1";
                        QString message = this->_generateHeader();
                        qDebug()<<message;
                        *(this->_strm) << message << "\n" << "\r\n.\r\n";
                        (this->_strm)->flush();
                        state = Quit;
                    }else{ qDebug ()<<"body2";
                        if ( state == Quit && responseLine == "250" ){
                            *(this->_strm) << "QUIT\r\n";
                            (this->_strm)->flush();
                            emit status( tr( "Message sent" ) );
                        }
                    }
                }
            }
        }
    }
}


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: virtual_root от Ноябрь 22, 2012, 13:16
я всё починила. Нужна была авторизация. Теперь письмо через smtp.mail.ru отправляется. В интренет нашла пару бесплатных smtp серверов, пробую через них отправить письмо себе на ящик не выходит... 554 ошибка. Можете подсказать, как мне через сторонний smtp сервер отправить письмо?


Название: Re: Как отправить сообщение по почте через прокси-сервер?
Отправлено: Hellraiser от Ноябрь 22, 2012, 13:25
Тебе нужно найти open-relay сервер, т.е сервер, позволяющий передавать письмо через себя на другой. По жизни, получение почты с таких серверов нормальными админами блокируется, так как ими, в основном, пользуются спамеры. Хочешь отправить письмо себе - соединяйся со своим SMTP сервером.