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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отправка электронной почты 
:(
    Опции темы
EvoEvo
Дата 21.4.2008, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!
Хотел спросить, может у кого имеются исходники SMTP-клиента, который реально работает, например для mail.ru. В интернете нашел много различных исходников, но не один из них на деле не работает - по крайней мере, с mail.ru . 
Буду рад, если поможете.
PM MAIL   Вверх
EvoEvo
Дата 22.4.2008, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а есть какая-нибудь функция которая шифрует данные в Base64, для отправки на сервер SMTP логина и пароля? Или надо вручную ее писать? 
PM MAIL   Вверх
G0L1a7h
Дата 22.4.2008, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



функцию для base64 надо писать самому, поищи в гугле алгоритм.
если тебе не надо отправлять файлы, то проще залогиниться на pop сервере,
логин и пароль отправляется в чистом виде, а потом уже общаешься с smtp.
PM MAIL   Вверх
jonie
Дата 22.4.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



писал когда-то такое:
Код

#ifndef __BASE64__H__
#define __BASE64__H__

namespace base64
{
  const char to_table[64] = 
  {
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
    'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
    'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
    'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
    'w', 'x', 'y', 'z', '0', '1', '2', '3',
    '4', '5', '6', '7', '8', '9', '+', '/'
  };

  const char from_table[128] =
  {
    -1, -1, -1, -1, -1, -1, -1, -1, // 0
    -1, -1, -1, -1, -1, -1, -1, -1, // 8
    -1, -1, -1, -1, -1, -1, -1, -1, // 16
    -1, -1, -1, -1, -1, -1, -1, -1, // 24
    -1, -1, -1, -1, -1, -1, -1, -1, // 32
    -1, -1, -1, 62, -1, -1, -1, 63, // 40
    52, 53, 54, 55, 56, 57, 58, 59, // 48
    60, 61, -1, -1, -1,  0, -1, -1, // 56
    -1,  0,  1,  2,  3,  4,  5,  6, // 64
     7,  8,  9, 10, 11, 12, 13, 14, // 72
    15, 16, 17, 18, 19, 20, 21, 22, // 80
    23, 24, 25, -1, -1, -1, -1, -1, // 88
    -1, 26, 27, 28, 29, 30, 31, 32, // 96
    33, 34, 35, 36, 37, 38, 39, 40, // 104
    41, 42, 43, 44, 45, 46, 47, 48, // 112
    49, 50, 51, -1, -1, -1, -1, -1  // 120
  };

  typedef unsigned char BYTE;
  typedef unsigned short WORD;
  typedef unsigned int  DWORD;
 
  template <class InputIterator, class OutputIterator>
  void encode(const InputIterator& begin, 
              const InputIterator& end, 
              OutputIterator out)
  {
        InputIterator it = begin;
        int lineSize = 0;    //длинна строки
        int n_bytes;        //кол-во байт взятых
        DWORD dwInput;        //для сохранения 3-х байт
        do{
            dwInput = 0;
            //берем три байта
            for(n_bytes = 0; (n_bytes<3)&&(it != end) ; ++n_bytes,++it){
                dwInput <<= 8;
                dwInput += static_cast<BYTE>(*it);
            }

            //кодируем в BASE64
            int n_bits = n_bytes*8;
            while (n_bits > 0){
                n_bits-=6;
                BYTE index = ((n_bits < 0) ? dwInput << -n_bits : dwInput >> n_bits) & 0x3F;
                *out =  to_table[index];
                ++out;
                ++lineSize;
            }
            
            //строка больше или равна 76 симаолам?
            if(lineSize >= 76){
                //*out = 0x0D;
                ++out;
                *out = 0x0A;
                ++out;
                lineSize = 0;
            }

        }while(n_bytes==3);

        //установим последнюю строку, если надо
        if(n_bytes){
            while(n_bytes++<3){
                *out = '=';
                ++out;
            }
        }
  }

  template <class InputIterator, class OutputIterator>
  void decode(const InputIterator& begin, 
              const InputIterator& end, 
              OutputIterator out)
  {
      InputIterator it = begin;
      int n_bytes = 0;
      BYTE c;
      do{
            n_bytes = 0;
            BYTE input[4] = {0, 0, 0, 0};
            //получаем 4 байта
            while( (n_bytes < 4)&&(it != end) ){
                if( (c = static_cast<BYTE>(*it)) == '=' )break;    //эти сомволы нафиг не нужны
                it++;
                for(int i=0;i<sizeof(to_table);i++){
                    if( c == to_table[i]){        //символ подходящий вообще
                        input[n_bytes] = from_table[c];
                        n_bytes++;
                        break;
                    }
                }
            }

            //получаем бинарные данные
            if (n_bytes >= 2)
            {
                *out = static_cast<BYTE>((input[0] << 2) + (input[1] >> 4));
                ++out;
                if (n_bytes >= 3)
                {
                    *out = static_cast<BYTE>((input[1] << 4) + (input[2] >> 2));
                    ++out;
                    if (n_bytes >= 4)
                    {
                        *out = static_cast<BYTE>((input[2] << 6) + input[3]);
                        ++out;
                    }
                }
            }

      }while(n_bytes==4);
  }


}    //end base64 namespace


#endif //__BASE64__H__

юзать, например так
Код

char str[]="PASSWORD";
std::string sts = "";
base64::encode(str, str+strlen(str), std::back_inserter(sts));
std::cout<<sts;



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Rififi
Дата 22.4.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Цитата(G0L1a7h @  22.4.2008,  02:07 Найти цитируемый пост)
функцию для base64 надо писать самому

если используется компилятор VC 7 и выше, то такая функция сидит где-то вместе с ATL
PM MAIL   Вверх
jonie
Дата 23.4.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



в atlenc.h она есть. там и UU есть..


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
EvoEvo
Дата 25.4.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



С   Base64 разобрался,  работает и письма отсылаются...
Но теперь возникла проблема с отправкой вложенного файла -  он отправляется, но приходит не как вложение, а как текст письма.
Вот код отправки файла:
Код

//*************************************************************
 //   -----------------  эта часть нужна для того, чтобы отправить письмо с вложением закодированным base64
    send(s,"MIME-Version: 1.0\r\n",19,0);
    strcpy(text,"Content-Type: multipart/mixed; boundary=\"--------bound--\"\r\n");
    send(s,text,strlen(text),0);
    send(s,"\r\n",2,0);
    send(s,"----------bound--\r\n",19,0);
    strcpy(text,"Content-Type: text/plain; charset=\Windows-1251\r\nContent-Transfer-Encoding: 8bit\r\n");
    send(s,text,strlen(text),0);
    send(s,"\r\n",2,0);
//   -----------------  конец MIME заголовка
// <<<
 

    // текст письма
 /* strcpy(text,"Hi!\nIt is a message for you\n");
  send(s,text,strlen(text),0);
 fout<<("send - %s", text);  */

// >>>
   //////////////ЗДЕСЬ БУДУТ ПИСАТЬСЯ ПРИКРЕПЛЕННЫЕ ФАЙЛЫ/////////////////

   send(s,"----------bound--\r\n",19,0);

   strcpy(text,"Content-Type: application/x-msdownload; name=\"");
   send(s,text,strlen(text),0);

   strcpy(text,filename);
   send(s,text,strlen(text),0);

   strcpy(text,"\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"");
   send(s,text,strlen(text),0);

   strcpy(text,filename);
   send(s,text,strlen(text),0);

   strcpy(text,"\"\r\n\r\n");
   send(s,text,strlen(text),0);



   SendFileData(s);    // здесь отправляем закодированный в base64  файл


   send(s,"\r\n",2,0);

   send(s,"----------bound----\r\n",19,0);
   
   
//***************************************************************
  

  // говорим, что закончили
  strcpy(text,"\r\n.\r\n");
  send(s,text,strlen(text),0);
 fout<<("send - %s", text);
  recv(s,text,sizeof(text),0);
 fout<<("recv - %s", text);

  // прощаемся с сервером
 strcpy(text,"QUIT");
 send(s,text,strlen(text),0);
  fout<<("send - %s", text);


Может что-то не в том порядке отправляю?... все, что здесь отправляю на их сервер- все в тексте письма пишется=(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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