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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка почты 
V
    Опции темы
Albinos_x
Дата 23.4.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



С сетью работаю первый раз.
Вот возникла задача: Отправить письмо на E-mail при загрузке программы...

Пробовал два способа взятых с этого форума
Первый:
Код

...
   SMTP: TIdSMTP;
    Mes: TIdMessage;
...
  smtp.Host := 'localhost';
  smtp.Port := 25;
  mes.From.Text := '[email protected]';
  mes.Recipients.EMailAddresses := '[email protected]';
  mes.Subject := 'Albinos';
  mes.Body.Text := 'Test';
  smtp.Connect(100000);   //<-  Ошибка Socket Error # 10061 Connection refused
  smtp.Send(mes);
  smtp.Disconnect;



и второй
Код

...
function sendmail(const smtp, mail_from, mail_to, body: string): boolean;
const ok = '250';    
       cl = #13#10;    
var WSAData: TWSAData;    
   Host: TSockAddrIn;    
   Sock: TSocket;    
   res: integer;    
   hostEnt: PHostEnt;    
 { îòïðàâëÿåì äàííûå ÷åðåç ñîêåò }    
 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(const accept: string): bool;    
 var buff: array[1..255] of char;    
 begin    
   res := recv(Sock, buff, 255, 0);    
   result := (res = SOCKET_ERROR) or (copy(buff, 1, 3) = accept);    
 end;    
begin    
 result := false;    
 try    
   WSAStartUp($101, WSAData);    
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);    
   if Sock = INVALID_SOCKET then exit;    
   // ïîëó÷àåì IP àäðåñ SMTP-ñåðâåðà è ïåðåâîäèì åãî ÷åðåç inet_addr    
   hostEnt := gethostbyname(PChar(smtp));
   if hostEnt = nil then exit;    
   res := inet_addr(PChar(inttostr(byte(hostEnt^.h_addr_list^[0]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[1]))+'.'+    
            inttostr(byte(hostEnt^.h_addr_list^[2]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[3]))));    
   if res <= 0 then exit;    
   { óñòàíàâëèâàåì õîñò è ïîðò ñåðâåðà }    
   Host.sin_family := AF_INET;    
   Host.sin_port := htons(25); // ïîðò 25, ìîæåøü ïîìåíÿòü    
   Host.sin_addr.S_addr := res;    
   if connect(Sock, Host, SizeOf(Host)) > 0 then exit;    
   sleep(200);    
   if not recvdata('220') then exit; // ïðèâåòñòâèå ñåðâåðà    
   senddata('HELO SANTA' + cl); // ïîñëå HELO ìîæåøü íàïèñàòü ñâîå ïðèâåòñòâèå    
   sleep(200);    
   if not recvdata(ok) then exit;    
   senddata('MAIL FROM:' + '<'+mail_from+'>' + cl);    
   sleep(200);    
   if not recvdata(ok) then exit;
   senddata('RCPT TO:' + '<'+mail_to+'>' + cl);    
   sleep(200);    
   if not recvdata(ok) then exit;    
   senddata('DATA' + cl);    
   sleep(200);    
   if not recvdata('354') then exit;    
   senddata(body + cl + '.' + cl); // îòïðàâëÿåì òåêñò ñîîáùåíèÿ    
   sleep(200);    
   if not recvdata(ok) then exit;    
   senddata('QUIT' + cl); // îòêëþ÷àåìñÿ îò ñåðâåðà    
   result := true;    
 finally    
   closesocket(sock);    
   WSACleanup    
 end;
...
sendmail('smtp.yandex.ru', '[email protected]', '[email protected]', 'hello there!');

в этом на почтовый ящик ничего не приходит...

Помогите, пожалуйста, кто знает как решить задачку любым из способов...

Заранее спасибо! smile

Это сообщение отредактировал(а) Albinos_x - 12.1.2006, 23:18


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Кто-нибудь делал это когда-либо?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Благодаря Girder
В первом способе ошибка ушла
и даже индикатор в нижнем правом углу показывает что, что-то отсылается и в первом и во втором методе, но на мыло по прежнему ничего падать не хочет...

Добавлено @ 18:55
Пробовал уже
smtp.Host := 'smtp.yandex.ru';
и
smtp.Host := 'smtp.nightmail.ru';

но всё без изменений


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



теперь делаю так...

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
smtp:=TIdSMTP.Create(nil);
 mes:=TIdMessage.Create(nil);
 smtp.Host := 'smtp.nightmail.ru';
 smtp.Port := 25;
 smtp.Password:='xxxxxx';
 smtp.Username:='Albinos';
 smtp.AuthenticationType:=atLogin; //Òèïî ïî ïàðîëþ è âñå òàêîå
 smtp.HeloName:='Info';
 mes.From.Text := '[email protected]';
 mes.Sender.Text:='[email protected]';
 mes.Recipients.EMailAddresses:='[email protected]';
 mes.Subject := 'al';
 mes.Body.Text :='Hello! Is test. If you see, hence all ok!!!';
 mes.MessageParts.Clear;
 try
  smtp.Connect;
  smtp.Send(mes);
 except
 end;
 smtp.Disconnect;
 mes.Free;
 smtp.Free;
Label1.Caption:='Finished';
end;


по прежнему ничего не приходит...

Кто-нибудь знает, что не так?

Это сообщение отредактировал(а) Albinos_x - 12.1.2006, 23:19


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Не люблю я индейцев, поэтому кодом не помогу.
Но есть предположение, что SMTP требует SSL аутентификации.
PM   Вверх
RA
Дата 25.4.2005, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



---------

Это сообщение отредактировал(а) RAdmin - 30.4.2005, 16:11
PM   Вверх
Albinos_x
Дата 25.4.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата
Вот щас шлянул IdSMTP1.Socksinfo.Authentication := SaUsernamePasssword


что-то не принимает делфя эту строчку...
Не знает он что такое Socksinfo и SaUsernamePasssword

Цитата
Не люблю я индейцев, поэтому кодом не помогу.


А есть другие способы, под 7 делфю?

Это сообщение отредактировал(а) Albinos_x - 25.4.2005, 16:17


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Блин сложно разбираться в компонентах к каторым нет описания и исходников. smile

Вобщем давай тогда мануально, в свойсвах компонента IdSMTP1 найди SocksInfo
в нём попробуй выставить в параметре Authentication - "saUsernamePassword"
PM   Вверх
RA
Дата 25.4.2005, 16:44 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Цитата(Albinos_x @ 25.4.2005, 16:15)
А есть другие способы, под 7 делфю?


Есть нормальные компоненты ICS для этих и иных целей,
http://www.overbyte.be
(С исходниками и примерами)


ICS - The Best smile
PM   Вверх
Albinos_x
Дата 25.4.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата
Блин сложно разбираться в компонентах к каторым нет описания и исходников


и не говори...


Цитата
Вобщем давай тогда мануально, в свойсвах компонента IdSMTP1 найди SocksInfo
в нём попробуй выставить в параметре Authentication - "saUsernamePassword"


У меня нет такого параметра в этом компоненте...
...?!?...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
_hunter
Дата 25.4.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



есть к ним и описание и исходники smile -- на оффсайт сходите


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Albinos_x
Дата 25.4.2005, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Цитата
на оффсайт сходите


английский, к сожалению, не знаю...

Да и поиск там ничего не дал...

Ни черта там понять не могу...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



Цитата(_hunter @ 25.4.2005, 17:36)
есть к ним и описание и исходники  -- на оффсайт сходите

Я то думал они платные. smile

Цитата(Albinos_x @ 25.4.2005, 16:50)
У меня нет такого параметра в этом компоненте...


Мда, сейчас посмотрел на идейцев из D7 там и правда нет такого smile
Но в D6 Indy v8.025 точно есть.


Кароче дело обстаит так: для доступа к SSL кидай на форму из
вкладки Indy I/0 Handlers компонент IdServerIOHandlerSSL1 (вот в этом компоненте нужно порыться и настроиться) ,
каторы подключи к IdSMTP1.
Далее сам. smile
Добавлено @ 19:45
А насчёт Socksinfo это я касяк выдал, как я толькочто заметил оно для соединения через Proxy.

Это сообщение отредактировал(а) RAdmin - 25.4.2005, 19:42
PM   Вверх
Albinos_x
Дата 25.4.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



спасибо...

будем разбираться...

{но уже не сегодня, пора спать (время 0.56)}


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Girder
Дата 26.4.2005, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



1. У тебя должен быть доступен DNS сервер(ы);
2. Открой новое приложение... и брось на форму:
- TIdAntiFreeze;
- TIdDNSResolver;
- TButton... smile
3. Не забудь подвесить на OnClick кнопки процедуру из кода... smile

Типо сам... код(а точнее весь модуль):
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdComponent, IdUDPBase, IdUDPClient, IdDNSResolver,
  IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, IdSMTP, IdMessage;

const
 MAX_HOSTNAME_LEN=128;
 MAX_DOMAIN_NAME_LEN=128;
 MAX_SCOPE_ID_LEN=256;

