Précédent   Forum des professionnels en informatique > Environnements de développement > Delphi > Kylix
Kylix Environnement de développement RAD sous Linux avec compilateur natif pour Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2007, 11h45   #1
Membre du Club
 
Avatar de Nillak
 
Inscription : octobre 2006
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2006
Messages : 138
Points : 45
Points : 45
Par défaut Kylix Indy10 sendmail

Bonjour,
j'utilise indy10 avec Kylix pour envoyer des emails. Le programme que je développe est un cgi (CGI stand-alone), que j'utilise sur une dedibox. Seulement voilàs lorsque j'envoie des mails, il s'avère que de temps en temps le cgi se bloque, le mail ne part pas, et se débloque suite au timeout sur l'execution du programme. Pourriez-vous m'aider, voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
unit Main;
 
interface
 
uses
  inifiles, SysUtils, Variants, Classes,
  IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient,
  IdSMTP, IdBaseComponent, IdMessage,
  IdExplicitTLSClientServerBase, IdSMTPBase, IdAttachmentFile, HTTPApp
  , UGlobal;
 
type
  Tsendemail = class(TWebModule)
    procedure SendAnEmail(Sender: TObject; Request: TWebRequest;
      Response: TWebResponse; var Handled: Boolean);
 
    procedure Execute;  
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  sendemail: Tsendemail;
 
implementation
 
{$R *.dfm}
 
procedure Tsendemail.SendAnEmail(Sender: TObject; Request: TWebRequest;
  Response: TWebResponse; var Handled: Boolean);
begin
  try
    Execute;
  except
    on E:Exception do
      LogException(E, 'Tsendemail.SendAnEmail');
  end;
end;
 
procedure Tsendemail.Execute;
var
    SMTP : TIdSMTP;
    MailMessage: TIdMessage;
    aHost, cIniSmtpFileName: string;
    aPort: integer; 
    IniFile: TIniFile;
begin
  try
    cIniSmtpFileName := 'smtp.in';
 
    /// Informations reading from config file
    if FileExists(ApplicationPath + cIniSmtpFileName) then
    begin
      IniFile := TIniFile.Create(ApplicationPath + cIniSmtpFileName);
      try
        aHost := IniFile.ReadString('SmtpConfig', 'Host', 'localhost.localdomain');
        aPort := IniFile.ReadInteger('SmtpConfig', 'Port', 25);
      finally
        FreeAndNil(IniFile);
      end;
    end;
 
    //setup SMTP                 
    SMTP := TIdSMTP.Create(Self);
    SMTP.Host := aHost;
    SMTP.Port := aPort;
 
    //setup mail message
    MailMessage := TIdMessage.Create;
    MailMessage.From.Address := 'UneAdresse@AuPiffe.com';
    MailMessage.Recipients.EMailAddresses := 'MonAdresse@Perso.com';
 
    MailMessage.Subject := 'Un mail pour vous avertir';
    MailMessage.Body.Text := 'Voilà il faut que la discussion s amorce';
 
  except
    on E:Exception do
      LogException(E, 'Tsendemail.Execute');
  end;
  //send mail
  try          
    SMTP.Connect;
    try
      SMTP.Send(MailMessage);
    finally
      SMTP.Disconnect;
      MailMessage.Free;
      Response.content := '<html><body>Hello World !!!</body></html>';
    end;
  except
    on E:Exception do
      LogException(E, 'Tsendemail.Execute');
  end;
 
end;
 
end.
la fonction LogException me permet de loguer les exceptions et fait partie d'une classe dans l'unité UGlobal;

Merci d'avance pour votre aide.
__________________
C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison ! (Pierre Desproges)
Nillak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 10h52   #2
Membre du Club
 
Avatar de Nillak
 
Inscription : octobre 2006
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2006
Messages : 138
Points : 45
Points : 45
A partir d'un script (bash) qui lance le CGI toutes les 20 secondes voici le résultat:
19h48 --> 19h52 : 11 mails
20h53 --> 20h59 : 21 mails
22h00 --> 22h07 : 21 mails
23h08 --> 23:14 : 21 mails
...
et ainsi de suite sur 1000 mails

En résumé et mis à part le début avec l'envoie de 11 mails :
  • 21 mails sont envoyés
  • le 22ème mail est en attente (je ne sais pas pourquoi)
  • il se produit donc un Timeout (vu dans le fichier de log /var/log/maillog) au bout de 1h01
  • 21 nouveaux mails sont envoyés
  • le 22ème mail est en attente
  • job pendant durant 1h01
  • ...

Ce scénario se produit de façon extrêment régulière. On pourrais penser à une mauvaise configuration du sendmail sur le serveur. Mais alors pourquoi l'envoie de mails par la fonction mail de php (un site est hébergé sur ce serveur) n'a jamais eu de problème ?

Auriez-vous des suggestions ?
__________________
C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison ! (Pierre Desproges)
Nillak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web