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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с почтой, Отправить почту 
:(
    Опции темы
Гость_Felt
Дата 7.11.2004, 16:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Пытаюсь отправить почту. Вроде все делаю правильно, но не работает.
Код

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
   Form1.ComboBox1.Items.Add('Отправляем данные через сокет');
   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
   Form1.ComboBox1.Items.Add('Получаем ответ от команды');
   res := recv(Sock, buff, SizeOf(buff), 0);
   Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);
 end;

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

   { устанавливаем хост и порт сервера }
   Form1.ComboBox1.Items.Add('Устанавливаем хост и порт сервера');
   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;

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

   { приветствие сервера }
   Form1.ComboBox1.Items.Add('Приветствие сервера');
   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;

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

   { отключаемся от сервера }
   Form1.ComboBox1.Items.Add('Отключаемся от сервера');
   senddata('QUIT' + cl);

   result := true;
 finally
   { убиваем сокет }
   Form1.ComboBox1.Items.Add('Убиваем сокет');
   closesocket(sock);
   WSACleanup;
 end;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items.Clear;
if Mail(Edit1.Text, StrToInt(Edit2.Text), Edit3.Text, Edit4.Text, Edit5.Text, Memo1.Text) then
ShowMessage('Отправлено')
else
ShowMessage('Не отправлено');
end;


// В Edit1.Text smtp адрес 194.67.23.111
// В Edit2.Text порт 25
// Edit3.Text отправитель [email protected]
// Edit4.Text получатель [email protected]
// Edit5.Text тема письма Hello World
// Memo1.Text сам текст письма

Можно отправлять почту и с другого удобного smtp сервера, так что это не проблема
Кто чем сможет поможите плз...
  Вверх
Vit
Дата 8.11.2004, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



SMTP переменная содержит IP адрес сервера?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Гость_Felt
Дата 9.11.2004, 04:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну да, в виде 194.67.23.111
  Вверх
p0s0l
Дата 9.11.2004, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
  senddata('EHLO' + cl);

Тут надо не "EHLO", а "HELO" (привет! smile), причём, указывать имя отправителя:
Код
   senddata('HELO Felt' + cl);

Если так сделать, уходит до отсылки самого сообщения
Неправильно имхо само body отправляется...
Глянь сюда, поразбирайся:
http://weblogs.asp.net/dwanta/archive/2003/07/09/9883.aspx



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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