type
 IP_ADDRESS_STRING =packed record
  S: array [0..15] of Char;
 end;
 IP_MASK_STRING=IP_ADDRESS_STRING;
 PIP_ADDR_STRING=^_IP_ADDR_STRING;
 _IP_ADDR_STRING=packed record
   Next:PIP_ADDR_STRING;
   IpAddress:IP_ADDRESS_STRING;
   IpMask:IP_MASK_STRING;
   Context:DWORD;
 end;
 IP_ADDR_STRING=_IP_ADDR_STRING;
 PFIXED_INFO=^FIXED_INFO;
 FIXED_INFO=packed record
  HostName:array [0..MAX_HOSTNAME_LEN+3] of Char;
  DomainName:array[0..MAX_DOMAIN_NAME_LEN+3] of Char;
  CurrentDnsServer:PIP_ADDR_STRING;
  DnsServerList:IP_ADDR_STRING;
  NodeType:UINT;
  ScopeId:array [0..MAX_SCOPE_ID_LEN+3] of Char;
  EnableRouting:UINT;
  EnableProxy:UINT;
  EnableDns:UINT;
 end;

type
  TForm1 = class(TForm)
    IdAntiFreeze1: TIdAntiFreeze;
    IdDNSResolver1: TIdDNSResolver;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function GetNetworkParams(FixedInfo:PFIXED_INFO; var OutBufLen:DWord):DWORD; stdcall; external 'iphlpapi.dll';

implementation

{$R *.dfm}

function GetMailServers(IPHostDNS,ADomain:string;RTimeOutDNS:integer;
                        var ResMailServers:TStrings; DNS:TIdDNSResolver):boolean;
{Функция определяет список Mail серверов для доменого адреса ADomain.
PS: ADomain - енто домен... на который шлеш письма(в твоем случаи енто yandex.ru}
var i,x,n:integer;
    rb:Word;
    AHostMail:string;
begin
 Result:=true;
 with DNS do
  begin
   QueryResult.Clear;
   QueryRecords:=[qtMX];
   Host:=IPHostDNS;
   ReceiveTimeOut:=RTimeOutDNS;
   try
    Resolve(ADomain);
    i:=QueryResult.Count;
    if i>0 then
     begin
      try
       ResMailServers.Free;
      except
      end;
      ResMailServers:=TStringList.Create;
      repeat
       rb:=TMXRecord(QueryResult.Items[0]).Preference;
       n:=0;
       for x:=0 to QueryResult.Count-1 do
        if TMXRecord(QueryResult.Items[x]).Preference<=rb then
         begin
          rb:=TMXRecord(QueryResult.Items[x]).Preference;
          n:=x;
         end;
       try
        AHostMail:=trim(TMXRecord(QueryResult.Items[n]).ExchangeServer);
       except
        AHostMail:='';
       end;
       QueryResult.Delete(n);
       if AHostMail<>'' then
        begin
         ResMailServers.Append(AHostMail);
        end;
       dec(i);
      until (i=0);
      if ResMailServers.Count=0 then
       begin
        Result:=false;
        ResMailServers.Free;
       end; 
     end else Result:=false;
   except
    Result:=false;
   end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var FMailServers,IPHostDNS:TStrings;
    smtp:TIdSMTP;
    mes:TIdMessage;
    i:integer;
    FI:PFIXED_INFO;
    S:DWord;
    n:PIP_ADDR_STRING;
begin
 S:=0;;
 if GetNetworkParams(nil,S)<>ERROR_BUFFER_OVERFLOW then exit;
 GetMem(FI,S);
 IPHostDNS:=TStringList.Create;
 FMailServers:=TStringList.Create;
 if GetNetworkParams(FI,S)=ERROR_SUCCESS then
  begin
   n:=FI^.CurrentDnsServer;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
   if FI^.DnsServerList.IpAddress.S[0]<>#0 then
    IPHostDNS.Add(FI^.DnsServerList.IpAddress.S);
   n:=FI^.DnsServerList.Next;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
  end;
 FreeMem(FI,S);
 while IPHostDNS.Count>0 do
  begin
   if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'yandex.ru',5000,FMailServers,IdDNSResolver1) then
    begin
     smtp:=TIdSMTP.Create(nil);
     mes:=TIdMessage.Create(nil);
     smtp.Port := 25;
     smtp.AuthenticationType:=atNone;
     smtp.HeloName:='Info';
     mes.From.Text:='[email protected]';
     mes.Sender.Text:='[email protected]';
     mes.Recipients.EMailAddresses:='[email protected]'; //Получатель
     mes.Subject:='al';
     mes.Body.Text:='Hello! Is test. If you see, hence all ok!!!';
     mes.MessageParts.Clear;
     for i:=0 to FMailServers.Count-1 do
      begin
       smtp.Host:=trim(FMailServers.Strings[i]);
       try
        smtp.Connect;
        smtp.Send(mes);
        IPHostDNS.Clear;
        break;
       except
       end;
       smtp.Disconnect;
      end;
     mes.Free;
     smtp.Free;
    end;
   if IPHostDNS.Count>0 then IPHostDNS.Delete(IPHostDNS.Count-1); 
  end;
 try
  IPHostDNS.Free;
  FMailServers.Free;
 except
 end;
end;

end.

PS: На yandex ентот код... не натравливал smile (на моих - работает)

Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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