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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка емейл, проблем с отправкой точки в конце письма 
:(
    Опции темы
c0der
  Дата 27.11.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Помогите решить проблему с отправкой точки в конце письма.
Вроде все делаю правильно, но все равно приходит ошибка! smile 
Посмотрите может что не так?!
Зарание благодарен!

Код

unit MailSend;

interface

uses
  windows, winsock, DIMime;


function SendMail( SmtpServer:string; FromAddr:string; ToAddr:string; MessageText:string): boolean;

implementation

function InttoStr(const Value: integer): string; var S: string[11];
begin Str(Value, S); Result := S; end;


function LookupName(name:string):TInAddr;
var
HostEnt:PHostEnt;
InAddr:TInAddr;
begin
if name[4]='.' then InAddr.s_addr:=inet_addr(PChar(name))
else
begin
HostEnt:=gethostbyname(PChar(name));
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
end;
Result:=InAddr;
end;



function RecvText(S:TSocket):string;
const MAX_BUFF_SIZE=1024;
var
Recvbuff:array[0..MAX_BUFF_SIZE-1] of char;
iRecv:integer;
TempStr:string;
begin
Result:='';
ZeroMemory(@Recvbuff,SizeOf(RecvBuff));
iRecv:=recv(S,RecvBuff,MAX_BUFF_SIZE, 0);
if iRecv=0 then exit
else
if iRecv=Socket_Error then exit
else begin
TempStr:=RecvBuff;
Result:=Copy(TempStr,1,Pos(#13,TempStr));
end;
end;

function SendText(S:TSocket;Text:string):boolean;
const MAX_SEND_SIZE=1024;
var
SendBuff:array[0..MAX_SEND_SIZE] of char;
iSend:integer;
SendStr:string;
begin
Result:=false;
SendStr:=Text+#13#10;
if Length(SendStr)>MAX_SEND_SIZE then exit;
CopyMemory(@SendBuff,PChar(SendStr),Length(SendStr  ));
iSend:=send(S,SendBuff,Length(SendStr),0);
if iSend=SOCKET_ERROR then exit;
Result:=true;
end;

function SendMail( SmtpServer:string;FromAddr:string; ToAddr:string; MessageText:string): boolean;


var
WData:WSADATA;
sMailSocket{,sPOP3Socket}:TSocket;
saServerMail:SockAddr_In;
RecvMailText,SendMailText:string;
LocalHost     :ARRAY [0..63] OF CHAR;
ts: String;
 Rnd           :String;
begin

MessageBox(0,'start email send ',nil,mb_ok);
Result:=false;
if WSAStartup(MAKEWORD(1,1),WData)<>0 then exit;
sMailSocket:=socket(PF_INET,SOCK_STREAM,IPPROTO_IP  );
if sMailSocket=INVALID_SOCKET then exit;
saServerMail.sin_addr.s_addr:=htonl(INADDR_ANY);
saServerMail.sin_family:=AF_INET;
saServerMail.sin_port:=htons(25);
saServerMail.sin_addr:=LookupName(SmtpServer);
if connect(sMailSocket,saServerMail,SizeOf(saServerMail))=SOCKET_ERROR then exit;


//Randomize;
   // Rnd := '---'+IntToStr(Random(99999999))+'--'+IntToStr(Random(9999))+'-'; //generate boundary

//***********Connect***********//
RecvMailText:=RecvText(sMailSocket);
 MessageBox(0,pchar('connect --- 220? '+RecvMailText),nil,mb_ok);
  if Pos('220',RecvMailText)=0 then
   begin
    CloseSocket(sMailSocket);
    exit;
   end;

//*********HELO*********//
 GetHostName(LocalHost,SizeOf(LocalHost));
  SendMailText:='HELO Forum.ru '+LocalHost ;
   if not SendText(sMailSocket,SendMailText) then
     begin
      CloseSocket(sMailSocket);
       exit;
     end;
       RecvMailText:=RecvText(sMailSocket);
        MessageBox(0,pchar('HELO --- 250? '+RecvMailText),nil,mb_ok);
         if Pos('250',RecvMailText)=0 then
          begin
           CloseSocket(sMailSocket);
           exit;
          end;


//***********AUTH*************//
 begin
 SendMailText:='AUTH LOGIN ';
   if not SendText(sMailSocket,SendMailText) then
     begin
      CloseSocket(sMailSocket);
       exit;
     end;
  RecvMailText:=RecvText(sMailSocket);
 MessageBox(0,pchar('AUTH LOGIN --- 334? '+RecvMailText),nil,mb_ok);

//**************SEND LOGIN*************//
  ts:=MimeEncodeString('admin'); //login
   SendMailText:= ts;
      if not SendText(sMailSocket,SendMailText) then
     begin
      CloseSocket(sMailSocket);
       exit;
     end;
  RecvMailText:=RecvText(sMailSocket);
 MessageBox(0,pchar('LOGIN --- 334? '+RecvMailText),nil,mb_ok);

//************SEND PASS***************//
  ts:=MimeEncodeString('admin'); //pass
   SendMailText:= ts;
        if not SendText(sMailSocket,SendMailText) then
     begin
      CloseSocket(sMailSocket);
       exit;
     end;
  RecvMailText:=RecvText(sMailSocket);
 MessageBox(0,pchar('PASS --- 235? '+RecvMailText),nil,mb_ok);
 end;


//*****************MAIL FROM*************//
   SendMailText:='MAIL FROM:<[email protected]>'; //'+FromAddr+'
    if not SendText(sMailSocket,SendMailText) then
      begin
       CloseSocket(sMailSocket);
        exit;
      end;
       RecvMailText:=RecvText(sMailSocket);
       MessageBox(0,pchar('MAIL FROM --- 250? '+RecvMailText),nil,mb_ok);
        if Pos('250',RecvMailText)=0 then
         begin
          CloseSocket(sMailSocket);
          exit;
         end;



//*******************RCPT TO****************//
SendMailText:='RCPT TO:<'+ToAddr+'>'; // '' 
if not SendText(sMailSocket,SendMailText) then
begin
CloseSocket(sMailSocket);
exit;
end;
RecvMailText:=RecvText(sMailSocket);
MessageBox(0,pchar('RCPT TO: --- 250? '+RecvMailText),nil,mb_ok);
if Pos('250',RecvMailText)=0 then
begin
CloseSocket(sMailSocket);
exit;
end;




//*******************DATA****************//
SendMailText:='DATA';
if not SendText(sMailSocket,SendMailText) then
begin
CloseSocket(sMailSocket);
exit;
end;
RecvMailText:=RecvText(sMailSocket);
MessageBox(0,pchar('DATA --- 354? '+RecvMailText),nil,mb_ok);
if Pos('354',RecvMailText)=0 then
begin
CloseSocket(sMailSocket);
exit;
end;

SendMailText:=   'X-Mailer: StudMailer'#13#10+
                 'From: [email protected]'#13#10+    //+mailFrom+
                 'To: '+ToAddr+ #13#10+          // +mailTo+   
                 'Subject: test!'#13#10+         //+mailSubject+
                 'MIME-Version: 1.0'#13#10+
                 'Content-Type: text/plain; charset=windows-1251'#13#10#13#10+
                 MessageText;  // body mail

SendText(sMailSocket,SendMailText);
SendMailText:='.';
if not SendText(sMailSocket,SendMailText) then
RecvMailText:=RecvText(sMailSocket);
MessageBox(0,pchar('. --- 250? '+RecvMailText),nil,mb_ok);
if Pos('250',RecvMailText)=0 then
begin
CloseSocket(sMailSocket);
exit;
end;
SendMailText:='QUIT'#13#10 ;
SendText(sMailSocket,SendMailText);
Result:=true;
WSACleanUp;
end;

end.
 

Это сообщение отредактировал(а) c0der - 27.11.2010, 21:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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