Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 330

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте!
Есть ли предопределенные обработчики исключительных ситуаций при отправки письма и где их можно увидеть?
Например при отправки письма на несуществующий адрес
у меня в программе генерится просто Exception а мне нужно что бы я мог распознать что ошибка именно из за не верного адреса. Спасибо.

Сидаровский Георгий Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Сидаровский Георгий (статус: Посетитель)
Вопрос отправлен: 11 февраля 2008, 13:26
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, Сидаровский Георгий!
А вы уверены, что это у вас именно из-за не существующего адреса ?
К сожалению, вы не указали какими именно компонентами пользуетесь, какая версия Делфи...
Поэтому, смею предложить вам вот этот пример в Приложении. Есть, правда, еще примеры, например отправка через MAPI, если нужны, пишите в личку.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  6. StdCtrls, ExtCtrls, ComCtrls, Psock, NMsmtp;
  7.  
  8.  
  9.  
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. Memo: TRichEdit;
  14. Panel1: TPanel;
  15. SMTP: TNMSMTP;
  16. Panel2: TPanel;
  17. FromAddress: TEdit;
  18. predefined: TLabel;
  19. FromName: TEdit;
  20. Subject: TEdit;
  21. LocalProgram: TEdit;
  22. ReplyTo: TEdit;
  23. islog: TCheckBox;
  24. Host: TEdit;
  25. Port: TEdit;
  26. userid: TEdit;
  27. Button1: TButton;
  28. procedure Button1Click(Sender: TObject);
  29. private
  30. Procedure CleanContext;
  31. procedure PerformConnection;
  32. procedure AddMessage(msg:string; color:integer);
  33. procedure log(inpt :string);
  34. Procedure SetSMTP;
  35. public
  36. function SendEmail(_to, cc, bcc, Subject, body, attachment:string; HTMLFormat:boolean):boolean;
  37. end;
  38.  
  39. var Form1: TForm1;
  40.  
  41. implementation
  42. {$R *.DFM}
  43.  
  44. Procedure TForm1.SetSMTP;
  45. begin
  46. SMTP.Host:=Host.Text;
  47. SMTP.Port:=strtoint(Port.text);
  48. SMTP.UserID:=userid.text;
  49. end;
  50.  
  51. Function GetEmailDateTime:string;
  52. var tz:_time_Zone_information;
  53. s:string;
  54. begin
  55. GetTimeZoneInformation(tz);
  56. if (tz.Bias*100 div 60)<1000 then
  57. s:=format(' -0%d',[tz.Bias*100 div 60])
  58. else
  59. s:=format(' -%d',[tz.Bias*100 div 60]);
  60. result:=formatdatetime('ddd, dd mmm yyyy hh:nn:ss',now)+s;
  61. end;
  62.  
  63. Procedure TForm1.CleanContext;
  64. {set default values, some of them comes from "Setup" form}
  65. begin
  66. SMTP.PostMessage.FromAddress:=FromAddress.text;
  67. SMTP.PostMessage.FromName:=FromName.text;
  68. SMTP.PostMessage.ToAddress.Clear;
  69. SMTP.PostMessage.ToCarbonCopy.clear;
  70. SMTP.PostMessage.ToBlindCarbonCopy.clear;
  71. SMTP.PostMessage.Body.clear;
  72. SMTP.PostMessage.Attachments.clear;
  73. SMTP.PostMessage.Subject:=Subject.text;
  74. SMTP.PostMessage.LocalProgram:=LocalProgram.text;
  75. (*Mon, 27 Nov 2000 12:37:46 -0700*)
  76. SMTP.PostMessage.Date:=GetEmailDateTime;
  77. SMTP.PostMessage.ReplyTo:=ReplyTo.Text;
  78. end;
  79.  
  80. procedure TForm1.log(inpt :string);
  81. var outf:textfile;
  82. begin {writing in the log file}
  83. if not islog.checked then exit;
  84. assignfile(outf, changefileext(paramstr(0), '.log'));
  85. if fileexists(changefileext(paramstr(0), '.log')) then
  86. append(outf)
  87. else
  88. rewrite(outf);
  89. writeln(outf, datetimetostr(now)+'|'+inpt);
  90. closefile(outf);
  91. end;
  92.  
  93. procedure TForm1.AddMessage(msg:string; color:integer);
  94. begin {showing in the memo field progress...}
  95. while memo.lines.Count>2000 do memo.lines.Delete(0);
  96. memo.sellength:=0;
  97. memo.selstart:=length(memo.text);
  98. memo.selattributes.Color:=Color;
  99. memo.seltext:=#13#10+DateTimeTostr(now)+' '+msg;
  100. memo.perform($00B7,0,0);
  101. Application.ProcessMessages;
  102. if color<>clRed then log(DateTimeTostr(now)+' '+msg) else log('Error: '+DateTimeTostr(now)+' '+msg);
  103. end;
  104.  
  105. procedure TForm1.PerformConnection;
  106. begin
  107. while (not SMTP.connected) do
  108. begin
  109. SetSMTP;
  110. AddMessage('Connecting to SMTP',clBlue);
  111. application.processmessages;
  112. try
  113. SMTP.Connect;
  114. AddMessage('No Errors',clBlue);
  115. except
  116. on e:exception do AddMessage('Error conection: '+e.message,clBlue);
  117. end;
  118. end;
  119. end;
  120.  
  121. Function TForm1.SendEmail(_to, cc, bcc, Subject, body, attachment:string; HTMLFormat:boolean):boolean;
  122. begin
  123. PerformConnection;
  124. result:=true;
  125. CleanContext;
  126. try
  127. if (attachment<>'') and (not Fileexists(attachment)) then
  128. begin
  129. AddMessage('Attachment is not ready yet ('+ attachment+') ', clNavy);
  130. sleep(300);
  131. result:=false;
  132. exit;
  133. end;
  134. SMTP.PostMessage.ToAddress.text:=StringReplace(_to, ';',#13#10, [rfReplaceAll, rfIgnoreCase]);
  135. if cc<>'' then SMTP.PostMessage.ToCarbonCopy.text:=StringReplace(cc, ';',#13#10, [rfReplaceAll, rfIgnoreCase]);
  136. if bcc<>'' then SMTP.PostMessage.ToBlindCarbonCopy.text:=StringReplace(bcc, ';',#13#10, [rfReplaceAll, rfIgnoreCase]);
  137. if Subject<>'' then SMTP.PostMessage.Subject:=Subject;
  138. if HTMLFormat then SMTP.SubType:=mtPlain else SMTP.SubType:=mtHtml;
  139. SMTP.PostMessage.Body.Text:=Body;
  140. if attachment<>'' then SMTP.PostMessage.Attachments.add(attachment);
  141. AddMessage('Sending to '+ _to, clGreen);
  142. SMTP.SendMail;
  143. AddMessage('Complete.'+#13#10, clGreen);
  144. except
  145. on e:sysutils.exception do
  146. begin
  147. AddMessage(e.message, clRed);
  148. result:=false;
  149. end;
  150. end;
  151. end;
  152.  
  153. procedure TForm1.Button1Click(Sender: TObject);
  154. begin
  155. SendEmail('somewhere@somedomain.ru', '', '', 'test', 'body', '', False);
  156. end;
  157.  
  158. end.


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 11 февраля 2008, 19:16


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.01 сек.