Посл.ответ |
Сообщение |
Ранг: 3.3 (гость) Активность: 0=0 Статус: Участник
|
Создано: 21 декабря 2006 12:31 · Личное сообщение · #1
Как пройти авторизацию на smtp сервере для отправки почты?
| Сообщение посчитали полезным: |
|
Ранг: 301.4 (мудрец), 194thx Активность: 0.17↘0.01 Статус: Участник
|
Создано: 21 декабря 2006 12:40 · Личное сообщение · #2
В такой последовательности отсылаем пакеты
EHLO _Nazvanie_
RSET
AUTH LOGIN
base64(_login_)
base64(_pass_)
| Сообщение посчитали полезным: |
Ранг: 3.3 (гость) Активность: 0=0 Статус: Участник
|
Создано: 21 декабря 2006 12:46 · Личное сообщение · #3
спасибо, сечас попробую написать
| Сообщение посчитали полезным: |
Ранг: 3.3 (гость) Активность: 0=0 Статус: Участник
|
Создано: 21 декабря 2006 12:52 · Личное сообщение · #4
а чем бы мне перекодировать строку в B64?
EHLO _Nazvanie_ // EHLO мы отсылаем сразу после helo, а название - это имя сервера?
| Сообщение посчитали полезным: |
Ранг: 3.3 (гость) Активность: 0=0 Статус: Участник
|
Создано: 21 декабря 2006 12:59 · Личное сообщение · #5
так, ну вот сейчас попробовал, запустил.
с сервером поздоровались успешно, сервер ответил expected "HELO <мои данные подключения от прова>",
затем то же самое, но с EHLO, затем 250-size <число> на RSET, далее описывать не буду.
Можно пример кода?
| Сообщение посчитали полезным: |
Ранг: 3.3 (гость) Активность: 0=0 Статус: Участник
|
Создано: 21 декабря 2006 13:06 · Личное сообщение · #6 |
Ранг: 301.4 (мудрец), 194thx Активность: 0.17↘0.01 Статус: Участник
|
Создано: 21 декабря 2006 13:11 · Поправил: Veliant · Личное сообщение · #7
а base64 для кого написано?
Вот мой коннект телнетом:
220 mail.ru ESMTP Fri, 22 Dec 2006 00:13:28 +0300
EHLO my
250-mx1.mail.ru Hello my [89.19.160.7]
250-SIZE 10485760
250-8BITMIME
250-AUTH PLAIN LOGIN
250 PIPELINING
RSET
250 Reset OK
AUTH LOGIN
334 VXNlcm5hbWU6
cmFzc2lsa2E5MA==
334 UGFzc3dvcmQ6
cmFzc2lsa2E=
235 Authentication succeeded
P.S.
Логин и пасс из примера особой ценности не представляют
PPS
Вот пример на дельфях. CS1 - TClientSocket....... Извиняюсь за длинный листинг
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
CS1: TClientSocket;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CS1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TAByte = array [0..maxInt-1] of byte;
type TPAByte = ^TAByte;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Encode(data:string) : string; overload;
const b64 : array [0..63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var ic,len : integer;
pi, po : TPAByte;
c1 : dword;
begin
len:=length(data);
if len > 0 then begin
SetLength(result, ((len + 2) div 3) * 4);
pi := pointer(data);
po := pointer(result);
for ic := 1 to len div 3 do begin
c1 := pi^[0] shl 16 + pi^[1] shl 8 + pi^[2];
po^[0] := byte(b64[(c1 shr 18) and $3f]);
po^[1] := byte(b64[(c1 shr 12) and $3f]);
po^[2] := byte(b64[(c1 shr 6) and $3f]);
po^[3] := byte(b64[(c1 ) and $3f]);
inc(dword(po), 4);
inc(dword(pi), 3);
end;
case len mod 3 of
1 : begin
c1 := pi^[0] shl 16;
po^[0] := byte(b64[(c1 shr 18) and $3f]);
po^[1] := byte(b64[(c1 shr 12) and $3f]);
po^[2] := byte('=');
po^[3] := byte('=');
end;
2 : begin
c1 := pi^[0] shl 16 + pi^[1] shl 8;
po^[0] := byte(b64[(c1 shr 18) and $3f]);
po^[1] := byte(b64[(c1 shr 12) and $3f]);
po^[2] := byte(b64[(c1 shr 6) and $3f]);
po^[3] := byte('=');
end;
end;
end else
result := '';
end;
Procedure Send(str:string);
begin
Form1.CS1.Socket.SendText(str+#13#10);
Form1.Memo1.Lines.Add(str);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CS1.Active:=true;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CS1.Active:=false;
end;
procedure TForm1.CS1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Send('EHLO Test');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Send('RSET');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Send('AUTH LOGIN');
Send(encode(Edit1.Text));
Send(encode(Edit2.Text));
end;
end.
| Сообщение посчитали полезным: |
Ранг: 3.3 (гость) Активность: 0=0 Статус: Участник
|
Создано: 21 декабря 2006 13:49 · Личное сообщение · #8
Спасибо большое, на этом, я думаю, вопрос исчерпан.
| Сообщение посчитали полезным: |