Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка почты без компонентов, Как????? 
:(
    Опции темы
Matematik
Дата 30.10.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Между заголовком и телом должна быть пустая строка. 
Файлы обычно шифруются BASE64.
PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 30.10.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть там пустая строка и шифрую в Base64
PM MAIL   Вверх
Matematik
Дата 30.10.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Dmitry_177 @  30.10.2006,  15:20 Найти цитируемый пост)
Есть там пустая строка

и в аттачах тоже?

Добавлено @ 14:27 
А вообще слабо сравнить твое сообщение с сообщением того же Outlook или TheBat
PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 30.10.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да, вот:
Код

function EncodeBase64(const inStr: string): string;

  function Encode_Byte(b: Byte): char;
  const
    Base64Code: string[64] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  begin
    Result := Base64Code[(b and $3F)+1];
  end;

var
  i: Integer;
begin
  i := 1;
  Result := '';
  while i <= Length(InStr) do
  begin
    Result := Result + Encode_Byte(Byte(inStr[i]) shr 2);
    Result := Result + Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4));
    if i+1 <= Length(inStr) then
      Result := Result + Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6))
    else
      Result := Result + '=';
    if i+2 <= Length(inStr) then
      Result := Result + Encode_Byte(Byte(inStr[i+2]))
    else
      Result := Result + '=';
    Inc(i, 3);
  end;
end;

...

SMTPSendString(MailSock, 'DATA');
SMTPRecvString(MailSock);  // Считываем с сервера
SMTPSendString(MailSock, 'From: ' + MailFrom);
SMTPSendString(MailSock, 'To: ' + MailTo);
SMTPSendString(MailSock, 'Subject: ' + Subject);
SMTPSendString(MailSock, 'MIME-Version: 1.0');
SMTPSendString(MailSock, 'Content-Type: multipart/mixed; boundary=MyBoundary');
SMTPSendString(MailSock, '--MyBoundary');
SMTPSendString(MailSock, 'Content-Type: text/plain; charset=koi8-r');
SMTPSendString(MailSock, 'Content-Transfer-Encoding: 8bit');
SMTPSendString(MailSock, '');
SMTPSendString(MailSock, 'Test E-M@il ' + DateTimeToStr(Now));
SMTPSendString(MailSock, '');
SMTPSendString(MailSock, '--MyBoundary');
SMTPSendString(MailSock, 'Content-Type: text/plain; name="1.txt"');
SMTPSendString(MailSock, 'Content-Disposition: attachment; filename="1.txt"');
SMTPSendString(MailSock, 'Content-Transfer-Encoding: base64');
SMTPSendString(MailSock, '');

hFile := CreateFile('c:\1.txt', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ReadFile(hFile, Str[1], GetFileSize(hFile, nil), BytesRead, nil);
CloseHandle(hFile);

SMTPSendString(MailSock, EncodeBase64(Str));  // Если тут послать уже готовую, зашифрованную в Base64 строку символов(скопировал из кода письма из The Bat), то все присылается как надо...
SMTPSendString(MailSock, #13#10 + '.');
SMTPSendString(MailSock, '--MyBoundary--');
SMTPSendString(MailSock, 'QUIT');


Добавлено @ 14:37 
Письмо то само правильно составлено, вот как файл считать и перекодировать в Base64...
PM MAIL   Вверх
Matematik
Дата 30.10.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



загрузка в строку файла
Код

procedure LoadStringFromFile(const FileName: string):string;
var
  Stream: TStream;
  Size: Integer;
begin
  result := '';
  Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    Size := Stream.Size;
    SetString(result, nil, Size);
    Stream.Read(Pointer(result)^, Size);
  finally
    Stream.Free;
  end;
end;

дальше передавай в EncodeBase64
Код

EncodeBase64(LoadStringFromFile(FileName))

PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 30.10.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо за код... Вы очень добры... Но я пишу на API, хотел бы без файлового потока обойтись, точнее без модуля Classes переводить файл в строку... функциями CreateFile и ReadFile сделал, в коде есть, в чем-то там ошибка...
PM MAIL   Вверх
Dmitry_177
Дата 30.10.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что-то вроде получается ))) Строку перевожу в Base64 и для наглядности(в качестве теста) вставляю ее в Memo.. Сделал я так, если файл больше 54 байт, то считываем его по 54 байта в строку, а если нет то в одну строчку...
Как такой алгоритм? Или надо еще как-то? А еще, если файл больше 54 байт я считываю по 54 байт, а последняя строка может быть вовсе и не 54 байта, и при переводе в Base64 оставшееся место стокт может занять мусор, как это убрать это? Я дкмал размер файла поделить на 54 и последнюю строку установить размер длиной на остаток от деления и считать... Но мне кажется это все как-то муторно, наверно есть способ получше, подскажите пожалйста... Заранее спасибо.

Код

var
 hFile: THandle;
 BytesRead: DWord;
 Str: string;
 FSize: DWord;
...

hFile := CreateFile('c:\1.txt', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

FSize := GetFileSize(hFile, nil);

if FSize > 54 then
 begin
   SetLength(Str, 54);
     repeat
       ReadFile(hFile, Str[1], 54, BytesRead, nil);
       Memo1.Lines.Add(EncodeBase64(Str));
     until BytesRead = 0;
 end
else
 begin
   SetLength(Str, FSize);
   ReadFile(hFile, Str[1], FSize, BytesRead, nil);
   Memo1.Text := EncodeBase64(Str);
 end;

CloseHandle(hFile);

PM MAIL   Вверх
Serg89
Дата 8.5.2007, 20:45 (ссылка)  | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dmitry_177 выложи пожалуйста полный сорц =)
PM MAIL   Вверх
MetalFan
Дата 9.5.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



вот "хакеров-ламеров" развелось... почту(файлы) слать без ведома пользователя... ай-ай-ай... нехорошо.
не успел зарегиться, а ему уже полный сорц подавай  smile 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
aktuba
Дата 9.5.2007, 13:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Serg89, твоя просьба - в раздел "Работа"...

MetalFan, а ты по-другому видел когда-нибудь?  smile Людям лень делать, проще просить как бомжам...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




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


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

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