Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизIndy письмо Найти похожие ветки
← →
9899100 (2009-03-03 18:35) [0]Здравствуйте!!
подскажите где может быть ошибка
я написал процедуру для отправки письма используя компоненты Indy
все нормально отправляет
но если я второй раз вызываю эту процедуру
то письмо не отправляется
коннект с СМТП происходит а письмо Send выдет исключение :(
в процедуре я просто заполняю необходимве поля IdMessage расположенного на форме
и отправляю через smtp также на расположенного на форме
перед оптправкой я ессесно соеденяюсь с smtp
после отправки вызываю disconnect
т.е. вроде бы все как бы правильно
но вот, как ясказал выше, ежели процедуру вызвать еще раз то send не отправляет
причем ничего существенно не меняется ни адрес получателя ни адрес сервера ни тема письма ни отправитель кроме вложенного в письмо файла
пробовал второй раз отправить тотже файл что и в первый раз, т.е. письма получились одинаковые
опять.... первый ушел на втором ошибка
и
← →
Anatoly Podgoretsky © (2009-03-03 21:08) [1]> 9899100 (03.03.2009 18:35:00) [0]
А чего тут гадать, у тебя ошибка в программе.
← →
mmelik © (2009-03-04 01:15) [2]Попробуй так (самое важное - всегда выполнять MsgSend.Clear;
MsgSend.MessageParts.Clear;):procedure TfmMain.DisconnectFromSMTP;
{Отключение от сервера исходящей почты}
begin
AntiFreezeSend.Active:= false;
if SMTP.Connected then
try
SMTP.Disconnect;
except
AddToErrorsLog(PChar(Exception(ExceptObject).Message),true);
AddToErrorsLog(DateTimeToStr(Now)+", procedure DisconnectFromSMTP"+#13#10+
"Ошибка при попытке разрыва соединения с сервером исходящей почты", false);
end;
try
SMTP.DisconnectSocket;
except end;
MsgSend.Clear;
MsgSend.MessageParts.Clear;
end;
function TfmMain.ConnectToSMTP: boolean;
{Подключение к серверу исходящей почты}
begin
Result:= false;
AntiFreezeSend.Active:= true;
SMTP.Host:= Const_RTDS_sSMTP_Server;
SMTP.Port:= Const_RTDS_iSMTP_Port;
SMTP.Username:= copy(Const_RTDS_sEMail,1,pos("@",Const_RTDS_sEMail)-1);
SMTP.Password:= Const_RTDS_sPassword;
case Const_RTDS_iSMTP_Authentication of
0: SMTP.AuthenticationType := atNone; {Авторизация не нужна}
1: SMTP.AuthenticationType := atLogin; {Авторизация нужна}
end;
if not SMTP.Connected then
try
SMTP.Connect;
except
DisconnectFromSMTP;
AddToErrorsLog(PChar(Exception(ExceptObject).Message),true);
AddToErrorsLog(DateTimeToStr(Now)+", function ConnectToSMTP"+#13#10+
"Ошибка при попытке создания соединения с сервером исходящей почты", false);
exit;
end;
MsgSend.Clear;
MsgSend.MessageParts.Clear;
Result:= true;
end;
procedure TfmMain.SendSMTPMsg(ABBR: string);
{Отправка запроса об отсутствующей инф-ции объекту ABBR
(на мыло объекта отправляется заранее подготовленный файл ...\MyRTDA\rtds.rar)}
var
sRTDS_MAIL: string;
begin
if ABBR="" then exit;
if pos("@",Const_RTDS_sEMail)=0 then exit;
if dt.sqlObjCashes.Active then
sRTDS_MAIL:= VarToStr(dt.sqlObjCashes.Lookup("ABBR",ABBR,"RTDS_MAIL"));
if (sRTDS_MAIL="") or (pos("@",sRTDS_MAIL)=0) then exit;
if not FileExists(ExtractFilePath(Application.ExeName)+"rtds.rar") then exit;
{Подключаемся к серверу исходящей почты}
if not ConnectToSMTP then exit;
with MsgSend do
begin
From.Name:= copy(Const_RTDS_sEMail,1,pos("@",Const_RTDS_sEMail)-1); {От кого}
From.Address:= Const_RTDS_sEMail; {Адрес электронной почты}
Recipients.EMailAddresses:= sRTDS_MAIL; {Мыло получателя}
Subject := "rtds"; {Тема}
Date:= Now;
end;
{Аттачмент}
TIdAttachment.Create(MsgSend.MessageParts,ExtractFilePath(Application.ExeName)+"rtds.rar"); {Вложение}
try
SMTP.Send(MsgSend);
except
AddToErrorsLog(PChar(Exception(ExceptObject).Message),true);
AddToErrorsLog(DateTimeToStr(Now)+", procedure SendSMTPMsg("+ABBR+")"+#13#10+
"Ошибка отправки письма-запроса объекту "+ABBR+#13#10+
"на его e-mail адрес "+sRTDS_MAIL, false);
end;
{Отключаемся от сервера исходящей почты}
DisconnectFromSMTP;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c