Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  23:57[Войти] | [Зарегистрироваться]
Ответ на вопрос № 54626
SMTP |

16-08-2007 23:52
Как создать собственный SMTP сервер

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

15-11-2007 05:25
Проблема вообще-то в ДНК.
Вместо адреса "SMTP.Host:='127.0.0.1';" нужно прописывать нормальный "белый" IP-адрес, набрав который в любом интернет-кафе в браузере попадеш на именно свой сервер.
Адрес 127.0.0.1, он же localhost - это просто обращение к своему компьютеру через указанный порт.
P.S. Ну это, конечно, если вы не хотите настроить почтовик, чтобы саму себе на компьютер письма не слать :), правда все равно порты протоколов разные.

 

27-08-2007 16:57 | Сообщение от автора вопроса
Пробовал и другие адреса тоже самое. А этот адрес взят с другого примера.

27-08-2007 00:45

Скорее всего проблема в том, что у тебя E-Mail адрес без собаки... :)

Recipients.EMailAddresses :='test@test+58r.ru';


Хм... А знак плюса сам придумал? ;)


24-08-2007 09:09 | Сообщение от автора вопроса
Прошу помочь разобраться в примере.
Я взял встроенный SMTP сервер и добавил почтового клиента.
Но программа не отсылает письмо адресату.
Прошу помощи.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, IdBaseComponent, IdMessage,
  IdExplicitTLSClientServerBase, IdSMTPBase, IdCustomTCPServer, IdTCPServer,
  IdCmdTCPServer, IdSMTPServer ,IdEMailAddress;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    SMTP: TIdSMTP;
    IdMessage: TIdMessage;
    BitBtn1: TBitBtn;
    IdSMTPServer1: TIdSMTPServer;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;

procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);


procedure IdSMTPServer1MsgReceive(ASender: TIdSMTPServerContext;
AMsg: TStream; var LAction: TIdDataReply);
procedure IdSMTPServer1RcptTo(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdRCPToReply;
var VForward: String);
procedure IdSMTPServer1UserLogin(ASender: TIdSMTPServerContext;
const AUsername, APassword: String; var VAuthenticated: Boolean);
procedure IdSMTPServer1MailFrom(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdMailFromReply);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Form1: TForm1;
X: String;
Y: String;
Z: String;
Host: String;

implementation

{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
BitBtn2.Enabled := False;
BitBtn3.Enabled := True;
IdSMTPServer1.active := true;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
BitBtn2.Enabled := True;
BitBtn3.Enabled := False;
IdSMTPServer1.active := False;
end;

procedure TForm1.IdSMTPServer1MsgReceive(ASender: TIdSMTPServerContext;
AMsg: TStream; var LAction: TIdDataReply);
var
LMsg : TIdMessage;
begin
LMsg := TIdMessage.Create;

end;


procedure TForm1.IdSMTPServer1RcptTo(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdRCPToReply;
var VForward: String);
begin
VAction := rAddressOk;
end;

procedure TForm1.IdSMTPServer1UserLogin(ASender: TIdSMTPServerContext;
const AUsername, APassword: String; var VAuthenticated: Boolean);
begin
VAuthenticated := True;
end;

procedure TForm1.IdSMTPServer1MailFrom(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdMailFromReply);
begin
VAction := mAccept;
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
SMTP.Host:='127.0.0.1';
SMTP.Port:=25;
SMTP.Username:='test+58r.ru';
SMTP.Password:='12345666';
SMTP.AuthType:=atNone;
with IdMessage do
begin
Body.Assign(Memo1.Lines);
From.Text := 'test+58r.ru';
Recipients.EMailAddresses :='test+58r.ru';
Subject := 'Tema';
end;

SMTP.Connect;

try
SMTP.Send(IdMessage);

finally
SMTP.Disconnect;

end;
end;

end.

24-08-2007 09:04 | Сообщение от автора вопроса
Я применил пример встроенного SMTP сервера из выложенного примера
и добавил Почтового клиента для отправки писем.
Где я допустил ошибку программа виснит или не отправляет письмо адресату.
Прошу Помощи.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, IdBaseComponent, IdMessage,
  IdExplicitTLSClientServerBase, IdSMTPBase, IdCustomTCPServer, IdTCPServer,
  IdCmdTCPServer, IdSMTPServer ,IdEMailAddress;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    SMTP: TIdSMTP;
    IdMessage: TIdMessage;
    BitBtn1: TBitBtn;
    IdSMTPServer1: TIdSMTPServer;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;

procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);


