Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENVOYER UN EMAIL AVEC ATTACHEMENT DE FICHIER


Information sur la source

Description

Ce prog permet d'envoyer un email et d'attacher des fichiers si on veux........
Utilisation de thread pour l'emission(mieux que le compo antifrezze d'indy)...ceci est un bon exemple pour les newbies (tout le monde l'a été un jour!!!)

Sinon j'ai un petit pb lorsque je j'utilise l evt OnWorkBegin de SMTP la constante
AWorkCountMax reste toujours nul!!!!!!!! Par conséquent je ne peux pas utiliser une barre de progression........Si quelqu'un a une idée je suis ouvert a tous....
PS:Pour utiliser mon prog il vous faut les composants DcScript
ces composants permettent d'avoir une application du style de winamp..
 

Source

  • unit EmailSender1;
  • interface
  • uses
  • Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  • Dialogs, DSBtExit, DSControls, DSPanel, DSMagnetic, DSMarquee, DSButton,
  • DSBtMenu, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
  • IdTCPClient, IdMessageClient, IdSMTP, StdCtrls, DSPanelTools, ShellApi,
  • ExtCtrls, DSPanelTitle, DSImgBarre, DSProgress, DSScope;
  • type
  • TSend1 = class(TThread)
  • private
  • protected
  • procedure Execute();override;
  • public
  • constructor Create();
  • end;
  • TForm1 = class(TForm)
  • DSPanel1: TDSPanel;
  • DSBtExit1: TDSBtExit;
  • DSMarquee1: TDSMarquee;
  • DSBtMenu1: TDSBtMenu;
  • DSButton1: TDSButton;
  • DSPanelTools1: TDSPanelTools;
  • Label1: TLabel;
  • IdSMTP1: TIdSMTP;
  • IdMessage1: TIdMessage;
  • DSPanelTools2: TDSPanelTools;
  • Edit1: TEdit;
  • DSPanelTitle1: TDSPanelTitle;
  • DSPanelTools3: TDSPanelTools;
  • Memo1: TMemo;
  • DSPanelTools4: TDSPanelTools;
  • ListBox1: TListBox;
  • DSIndicator1: TDSIndicator;
  • procedure DSBtExit1Click(Sender: TObject);
  • procedure DSBtMenu1Click(Sender: TObject);
  • procedure DSButton1Click(Sender: TObject);
  • procedure FormCreate(Sender: TObject);
  • procedure IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  • const AWorkCount: Integer);
  • private
  • { Déclarations privées }
  • public
  • procedure WMDropFiles(var msg : TMessage); message WM_DROPFILES;
  • { Déclarations publiques }
  • end;
  • var
  • Form1: TForm1;
  • implementation
  • Uses WinInet;
  • {$R *.dfm}
  • constructor TSend1.Create;
  • begin
  • //ca je c pas a koi ca sert, mais ca sert
  • FreeOnTerminate := True;
  • inherited Create(false);
  • //changer la priorité de la boucle
  • Priority := tpHigher;
  • end;
  • function Detection_Connexion :boolean;
  • var
  • dwFlags : DWORD;
  • begin
  • dwFlags :=INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN
  • + INTERNET_CONNECTION_PROXY ;
  • RESULT := InternetGetConnectedState(@dwFlags,0);
  • end;
  • procedure TForm1.IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  • const AWorkCount: Integer);
  • begin
  • DSIndicator1.Position := Round(AWorkCount);
  • end;
  • procedure TSend1.Execute; //code à executer par le thread
  • begin
  • inherited;
  • if Detection_Connexion = true then
  • begin
  • Form1.Label1.Caption:= 'Connexion...';
  • Form1.IdSMTP1.Connect; //Connexion
  • try
  • Form1.Label1.Caption:= 'Emission...';
  • Form1.IdSMTP1.Send(Form1.IdMessage1); //Envoi du message
  • finally
  • Form1.IdSMTP1.Disconnect; //Déconnexion
  • Form1.Label1.Caption:= 'Email envoyé...';
  • end;
  • Form1.ListBox1.Items.Clear;
  • Form1.Memo1.Clear;
  • Terminate;
  • end
  • else
  • begin
  • Form1.Label1.Caption:= 'Pas connecté à internet';
  • Terminate;
  • end;
  • end;
  • procedure TForm1.WMDropFiles(var msg : TMessage);
  • var
  • hand: THandle;
  • nbFich, i : integer;
  • buf:array[0..254] of Char;
  • begin
  • hand:=msg.wParam;
  • nbFich:= DragQueryFile(hand, 4294967295, buf, 254);
  • for i:= 0 to nbFich - 1 do
  • begin
  • DragQueryFile(hand, i, buf, 254);
  • Form1.ListBox1.Items.Add(buf);
  • end;
  • DragFinish(hand);
  • end;
  • procedure TForm1.DSBtExit1Click(Sender: TObject);
  • begin
  • Close;
  • end;
  • procedure TForm1.DSBtMenu1Click(Sender: TObject);
  • begin
  • Application.Minimize;
  • end;
  • procedure TForm1.DSButton1Click(Sender: TObject);
  • var
  • I: Integer;
  • begin
  • //Prepare le corps de l email
  • IdMessage1.Clear; //Efface l'entête et le corps du message
  • IdMessage1.From.Text:='EmailSender@hotmail.com'; //Adresse email de l'expediteur
  • IdMessage1.ReplyTo.EMailAddresses:='EmailSender@hotmail.com'; //Adresse email où le destinataire pourra répondre
  • IdMessage1.Recipients.EMailAddresses:=Edit1.Text; //Adresse email du destinataire
  • IdMessage1.Date:=Date; //Date de l'envoi du message
  • IdMessage1.Subject:='File(s) from EmailSender v2.00'; //Sujet du message
  • IdMessage1.Priority:=mpNormal; //Priorité du message
  • IdMessage1.Body.Assign(Memo1.Lines); //Corps du message
  • //Attache les fichiers
  • I:=0;
  • ListBox1.Items.Add('Fin');
  • Application.ProcessMessages;
  • while not(ListBox1.Items[I] = 'Fin') do
  • begin
  • if fileexists(ListBox1.Items[I]) then
  • TIdAttachment.Create(idmessage1.MessageParts,ListBox1.Items[I]);
  • I:=I+1;
  • end;
  • //Connexion au serveur smtp
  • IdSMTP1.AuthenticationType:=atLogin; //Type d'authentification
  • IdSMTP1.Host:='smtp.laposte.net'; //Hôte (ou par exemple pour Free : smtp.free.fr)
  • IdSMTP1.Port:=25; //Port (par exemple pour Free : 25)
  • IdSMTP1.UserName:='***i.***'; //Nom d'utilisateur
  • IdSMTP1.Password:='****'; //Mot de passe
  • TSend1.Create;
  • end;
  • procedure TForm1.FormCreate(Sender: TObject);
  • begin
  • Form1.Height:=205;
  • Form1.Width:=285;
  • DSPanel1.Left:=0;
  • DSPanel1.Top:=0;
  • DSPanel1.Width:=285;
  • DSPanel1.Height:=205;
  • DragAcceptFiles(Handle, true);
  • DSIndicator1.Position := 0;
  • end;
  • end.
unit EmailSender1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DSBtExit, DSControls, DSPanel, DSMagnetic, DSMarquee, DSButton,
  DSBtMenu, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdMessageClient, IdSMTP, StdCtrls, DSPanelTools, ShellApi,
  ExtCtrls, DSPanelTitle, DSImgBarre, DSProgress, DSScope;

type
  TSend1 = class(TThread)
  private

  protected
    procedure Execute();override;
  public
    constructor Create();
  end;

  TForm1 = class(TForm)
    DSPanel1: TDSPanel;
    DSBtExit1: TDSBtExit;
    DSMarquee1: TDSMarquee;
    DSBtMenu1: TDSBtMenu;
    DSButton1: TDSButton;
    DSPanelTools1: TDSPanelTools;
    Label1: TLabel;
    IdSMTP1: TIdSMTP;
    IdMessage1: TIdMessage;
    DSPanelTools2: TDSPanelTools;
    Edit1: TEdit;
    DSPanelTitle1: TDSPanelTitle;
    DSPanelTools3: TDSPanelTools;
    Memo1: TMemo;
    DSPanelTools4: TDSPanelTools;
    ListBox1: TListBox;
    DSIndicator1: TDSIndicator;
    procedure DSBtExit1Click(Sender: TObject);
    procedure DSBtMenu1Click(Sender: TObject);
    procedure DSButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
  private
    { Déclarations privées }
  public
    procedure WMDropFiles(var msg : TMessage); message WM_DROPFILES;
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation
Uses WinInet;
{$R *.dfm}

constructor TSend1.Create;
begin
 //ca je c pas a koi ca sert, mais ca sert
 FreeOnTerminate := True;
 inherited Create(false);
 //changer la priorité de la boucle
 Priority := tpHigher;
end;

function Detection_Connexion :boolean;
 var
  dwFlags : DWORD;
 begin
  dwFlags :=INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN
           + INTERNET_CONNECTION_PROXY ;
  RESULT := InternetGetConnectedState(@dwFlags,0);
 end;

procedure TForm1.IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
 DSIndicator1.Position := Round(AWorkCount);
end;

procedure TSend1.Execute;  //code à executer par le thread
begin
 inherited;
 if Detection_Connexion = true then
  begin
   Form1.Label1.Caption:= 'Connexion...';
   Form1.IdSMTP1.Connect; //Connexion
   try
    Form1.Label1.Caption:= 'Emission...';
    Form1.IdSMTP1.Send(Form1.IdMessage1); //Envoi du message
   finally
    Form1.IdSMTP1.Disconnect; //Déconnexion
    Form1.Label1.Caption:= 'Email envoyé...';
   end;
   Form1.ListBox1.Items.Clear;
   Form1.Memo1.Clear;
   Terminate;
  end
 else
  begin
   Form1.Label1.Caption:= 'Pas connecté à internet';
   Terminate;
  end; 
end;

procedure TForm1.WMDropFiles(var msg : TMessage);
var
  hand: THandle;
  nbFich, i : integer;
  buf:array[0..254] of Char;
begin
  hand:=msg.wParam;
  nbFich:= DragQueryFile(hand, 4294967295, buf, 254);
  for i:= 0 to nbFich - 1 do
    begin
      DragQueryFile(hand, i, buf, 254);
      Form1.ListBox1.Items.Add(buf);
    end;
  DragFinish(hand);
end;

procedure TForm1.DSBtExit1Click(Sender: TObject);
begin
 Close;
end;

procedure TForm1.DSBtMenu1Click(Sender: TObject);
begin
 Application.Minimize;
end;

procedure TForm1.DSButton1Click(Sender: TObject);
var
 I: Integer;
begin
 //Prepare le corps de l email
 IdMessage1.Clear; //Efface l'entête et le corps du message
 IdMessage1.From.Text:='EmailSender@hotmail.com'; //Adresse email de l'expediteur
 IdMessage1.ReplyTo.EMailAddresses:='EmailSender@hotmail.com'; //Adresse email où le destinataire pourra répondre
 IdMessage1.Recipients.EMailAddresses:=Edit1.Text; //Adresse email du destinataire
 IdMessage1.Date:=Date; //Date de l'envoi du message
 IdMessage1.Subject:='File(s) from EmailSender v2.00'; //Sujet du message
 IdMessage1.Priority:=mpNormal; //Priorité du message
 IdMessage1.Body.Assign(Memo1.Lines); //Corps du message
 //Attache les fichiers
 I:=0;
 ListBox1.Items.Add('Fin');
 Application.ProcessMessages;
 while not(ListBox1.Items[I] = 'Fin') do
  begin
   if fileexists(ListBox1.Items[I]) then
    TIdAttachment.Create(idmessage1.MessageParts,ListBox1.Items[I]);
    I:=I+1;
   end;
 //Connexion au serveur smtp
 IdSMTP1.AuthenticationType:=atLogin; //Type d'authentification
 IdSMTP1.Host:='smtp.laposte.net'; //Hôte (ou par exemple pour Free : smtp.free.fr)
 IdSMTP1.Port:=25; //Port (par exemple pour Free : 25)
 IdSMTP1.UserName:='***i.***'; //Nom d'utilisateur
 IdSMTP1.Password:='****'; //Mot de passe
 TSend1.Create;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Height:=205;
Form1.Width:=285;
DSPanel1.Left:=0;
DSPanel1.Top:=0;
DSPanel1.Width:=285;
DSPanel1.Height:=205;
DragAcceptFiles(Handle, true);
DSIndicator1.Position := 0;
end;

end.

Conclusion

Pour ajouter un fichier il suffit de le faire glisser et de le déposer dessus......
Si vous avez des améliorations a me soumettre pas de problème..
("C'est par les autres que l'on peut progresser" Blueangel)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • EmailSender.~dprTélécharger ce fichier [Réservé aux membres club]248 octets
  • EmailSender.cfgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier456 octets
  • EmailSender.dofTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 052 octets
  • EmailSender.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier205 octets
  • EmailSender.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • EmailSender1.~ddpTélécharger ce fichier [Réservé aux membres club]51 octets
  • EmailSender1.~dfmTélécharger ce fichier [Réservé aux membres club]8 653 octets
  • EmailSender1.~pasTélécharger ce fichier [Réservé aux membres club]4 905 octets
  • EmailSender1.dcuTélécharger ce fichier [Réservé aux membres club]10 298 octets
  • EmailSender1.ddpTélécharger ce fichier [Réservé aux membres club]51 octets
  • EmailSender1.dfmTélécharger ce fichier [Réservé aux membres club]8 658 octets
  • EmailSender1.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 896 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de stailer le 26/11/2003 11:18:54

Normalement les barres de progression se font sur le OnWork et non OnWorkBegin... Du moins ca marche comme ca avec les composants FTP d'Indy.

signaler à un administrateur
Commentaire de ericdevil89 le 26/11/2003 20:09:11

Oui je suis d'accord mais pour utiliser la barre de progression il te faut le nombre Max de "travail" a effectué ie AWorkCountMax........
Ds onWorkBegin il te suffit ds ce cas a mettre
Progressbar1.Position:=Round(AWorkCount/AWorkCountMax);
Et voila mais ds mon cas la cste AWorkCountMax est null!!!!!!!!!!!!!

signaler à un administrateur
Commentaire de Hnimsgern le 17/02/2005 11:40:49

Bonjour, Dans un programme que j'ai développé avec le composant SMTP la procedure Send est bloquante même si j'utilise l'antifreeze ou un threat. D'autre part le ProgressBar ne fonctionne pas pour la même raison. Ce bloquage est visible si fichier attaché est de grande taille est transmis. Est-ce un problème que pour le SMTP ? Je n'ai pas pu essayé ton programme parcequ'il manque les composants visuels.  HN.

signaler à un administrateur
Commentaire de hurrycane le 31/07/2005 16:01:09

c'est stupide d'utiliser des composant personnalisés dans une source qui est censée etre partagée et publique

signaler à un administrateur
Commentaire de aldorado le 28/10/2005 03:27:24

pour revennir a la progressbar, c'est donc un bug des compo indy puisque j'ai tout essayé et rien ne fonctionne
y a t'il une version des compo. indy ou maintenant ce bug la est corrigé ??
quelle est la solution ?
bref, merci ;)
+

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.