Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 18:56   #1
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию Почтовик

Привет всем!
Я тут пишу почтовиый клиент,и у меня возник вопрос:
не отправляються письма,созданные в нем на заданный адрес!
Пишет ошибку: "is not a valid integer value.
и при етом указывает на окно ввода адреса получателя!
Помогите прояснить в чем ошибка!
Архив прилагаю- http://fileshare.in.ua/3879303
зеркало
http://depositfiles.com/files/svyfssmql
пароль на архив:1992
SPQR10000 вне форума Ответить с цитированием
Старый 06.11.2010, 19:39   #2
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию

код прилагаю:
Код:
unit CreateMessage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan,IdSMTP, IdPOP3, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdMessageClient, IdIMAP4, IdPOP3Server,
  IdTCPServer, IdIMAP4Server, sButton, sEdit, sMemo, sLabel, IdMessage,
  sSkinManager, IdUDPBase, IdUDPClient, IdDNSResolver, IdAntiFreezeBase,
  IdAntiFreeze, sAlphaListBox, ComCtrls, sStatusBar;

type
  TSozdmess = class(TForm)
    telo: TsMemo;
    dopadr: TsEdit;
    theme: TsEdit;
    adresatplus: TsButton;
    uchetka: TsButton;
    preprosmotr: TsButton;
    otmena: TsButton;
    tema: TsLabel;
    otpravit: TsButton;
    XPMan: TXPManifest;
    imap4: TIdIMAP4;
    smtp: TIdSMTP;
    pop3: TIdPOP3;
    Mess: TIdMessage;
    skinmen: TsSkinManager;
    DNSRes: TIdDNSResolver;
    AntiFreeze: TIdAntiFreeze;
    exit: TsButton;
    dns: TsEdit;
    dnsserv: TsLabel;
    TimeOut: TsLabel;
    sender: TsEdit;
    sLabel1: TsLabel;
    Stbar: TsStatusBar;
    procedure otpravitClick(Sender: TObject);
    procedure exitClick(Sender: TObject);
    procedure otmenaClick(Sender: TObject);
   private
    { Private declarations }
  public
    { Public declarations }
    fMailServers:TStringList;
    Function PadZero(s:String):String;
    Function GetMailServers:Boolean;
    Function ValidData:Boolean;
    Procedure SendMail;OverLoad;
    Function SendMail(aHost:String):Boolean;OverLoad;
    Procedure LockControls;
    procedure UnlockControls;
    Procedure Msg(aMessage:String);
  end;

var
  Sozdmess: TSozdmess;
implementation

{$R *.dfm}

procedure TSozdmess.LockControls;
var i:integer;
begin
DNS.enabled:=false;
Sender.enabled:=false;
//adr.enabled:=false;
theme.enabled:=false;
telo.enabled:=false;
Exit.enabled:=false;
otpravit.enabled:=false;
end;

procedure TSozdmess.Msg(aMessage: String);
begin
stbar.SimpleText:=aMessage;
application.ProcessMessages;
end;

procedure TSozdmess.otpravitClick(Sender: TObject);
begin
Msg('');
LockControls;
if ValidData then SendMail;
UnlockControls;
Msg('');
end;

function TSozdmess.SendMail(aHost: String): Boolean;
begin
Result:=false;
with SMTP do
begin
Caption:='Trying to sendmail via: '+aHost;
Msg('Trying to sendmail via:'+aHost);
Host:=aHost;
try
Msg('Attempting connect');
Connect;
Msg('Successful connect...sending message');
Send(Mess);
Msg('Attempting disconnect');
Disconnect;
msg('Successful disconnect');
Result:=true;
except on E:Exception do
begin
if connected then try disconnect; except end;
Msg('Error sending message');
result:=false;
ShowMessage(E.Message);
end;
end;
end;
Caption:='';
end;

