Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Функция по отправке писем странно работает. IdSMTP


Автор: Сергей Плоткин 20.6.2005, 15:17
Есть крохотная функция, использующая Indy:
Код


uses
   ..., IdSmtp, IdMessage, ...

function SendMail(Host:String;AdressTo:String;Subject:String;Text:String;FileAttach:String):Boolean;
var
  SMTP:TIDSMTP;
  Attach:TIDAttachment;
  Y:Integer;
  Msg:TIDMessage;
begin
  Y:=0;
  Result:=True;
  SMTP:=TIDSMTP.Create(nil);
  Msg:=TIdMessage.Create(nil);
  Try
    Try
      SMTP.Host:=Host;
      Msg.ReplyTo.EMailAddresses:='test@test.ru';
      Msg.From.Name:='Test Sender';
      Msg.Recipients.EMailAddresses:=AdressTo;
      Msg.Subject:=Subject;
      Msg.Body.Text:=Text;
      If FileExists(FileAttach) then
        begin
          Attach:=TIDAttachment.Create(Msg.MessageParts, FileAttach);
          Y:=1;
        end;
      SMTP.Connect;
      SMTP.Send(Msg);
    except
      Result:=False;
    end;
  finally
    SMTP.Disconnect;
    If Y=1 then
    Attach.Free;
    SMTP.Free;
    Msg.Free;
  end;
end;


Отсылал письма через SMTP-сервера Easy SMTP Server, Spectral SMTP Server и Advanced Mail Sender - все работает, письма отправляются.

Однако, поставили M-Daemon - и через него письма не идут. Функция успешно коннектится с ним, отправляет письмо и возвращает True, но сам M-Daemon даже ухом не ведет и в его списке переданное письмо даже не появляется. smile А, например, если посылать через наш M-Daemon письма, используя Outlook, Outlook Express или The Bat!, письма через него успешно идут.

Двойственное ощущение:
1) раз с другими SMTP-серверами работает, значит ошибок в коде нет
2) раз M-Daemon с другими почтовиками работает, значит настроен он правильно

Подскажить, где копать, пожалуйста. Все-таки есть какие-то подводные камни в коде или же скорее всего неправильно настроен SMTP-сервер (M-Daemon)?

P.S. Тесты программы с этой функцией и других почтовиков проводились в равных условиях, на одном и том же компьютере.

Автор: Snowy 21.6.2005, 10:00
Вот так отправляться тоже скорее всего не будет, но и не будет врать, что все Ок.
Код

uses    
   ..., IdSmtp, IdMessage, ...    

function SendMail(Host:String;AdressTo:String;Subject:String;txt:String;FileAttach:String):Boolean;
var    
  SMTP:TIDSMTP;    
  Msg:TIDMessage;    
begin    
  SMTP:=TIDSMTP.Create(nil);    
  SMTP.Host:=Host;
  Msg:=TIdMessage.Create(nil);    
  Msg.ReplyTo.EMailAddresses:='test@test.ru';    
  Msg.From.Name:='Test Sender';    
  Msg.Recipients.EMailAddresses:=AdressTo;    
  Msg.Subject:=Subject;    
  Msg.Body.Text:=Text;    
  If FileExists(FileAttach) then    
     TIDAttachment.Create(Msg.MessageParts, FileAttach);
  try
    SMTP.Connect;    
    SMTP.Send(Msg);
    Result:=true;
  except 
    Result:=False;
  end;
  SMTP.Disconnect;    
  SMTP.Free;    
  Msg.Free;    
end;

Возможно демон хочет что-то еще, кроме номера порта.
Что-то его видимо не устраивает.
Попробуй отправить что-нить врцчнуе через телнет. Что он на это скажет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)