Помогите с отправкой письма! Проблема состоит не в шифровке данных с помощью base64. Нужен код на отправку письма с аттачментом через WinSock. Те примеры, что в инете валяются не работают Вот вариант, который я использую. Посмотрите пожалуйста и скажите в чем трабл (как сделать так, чтобы Pupkin2 остался довольным ): Code: uses WinSock .... function LookupName(host: string): TInAddr; var HostEnt: PHostEnt; InAddr: TInAddr; begin HostEnt := gethostbyname(PChar(host)); FillChar(InAddr, SizeOf(InAddr), 0); if HostEnt <> nil then begin with InAddr, HostEnt^ do begin S_un_b.s_b1 := h_addr^[0]; S_un_b.s_b2 := h_addr^[1]; S_un_b.s_b3 := h_addr^[2]; S_un_b.s_b4 := h_addr^[3]; end; end; Result := InAddr; end; function GetComputerNetName: string; var buffer: array[0..255] of char; size: dword; begin size := 256; if GetComputerName(buffer, size) then Result := buffer else Result := '' end; procedure SMTPSendString(MailSocket:TSocket;Str:string); var Buffer:Array[0..255] of char; begin StrPCopy(Buffer,Str); Send(MailSocket,Buffer,length(Str),0); end; procedure TForm1.Button1Click(Sender: TObject); var WSA:TWSAData; MailSocket:TSocket; SMTPServer:TSockAddr; begin WSAStartup(MAKEWORD(1,0),WSA); MailSocket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP ); ZeroMemory(@SMTPServer,SizeOf(SMTPServer)); SMTPServer.sin_family:=AF_INET; SMTPServer.sin_port:=htons(25); SMTPServer.sin_addr:=LookupName('smtp.mail.ru'); if Connect(MailSocket,SMTPServer,SizeOf(SMTPServer))= 0 then begin SMTPSendString(mailsocket,'HELO '+ GetComputerNetName + CTRLF); SMTPSendString(mailsocket,'AUTH LOGIN ' + CTRLF + b64encode('[B][COLOR=Indigo]Pupkin1[/COLOR][/B]') + CTRLF + b64encode('[B][COLOR=Indigo]password[/COLOR][/B]') + CTRLF); SMTPSendString(mailsocket,'MAIL FROM:' + '[B][COLOR=Indigo][email protected][/COLOR][/B]' + CTRLF + 'RCPT TO:' + '[B][COLOR=Yellow][email protected][/COLOR][/B]' + CTRLF); SMTPSendString(mailsocket,'DATA' + CTRLF + 'From: "' + '[B][COLOR=Indigo]Pupkin1[/COLOR][/B]' + '" <' + '[B][COLOR=Indigo][email protected][/COLOR][/B]' + '>' + CTRLF + 'To: "' + '[B][COLOR=Yellow]Pupkin2[/COLOR][/B]' + '" <' + '[B][COLOR=Yellow][email protected][/COLOR][/B]' + '>' + CTRLF + 'Subject: ' + '[B]TESTING[/B]' + CTRLF); SMTPSendString(mailsocket,'[B][COLOR=Blue]DONE!!!![/COLOR][/B]'+CTRLF); SMTPSendString(mailsocket,CTRLF+'.'+CTRLF+CTRLF+'QUIT'); end else ShowMessage('[COLOR=Red]ERROR[/COLOR]'); CloseSocket(MailSocket); WSACleanup; end;
ты что, хочешь чтобы тебе на тарелочке с голубой каемочкой функцию выложили? ты сам попотей, я как раз выложил ссылки не на готовое, а на теорию. там на асме как раз таки и не реализован аттач, но теоретически вроде все доходчиво. почитай, кодирование в бейс64 в двух последних ссылках. зы я кстати тоже асм не знаю и писал на делфи. зыы здорово выручил снифер для написания последних штрихов и связывания обрывков кода в единое целое. к стати, где то тут (на форуме) натыкался на модуль для отправки писем с аттачем, кажись в разделе с полезными модулями, попробуй поискать.
Я с тем, что ты мне дал на асме разобрался и как аттачмент отправить и все такое. Но мне нужно реализовать все на Delphi и никак не получается! Я те же самые коменды через telnet задовал - получается, а программно нет! Вот и прошу помочь! Может я где в сокетах ошибся?! Я итак юзаю все возможные варианты, и те полезные модули смотрел (то, что выше это я их упрощал). НЕ РАБОТАЕТ!
Все сегодня сам разобрался со всем, теперь работает! Вопрос закрыт. t04, все равно спасибо за исходники асма, они чуть помогли
Кароче ребята вопрос может не по теме ,но всётаки !! Может кто знает как можно лицензионный ключ узнать к программе ,возможно ли её перепрограмировать ? Просто когда я открываю программу она выбивает введите лицензионный ключ !!! А когда закрываю это окно то и программа полностью закрывается! ПРОСТО ключик к этой проге стоит оч много бабла!
Ты щас сам понял что написал??? Ты попробуй подумать что нужно написать в посте если тебе нужен ключ от проги??? отвечать на вапрос не буду так как он задан не корректно, нет названия проги к которой нужен ключ, сам подумай защита может любая стоять и никто тебе не че не скажет т.к. не на что отвечать. единственное..... на счет перепограммировать, дизасемблер тебе в руки, если тебе это о чем нить говорит.
Запускаешь Дельфи, нажимаешь Shift+Ctrl+F11 в появившемся окне переходишь на закладку Application нажимаешь кнопку Load Icon и выбираешь че те надо, потом жмешь окей.
Помогите с ресурсами Доброго Всем времени суток. У меня такой вопрос, как с компилировать файл ресурсов с гиф анимациями. Как сделать тоже самое с бмп ико и другима стандартными для борланда я знаю а скомпилить гифы в файл ресурсов не могу. Теперь в качстве отступления объясню причину вставки. Это необходимо для вставки в RxRichEdit для этого пользуюсь таким кодом взятым с дельфисоурса Code: var frmMain: TfrmMain; implementation {$R *.DFM} {$R Smiley.res} uses RichEdit; type TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall; TEditStream = record dwCookie: Longint; dwError: Longint; pfnCallback: TEditStreamCallBack; end; type TMyRichEdit = TRxRichEdit; // EditStreamInCallback callback function function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall; var theStream: TStream; dataAvail: LongInt; begin theStream := TStream(dwCookie); with theStream do begin dataAvail := Size - Position; Result := 0; if dataAvail <= cb then begin pcb := read(pbBuff^, dataAvail); if pcb <> dataAvail then Result := UINT(E_FAIL); end else begin pcb := read(pbBuff^, cb); if pcb <> cb then Result := UINT(E_FAIL); end; end; end; // Insert Stream into RichEdit procedure PutRTFSelection(RichEdit: TMyRichEdit; SourceStream: TStream); var EditStream: TEditStream; begin with EditStream do begin dwCookie := Longint(SourceStream); dwError := 0; pfnCallback := EditStreamInCallBack; end; RichEdit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, Longint(@EditStream)); end; // Load a smiley image from resource function GetSmileyCode(ASimily: string): string; var dHandle: THandle; pData, pTemp: PChar; Size: Longint; begin pData := nil; dHandle := FindResource(hInstance, PChar(ASimily), RT_RCDATA); if dHandle <> 0 then begin Size := SizeofResource(hInstance, dHandle); dhandle := LoadResource(hInstance, dHandle); if dHandle <> 0 then try pData := Resource(dHandle); if pData <> nil then try if pData[Size - 1] = #0 then begin Result := StrPas(pTemp); end else begin pTemp := StrAlloc(Size + 1); try StrMove(pTemp, pData, Size); pTemp[Size] := #0; Result := StrPas(pTemp); finally StrDispose(pTemp); end; end; finally UnlockResource(dHandle); end; finally FreeResource(dHandle); end; end; end; procedure InsertSmiley(ASmiley: string); var ms: TMemoryStream; s: string; begin ms := TMemoryStream.Create; try s := GetSmileyCode(ASmiley); if s <> '' then begin ms.Seek(0, soFromEnd); ms.Write(PChar(s)^, Length(s)); ms.Position := 0; PutRTFSelection(frmMain.RXRichedit1, ms); end; finally ms.Free; end; end; procedure TfrmMain.SpeedButton1Click(Sender: TObject); begin InsertSmiley('Smiley1'); end; procedure TfrmMain.SpeedButton2Click(Sender: TObject); begin InsertSmiley('Smiley2'); end; // Replace a :-) or :-( with a corresponding smiley procedure TfrmMain.RxRichEdit1KeyPress(Sender: TObject; var Key: Char); var sCode, SmileyName: string; procedure RemoveText(RichEdit: TMyRichEdit); begin with RichEdit do begin SelStart := SelStart - 2; SelLength := 2; SelText := ''; end; end; begin If (Key = ')') or (Key = '(') then begin sCode := Copy(RxRichEdit1.Text, RxRichEdit1.SelStart-1, 2) + Key; SmileyName := ''; if sCode = ':-)' then SmileyName := 'Smiley1'; if sCode = ':-(' then SmileyName := 'Smiley2'; if SmileyName <> '' then begin Key := #0; RemoveText(RxRichEdit1); InsertSmiley('Smiley1'); end; end; end; и еще вопросик такой возможно кто знает как можно избежать компилирования файла ресурсов и вставлять их или заменять непосредственно. Премного благодарен буду за все идеи помогите.... PS: простите за ужасное оформление кода)))
=== Begin gifs.rc === mygif rcdata "имя_gif-файла.gif" mygif1 rcdata "RCDATA_1" === End dots.rc === Потом скомпилировать его командой brcc32 gifs.rc и получить gifs.res В начало модуля добавь строчку {$R gifs.res} Не примите за флуд, но разобрался сам. За рестор спасибо, стоит) о нем не думал даже.
[OFFTOP] эхх вы хакеры... дык... а взять любой оконный менеджер и сделать: 1. деактивацию окна 2. спрятать окно, не тру? можно еще DESTROY послать... [/OFFTOP]
помогите разобраться, делаю так: Code: ... type FLAP_HDR = record Sign : byte; ChID : byte; SEQ : word; Len : word; end; ... var buff:FLAP_HDR; begin recv(iSock,buff,buff_size,0); ... приходит: Code: 2a 01 df a7 00 04 00 00 00 01 должно приходить(данные снифера): Command Start: 0x2a Channel ID: New Connection (0x01) Sequence Number: 57255 Data Field Length: 4 Protocol Version: 00000001 а у меня приходит Sign : 04; ChID : 01; SEQ : 42975; Len : 400; то есть в SEQ приходит не Code: [df a7] a Code: [a7 df] а в Len приходит не Code: [00 04] а Code: [04 00] как поменять байты местами что бы все работало нормально?
t04 Ну все хорошо работает и без ошибок! Проблема в недопонимании. Уж так повелось, что в процессорах интел-совместимых, числа в памяти идут "Старший байт имеет старший адресс"!!! Т.е. когда ты отправишь данные и примишь их "FLAP_HDR" - все встанет на свои места.
За это конечно благодарствую, но имел в виду немного другое.. нужно изменить иконку так, чтобы при запуске проги эта же иконка отображалась.. сверху... не знаю, как объяснить... там , где название...
Помогите плз разобраться с ф-цией WaveOutOpen (api) Было бы хорошо с примерчиком. Курил мсдн, но не помог (