function TSozdmess.GetMailServers:Boolean;
var
i,x:integer;
LDomainPart:String;
LMXRecord:TMXRecord;
begin
if not assigned(fmailServers) then fMailServers:=TStringList.Create;
fmailServers.clear;
Result:=true;
with DNSRes do
begin
QueryResult.Clear;
QueryRecords:=[qtMX];
Msg('Setting up DNS query parameters');
Host:=DNS.text;
ReceiveTimeout:=StrToInt(TimeOut.caption);
// Extract the domain part from recipient email address
LDomainPart:=copy(dopadr.text,pos('@',dopadr.text)+1,length(dopadr.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 TSozdmess.PadZero(s:String):String;
begin
if length(s)<2 then s:='0'+s;
Result:=s;
end;
SPQR10000 вне форума Ответить с цитированием
Старый 06.11.2010, 19:40   #3
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию

Код:
procedure TSozdmess.SendMail;
var i:integer;
begin
if GetMailServers then
begin
with Mess do
begin
Msg('Assigning mail message properties');
From.Text:=sender.Text;
Sender.Text:=sender.Text;
Recipients.EMailAddresses:=dopadr.text;
Subject:=theme.Text;
Body:=telo.Lines;
end;
for i:=0 to fMailServers.count-1 do
begin
Msg('Attempting to send mail');
if SendMail(fMailServers.Strings[i]) then
begin
MessageDlg('Mail successfully sent and available for pickup by recipient!',
mtInformation,[mbOK],0);
//Exit;
end;
end;
// if we are here then something went wrong .. ie there were no available servers to accept our mail!
MessageDlg('Could not send mail to remote server-please try again later.',mtInformation,[mbOK],0);
end;
if assigned(fMailServers) then FreeAndNil(fMailServers);
end;

procedure TSozdmess.UnlockControls;
begin
DNS.enabled:=true;
Sender.enabled:=true;
//adr.enabled:=true;
theme.enabled:=true;
telo.Enabled:=true;
Exit.enabled:=true;
otpravit.Enabled:=true;
end;

function TSozdmess.ValidData: Boolean;
var ErrString:string;
begin
Result:=True;
ErrString:='';
if trim(DNS.text)= '' then ErrString:=ErrString+#13+#187+'DNS server not filled in';
if trim(Sender.text)= '' then ErrString:=ErrString+#13+#187+'Sender email not filled in';
if trim(dopadr.text)='' then ErrString:=ErrString+#13+#187+'Recipient not filled in';
if ErrString<>'' then
begin
MessageDlg('Cannot proceed due to the following errors:'+#13+#10+ErrString,mtInformation,[mbOK],0);
Result:=False;
end;
end;

procedure TSozdmess.exitClick(Sender: TObject);
begin
close;
end;

procedure TSozdmess.otmenaClick(Sender: TObject);
begin
unlockcontrols;
end;

end.
SPQR10000 вне форума Ответить с цитированием
Старый 06.11.2010, 20:14   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

http://www.programmersclub.ru/alar-pochovik
mihali4 вне форума Ответить с цитированием
Старый 06.11.2010, 21:52   #5
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию

спасибо,конечно,но тот вариант я уже сделал сам!
Но мне интересно,почему мой данный почтовик,позволяющий напрямую отправлять письма,минуя сервера провайдеров не работает?
SPQR10000 вне форума Ответить с цитированием
Старый 20.11.2010, 22:22   #6
sew960i
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 34
Плохо

Цитата:
Сообщение от SPQR10000 Посмотреть сообщение
спасибо,конечно,но тот вариант я уже сделал сам!
Но мне интересно,почему мой данный почтовик,позволяющий напрямую отправлять письма,минуя сервера провайдеров не работает?
http://base.vingrad.ru/view/1127-Isp...P-Relay-Server
Вот ответ на твой вопрос. Быть копипастером и утверждать, что это твой код не хорошо. Вот почему ты ничего не знаешь и у тебя ничего не получается! Подумай...
sew960i вне форума Ответить с цитированием
Старый 22.11.2010, 19:47   #7
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию

Вообще-то,я не копировал,а сделал сам(я имею в виду не тот вариант,что отправляет напрямую,а тот,который через smtp)
И если ты не видел код моего почтовика(smtp),будь добр,не утверждать,что я копипастер))

Последний раз редактировалось SPQR10000; 22.11.2010 в 19:49.
SPQR10000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почтовик-шкала загрузки betirsolt Работа с сетью в Delphi 2 30.11.2009 21:31
Почтовик на Delphi- ошибка REloadED Работа с сетью в Delphi 14 26.08.2009 15:23
Как настроить почтовик? Naruto. Операционные системы общие вопросы 10 06.05.2009 01:15
почтовик ben95 Работа с сетью в Delphi 1 02.02.2008 15:57