Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отправить электронную почту [D7, XP]


Страницы:   1 2 3

Первокласник Вася ©   (2008-05-23 14:36:00) 

Добрый день, Мастера!

Подскажите пожалуйста, что в коде не правильно. Код из DelphiWorld6
У меня ящик прописан на Rambler.ru


{
smtp - ip адрес smtp сервера
port - порт smtp сервера, по умолчанию 25
from - адрес отправителя
dest - адрес получателя
subject - тема письма
body - текст писма
Возвращает True если письмо было успешно отправленно...
}

function mail(smtp: string; port: integer; from, dest, subject,body: string): bool;
const
 cl = #13#10;
var
WSAData: TWSAData;
 Host: TSockAddrIn;
 Sock: TSocket;
 res: Integer;
 buff: array[1..255] of Char;

 { отправляем данные через сокет }
 procedure senddata(str: string);
 var
   i: integer;
 begin
   for i := 1 to Length(str) do
     if send(Sock, str[i], 1, 0) = SOCKET_ERROR then
       exit;
 end;

 { получаем ответ от команды }
 function recvdata(accept: string): bool;
 var
   buff: array[1..255] of Char;
 begin
   res := recv(Sock, buff, SizeOf(buff), 0);
   Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);
 end;

begin
 try
   result := false;
   { инициализация сокета }
   WSAStartUp(257, WSAData);
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
   if Sock = INVALID_SOCKET then
     Exit;

   { устанавливаем хост и порт сервера }
   res := inet_addr(PChar(smtp));
   if res <= 0 then
     exit;

   Host.sin_family := AF_INET;
   Host.sin_port := htons(port);
   Host.sin_addr.S_addr := res;

   { подключаемся к серверу }
   if connect(Sock, Host, SizeOf(Host)) > 0 then
     Exit;

   { приветствие сервера }
   if not recvdata('220') then
     Exit;

   { EHLO }
   senddata('EHLO' + cl);
   if not recvdata('250') then
     Exit;

   { MAIL FROM: }
   senddata('MAIL FROM:' + from + cl);
   if not recvdata('250') then
     Exit;

   { RCPT TO: }
   senddata('RCPT TO:' + dest + cl);
   if not recvdata('250') then
     Exit;

   { DATA }
   senddata('DATA' + cl);
   if not recvdata('354') then
     Exit;

   { отправляем текст сообщения }
   senddata('Subject:' + subject + cl + cl + body + cl + '.');
   if not recvdata('250') then
     Exit;

   { отключаемся от сервера }
   senddata('QUIT' + cl);

   result := true;
 finally
   { убиваем сокет }
   closesocket(sock);
   WSACleanup;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{
smtp - ip адрес smtp сервера
port - порт smtp сервера, по умолчанию 25
from - адрес отправителя
dest - адрес получателя
subject - тема письма
body - текст писма}

 if mail('127.0.0.1',25,'Mymail@rambler.ru','MyMail@rambler.ru','ПРИВЕТ!!!!!!!!','TE ST TEST TEST!!!') then
    showmessage('TRUE') else
    showmessage('FALSE');
end;


Отправляю сообщение, функция возвращает TRUE, проверяю свой ящик, а отправленного письма нет! Что неправильно?
Может необходимо ещё и получение письма реализовать? Или как?

ПРИМЕЧАНИЕ:MyMail в приведённом коде - для примера


TIF   (2008-05-23 14:52:00) [41]

? Сторонние ?

По-моему, я их к себе в D7 не ставил. они там сразу были! :) Что я делал не так? )))


Первокласник Вася   (2008-05-23 14:51:00) [42]

Нашёл IdSMTP1, бросил его на форму. Но немного не знаю свойства этого компонента. Подскажите пожалуйста, как пользоваться им. Или маленький пример покажите пожалуйста. Думаю что с примером разберусь.


Palladin   (2008-05-23 14:48:00) [43]


> Это кажется в delphi6 есть, у меня delphi7

тебе не правильно кажется, это вообще сторонние компоненты


Первокласник Вася   (2008-05-23 14:47:00) [44]

Работаю через TIdSMTP (отправка писем) на mail.ru и yandex.ru
Без всяких проблем

К тому же, там всё значительно легче ;)



Это кажется в delphi6 есть, у меня delphi7


TIF   (2008-05-23 14:45:00) [45]

Работаю через TIdSMTP (отправка писем) на mail.ru и yandex.ru
Без всяких проблем

К тому же, там всё значительно легче ;)


Palladin   (2008-05-23 14:45:00) [46]


>  Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);

какое странное условие...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо