![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контроль отправки письма по Email [D7, XP]
Laguna © (2011-12-01 13:23:00)Для отправки письма есть такая процедура
procedure SendReport(Pol : TStringList; Sub, Bod : String; Attach : TStringList);
const
olMailItem = 0;
olByValue = 1;
StrGood = 'Письмо отправлено.';
StrBad = 'Письмо поставлено в очередь на отправку.' + #13#10 +
'Запустите почтовую программу и оно будет отправлено.';
var
OutlookApp,
MailItem,
MyAttachments : OLEVariant;
Otp : Boolean;
ifSend : Boolean;
i : Integer;
begin
ifSend := False;
try
OutlookApp := GetActiveOleObject('Outlook.Application');
Otp := True;
except
OutlookApp := CreateOleObject('Outlook.Application');
Otp := False;
end;
try
try
MailItem := OutlookApp.CreateItem(olMailItem);
for i := 0 to Pred(Pol.Count) do
MailItem.Recipients.Add(Pol.Strings[i]);
MailItem.Subject := Sub;
MailItem.Body := Bod;
MyAttachments := MailItem.Attachments;
for i := 0 to Pred(Pol.Count) do
MyAttachments.Add(Attach[i], olByValue, 1, '');
MailItem.Send;
ifSend := True;
except
InfMsg('','Отмена отправки');
end;
finally
MyAttachments := VarNull;
OutlookApp := VarNull;
if ifSend then
InfMsg('', IIF(Otp, StrGood, StrBad));
end;
end;
первый блокtry.. except.. end;проверяет открыт ли аутлук или нет. Если открыт - отправляем письмо. Если закрыт - ставим в очередь. Затем при отправке аутлук трижды переспрашивает разрешения на отправк, дабы не вирус отправляет. тАк вот если нажать на кнопку отмена, то отправка просто обрывается и не заходит в нижний блок finally. Что не правильно сделано? Может блоки tryне так сопоставил?
Медвежонок Пятачок (2011-12-01 19:35:00) [1]Зачем?
Даже если этого не сделать самому,
то обе переменные все равно не просто обнулятся, но еще и исчезнут совсем, как только закончится SendReport.
Laguna (2011-12-01 19:14:00) [2]
> Вирусу равно как и не-вирусу ничего не стоит подавить эти
> самые "переспросы" - достаточно перед отправкой сообщений
> программно воткнуть в Аутглюк Add-In с соответствующей давилкой.
>
Ну всем не повтыкаешь, да и не ставилась такая цель.
> Еще раз.Ты стомиллионный пациент, который здесь утверждает,
> что зайдя в трай, не попадает в его файнали. А если точек
> останова там нет, то значит они выброшены оптимизатором.
Я в подсознании я полностью согласен, но когда реальные факты...
Касаемо этой переменнойOutlookApp := VarNullЕе то обязательно нужно обнулить?
Сергей М. (2011-12-01 16:20:00) [3]Вирусу равно как и не-вирусу ничего не стоит подавить эти самые "переспросы" - достаточно перед отправкой сообщений программно воткнуть в Аутглюк Add-In с соответствующей давилкой.
Медвежонок Пятачок (2011-12-01 16:13:00) [4]Еще раз.
Ты стомиллионный пациент, который здесь утверждает, что зайдя в трай, не попадает в его файнали.
А если точек останова там нет, то значит они выброшены оптимизатором.
OW (2011-12-01 16:11:00) [5]на потом, sleep(1) я обычно ставлю при отладке. Этот оператор не оптимизируется никогда :)
Laguna (2011-12-01 15:27:00) [6]Походу строчка потерялась. В финале нужно вот это сделать OutlookApp := VarNull
> а нафига вирусу отправлять почту через оутлук? lol
А я почем знаю? Кто работал с аутглюком и отправлял через него письма, тот в курсе о его переспросах.
Laguna (2011-12-01 15:22:00) [7]Я полагаю для обнудения значений, хотя действительно может и лишнее. Хорошо, закоменнтил я их и оставил только одну строку, чтобы проверить вход в финализацию. Так вот после компиляции на этой строке синие точки не появились, куда я мог бы установить точку останова. http://s017.radikal.ru/i408/1112/b2/8e3a6802d90d.jpgПолучается не считает он нужным заходить в этот блок.
QAZ (2011-12-01 15:12:00) [8]
> дабы не вирус отправляет.
а нафига вирусу отправлять почту через оутлук? lol
Сергей М. (2011-12-01 14:53:00) [9]А накой шиш вообще эти строчки
MyAttachments := VarNull;
OutlookApp := VarNull;
?
Компилятор сделает это неявно...
Laguna (2011-12-01 14:50:00) [10]
> где "здесь" ?в этом блоке целых 4 строки..
выделена жирным
Сергей М. (2011-12-01 14:35:00) [11]
> Точку ствлю здесь
где "здесь" ?
в этом блоке целых 4 строки..
Laguna (2011-12-01 13:54:00) [12]
> в файнали ты попадаешь всегда. даже если у тебя нет денег,
> тебя бросила жена и ты пьяный.а будет ли оптимизатором
> прилинкован код внутри файналли - это уже другой вопрос.
>
Хорошо, токда почему я в него не захожу в режиме отладки? Точку ствлю здесь
finally
MyAttachments := VarNull;
OutlookApp := VarNull;
if ifSend then
InfMsg('', IIF(Otp, StrGood, StrBad));
end;
end;
Медвежонок Пятачок (2011-12-01 13:48:00) [13]не путай теплое и мягкое.
в файнали ты попадаешь всегда. даже если у тебя нет денег, тебя бросила жена и ты пьяный.
а будет ли оптимизатором прилинкован код внутри файналли - это уже другой вопрос.
Laguna (2011-12-01 13:44:00) [14]Аааа... походу умный компилятор не пошел вниз, поскольку невыполняемое условие стояло в финальной части. Изменил на такое и прошло
...
ifSend := True;
except
// InfMsg('','Отмена отправки');
end;
finally
MyAttachments := VarNull;
OutlookApp := VarNull;
if ifSend then
InfMsg('', IIF(Otp, StrGood, StrBad))
else
InfMsg('','Отмена отправки');
end;
end;
Медвежонок Пятачок (2011-12-01 13:41:00) [15]Ты примерно стомиллионный посетитель, который говорит, что не попадает в файнали.
PS Если из под среды, то F9 после всех исключений.
Laguna (2011-12-01 13:40:00) [16]Так в том и дело, что он не проходит, точнее срабатывает except вложенного try и срабатывает
InfMsg('','Отмена отправки');. А в finally не заходит(ставил точки в трассировке)
Медвежонок Пятачок (2011-12-01 13:36:00) [17]это оптический обман.
если второй сверху трай пройден, то в файнали попадаешь гарантировано.