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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка почты. Russian Knowledge Base from Vit. Немогу разобраться с кодом. 
V
    Опции темы
slnes
Дата 16.8.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Отправка почты. Delphi Russian Knowledge Base from Vit (Работа с сетью,интернетом, протоколами -> Работа с Email -> Как отправить Email?  -> Использование SMTP Relay Server ).

Немогу разобраться с кодом:
Строка 5: Что такое TMXRecord?
Строки 47 и 49: Что в них делается и для чего?

Функция PadZero находится в строке 116.

Код

function TfrmMain.GetMailServers: Boolean;
var
  i,x : integer;
  LDomainPart : String;
  LMXRecord : TMXRecord;
begin
 if not assigned(fmailServers) then fMailServers := TStringList.Create;

 fmailServers.clear;


  Result := true;
  with IdDNSResolver do
   begin


   QueryResult.Clear;

   QueryRecords := [qtMX];

   Msg('Setting up DNS query parameters');

   Host := edtDNS.text;
 
   ReceiveTimeout := StrToInt(edtTimeOut.text);  

   // Extract the domain part from recipient email address  
 
   LDomainPart := copy(edtRecipient.text,pos('@',edtRecipient.text)+1,length(edtRecipient.text));   

   // the domain name to resolve  
 
   try  

   Msg('Resolving DNS');  
 
   Resolve(LDomainPart);  

   if QueryResult.Count > 0 then  
 
     begin  

       for i := 0 to QueryResult.Count - 1 do  
 
         begin

         LMXRecord := TMXRecord(QueryResult.Items[i]);
 
         fMailServers.Append(PadZero(IntToStr(LMXRecord.Preference)) + '=' + LMXRecord.ExchangeServer);  

         end;  
 
     // sort in order of priority and then remove extra data
 
     fMailServers.Sorted := false;  

     for i := 0 to fMailServers.count - 1 do  
 
       begin
 
       x := pos('=',fMailServers.Strings[i]);  

       if x > 0 then fMailServers.Strings[i] :=  
 
         copy(fMailServers.Strings[i],x+1,length(fMailServers.Strings[i]));
 
       end;
 
     fMailServers.Sorted := true;
 
     fMailServers.Duplicates := dupIgnore;  

     Result := true;  
 
     end
 
   else  

     begin  
 
     Msg('No response from DNS server');
 
     MessageDlg('There is no response from the DNS server !', mtInformation, [mbOK], 0);

     Result := false;

     end;  

   except  

  
   on E : Exception do
 
     begin
 

     Msg('Error resolving domain');

     MessageDlg('Error resolving domain: ' + e.message, mtInformation, [mbOK], 0);

     Result := false;
 

     end;  

  
   end;
 

   end;  

  
end;


function TfrmMain.PadZero(s: String): String;
begin
 if length(s) < 2 then s := '0' + s;
 Result := s;
end; 


PM MAIL   Вверх
Lexicss
Дата 16.8.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

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



TMXRecord - походу какой-то свой тип.
LMXRecord := TMXRecord(QueryResult.Items[i]) - преобразование элемента массива к этому загадочному типу и присваивание переменной.
fMailServers.Append(PadZero(IntToStr(LMXRecord.Preference)) + '=' + LMXRecord.ExchangeServer);   -  тож некая пользовательская процедурка, наверное.

--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
Matematik
Дата 16.8.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

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



Функция GetMailServers создает список fMailServers (TStringList) и заполняет его именами хостов или ip адресов полученых от dns
Сортирует по имени
а далее программа пытается отослать сообщение через какой-нибудь из этих серверов
PM MAIL WWW ICQ   Вверх
slnes
Дата 16.8.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что TMXRecord это какой то тип мне понятно, только непонятно какой; искал в описании типов, в справке, так и не нашел ничего.

fMailServers.Append - это добавление в fMailServers - PadZero(IntToStr(LMXRecord.Preference)) + '=' + LMXRecord.ExchangeServer.

Непонятно для чего PadZero, Что такое LMXRecord.Preference, и что такое LMXRecord.ExchangeServer.



PM MAIL   Вверх
Matematik
Дата 16.8.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

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



TMXRecord - клас для хранения MX записи

Preference - предпочтение (англ) чем меньше тем лучше
ExchangeServer - собственно ip или host почтового сервера

PadZero нужно для того чтобы отсортировать StringList по Preference, те например получилось так
01=mx.mail.ru
10=mx1.mail.ru
20=mx2.mail.ru

из WIKIPEDIA http://ru.wikipedia.org/wiki/DNS
Запись MX ( mail exchange ) или почтовый обменник указывает сервер обмена почтой для данного домена.
PM MAIL WWW ICQ   Вверх
slnes
Дата 16.8.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, пока непонятно, буду думать
PM MAIL   Вверх
Matematik
Дата 16.8.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

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



думать полезно  smile 
PM MAIL WWW ICQ   Вверх
slnes
Дата 17.8.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



что означает запись в строке 19 (QueryRecords := [qtMX]), почему задание запроса именно в таком виде  [qtMX];?
Где выполняется запрос?
-------------------
Где можно почитать про тип TMXRecord?
------------------


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

Запрещено:

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

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

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

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

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


 




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


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

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