![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправить электронную почту [D7, XP]
Первокласник Вася © (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);
какое странное условие...