procedure IdSMTPServer1MsgReceive(ASender: TIdSMTPServerContext;
AMsg: TStream; var LAction: TIdDataReply);
procedure IdSMTPServer1RcptTo(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdRCPToReply;
var VForward: String);
procedure IdSMTPServer1UserLogin(ASender: TIdSMTPServerContext;
const AUsername, APassword: String; var VAuthenticated: Boolean);
procedure IdSMTPServer1MailFrom(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdMailFromReply);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Form1: TForm1;
X: String;
Y: String;
Z: String;
Host: String;

implementation

{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
BitBtn2.Enabled := False;
BitBtn3.Enabled := True;
IdSMTPServer1.active := true;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
BitBtn2.Enabled := True;
BitBtn3.Enabled := False;
IdSMTPServer1.active := False;
end;

procedure TForm1.IdSMTPServer1MsgReceive(ASender: TIdSMTPServerContext;
AMsg: TStream; var LAction: TIdDataReply);
var
LMsg : TIdMessage;
begin
LMsg := TIdMessage.Create;
Try
Close;
Label3.Caption := LMsg.Recipients.EMailAddresses;
Label4.Caption := LMsg.From.Text;
Label5.Caption := LMsg.Subject;
Memo1.Lines := LMsg.Body;
Finally
FreeAndNil(LMsg);
End;
end;


procedure TForm1.IdSMTPServer1RcptTo(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdRCPToReply;
var VForward: String);
begin
VAction := rAddressOk;
end;

procedure TForm1.IdSMTPServer1UserLogin(ASender: TIdSMTPServerContext;
const AUsername, APassword: String; var VAuthenticated: Boolean);
begin
VAuthenticated := True;
end;

procedure TForm1.IdSMTPServer1MailFrom(ASender: TIdSMTPServerContext;
const AAddress: String; var VAction: TIdMailFromReply);
begin
VAction := mAccept;
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
SMTP.Host:='127.0.0.1';
SMTP.Port:=25;
SMTP.Username:='test+58r.ru';
SMTP.Password:='12345666';
SMTP.AuthType:=atNone;
with IdMessage do
begin
Body.Assign(Memo1.Lines);
From.Text := 'test+58r.ru';
Recipients.EMailAddresses :='test+58r.ru';
Subject := 'Tema';
end;

SMTP.Connect;

try
SMTP.Send(IdMessage);

finally
SMTP.Disconnect;

end;
end;

end.

21-08-2007 03:52 | Сообщение от автора вопроса
Большое спасибо буду разбираться дальше

20-08-2007 10:57
Вот нормальный демо пример

http://www.indyproject.org/DemoDownloads/Indy_10_SMTPServer.zip

20-08-2007 00:44

procedure TForm1.IdSMTPServer1CommandAUTH(AThread: TIdPeerThread;
  const CmdStr: String);
begin
// This is where you would process the AUTH command - for now, we send a error
AThread.Connection.Writeln(IdSMTPServer1.Messages.ErrorReply);
end;

procedure TForm1.IdSMTPServer1CommandCheckUser(AThread: TIdPeerThread;
  const Username, Password: String; var Accepted: Boolean);
begin
// This event allows you to 'login' a user - this is used internall in the
// IdSMTPServer to validate users connecting using the AUTH.
Accepted := False;
end;

procedure TForm1.IdSMTPServer1CommandQUIT(AThread: TIdPeerThread);
begin
// Process any logoff events here - e.g. clean temp files
end;

procedure TForm1.IdSMTPServer1CommandX(AThread: TIdPeerThread;
  const CmdStr: String);
begin
// You can use this for debugging :)
// It should be noted, that no standard clients ever send this command.
end;

procedure TForm1.IdSMTPServer1CommandMAIL(const ASender: TIdCommand;
  var Accept: Boolean; EMailAddress: String);
Var
IsOK : Boolean;
begin
// This is required!
// You check the EMAILADDRESS here to see if it is to be accepted / processed.
IsOK := False;
if Pos('@', EMailAddress) > 0 then  // Basic checking for syntax
  IsOK := True;

// Set Accept := True if its allowed
if IsOK then
  Accept := True
Else
  Accept := False;
end;

procedure TForm1.IdSMTPServer1CommandRCPT(const ASender: TIdCommand;
  var Accept, ToForward: Boolean; EMailAddress: String;
  var CustomError: String);
Var
IsOK : Boolean;
begin
// This is required!
// You check the EMAILADDRESS here to see if it is to be accepted / processed.
// Set Accept := True if its allowed
// Set ToForward := True if its needing to be forwarded.
IsOK := False;
if Pos('@', EMailAddress) > 0 then  // Basic checking for syntax
  IsOK := True
Else
  CustomError := '500 No at sign'; // If you are going to use the CustomError property, you need to include the error code
                                  // This allows you to use the extended error reporting.

// Set Accept := True if its allowed
if IsOK then
  Accept := True
Else
  Accept := False;
end;

procedure TForm1.IdSMTPServer1ReceiveRaw(ASender: TIdCommand;
  var VStream: TStream; RCPT: TIdEMailAddressList;
  var CustomError: String);
begin
// This is the main event for receiving the message itself if you are using
// the ReceiveRAW method
// The message data will be given to you in VSTREAM
// Capture it using a memorystream, filestream, or whatever type of stream
// is suitable to your storage mechanism.
// The RCPT variable is a list of recipients for the message
end;

procedure TForm1.IdSMTPServer1ReceiveMessage(ASender: TIdCommand;
  var AMsg: TIdMessage; RCPT: TIdEMailAddressList;
  var CustomError: String);
begin
// This is the main event if you have opted to have idSMTPServer present the message packaged as a TidMessage
// The AMessage contains the completed TIdMessage.
// NOTE: Dont forget to add IdMessage to your USES clause!

ToLabel.Caption := AMsg.Recipients.EMailAddresses;
FromLabel.Caption := AMsg.From.Text;
SubjectLabel.Caption := AMsg.Subject;
Memo1.Lines := AMsg.Body;

// Implement your file system here :)
end;

procedure TForm1.IdSMTPServer1ReceiveMessageParsed(ASender: TIdCommand;
  var AMsg: TIdMessage; RCPT: TIdEMailAddressList;
  var CustomError: String);
begin
// This is the main event if you have opted to have the idSMTPServer to do your parsing for you.
// The AMessage contains the completed TIdMessage.
// NOTE: Dont forget to add IdMessage to your USES clause!

ToLabel.Caption := AMsg.Recipients.EMailAddresses;
FromLabel.Caption := AMsg.From.Text;
SubjectLabel.Caption := AMsg.Subject;
Memo1.Lines := AMsg.Body;

// Implement your file system here :)

end;

procedure TForm1.IdSMTPServer1CommandHELP(ASender: TIdCommand);
begin
// here you can send back a lsit of supported server commands
end;

procedure TForm1.IdSMTPServer1CommandSAML(ASender: TIdCommand);
begin
// not really used anymore - see RFC for information
end;

procedure TForm1.IdSMTPServer1CommandSEND(ASender: TIdCommand);
begin
// not really used anymore - see RFC for information
end;

procedure TForm1.IdSMTPServer1CommandSOML(ASender: TIdCommand);
begin
// not really used anymore - see RFC for information
end;

procedure TForm1.IdSMTPServer1CommandTURN(ASender: TIdCommand);
begin
// not really used anymore - see RFC for information
end;

procedure TForm1.IdSMTPServer1CommandVRFY(ASender: TIdCommand);
begin
// not really used anymore - see RFC for information
end;

procedure TForm1.btnServerOnClick(Sender: TObject);
begin
btnServerOn.Enabled := False;
btnServerOff.Enabled := True;
IdSMTPServer1.active := true;
end;

procedure TForm1.btnServerOffClick(Sender: TObject);
begin
btnServerOn.Enabled := True;
btnServerOff.Enabled := False;
IdSMTPServer1.active := false;
end;




Это кусочек демки... Не помню, где скачал... ;)


19-08-2007 18:18
Хотелось бы увидеть пример

17-08-2007 00:19

TIdSMTPServer тебе в помошь ... ;)


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Жили у бабуси два веселых гуся. Один белый, другой КАКОЙ?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования