IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Envoyer un mail avec Indy


Sujet :

Delphi

  1. #1
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Envoyer un mail avec Indy
    Bonjour

    J'ai un programme installé sur plusieurs machines avec un bouton permettant de m'envoyer un mail pour une demande de renseignements.
    Je connais évidemment l'adresse du destinataire puisque c'est moi, mais non les coordonnées de l'expéditeur.

    Or le composant TIdSMTP requiert ces données.

    Comment doi-je procéder ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 001
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 001
    Points : 15 490
    Points
    15 490
    Par défaut
    Yop !
    Un jour j'ai trouvé ce qui suit qqpart, peut-être ici... :
    --
    jp
    - - - -
    Pour assigner les valeur par défaut pour l'expédition de mail, il suffit de récupérer les valeurs du client mail par défaut de l'utilisateur.

    Les exemples d'utilisation de ces informations sont donnés avec les composants Indy, mais elles peuvent être utilisées sur tous les types de composant POP et SMTP.


    Pour récupérer les information d'Outlook ( le client mail le plus utilisé )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    procedure TMain.RetrieveIdMailFromOutlook;
    var
      Registry: TRegistry;
    begin
      Registry := TRegistry.Create;
      try
        Registry.RootKey := HKEY_CURRENT_USER;
        if Registry.OpenKeyReadOnly('Software\microsoft\internet account manager\Accounts\00000001') then
          begin
            edtHost.Text := Registry.ReadString('SMTP Server');
            IdSMTP.Host := edtHost.Text;
            IdMessage.Sender.Address := Registry.ReadString('SMTP EMail Address');
            IdMessage.Sender.Name := Registry.ReadString('SMTP Display Name');
            { Assignation des champs From afin de les faire correspondre avec l'envoyeur }
            IdMessage.From.Assign(IdMessage.Sender);
          end else
            raise exception.Create('Don''t match outlook data !');
      finally
        Registry.Free;
      end;
    end;
    Pour récupérer les information d'Eudora.
    Eudora stocke seulement quelques infos dans la base de registre, le chemin d'accès à ses fichiers de configuration qui sont sous forme de fichier TIni...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    procedure TMain.RetrieveIdMailFromEudora;
    var
      IniPath: string;
      Registry: TRegistry;
      IniEudora: TIniFile;
    begin
      Registry := TRegistry.Create;
      try
        Registry.RootKey := HKEY_CURRENT_USER;
        if Registry.OpenKeyReadOnly('Software\Qualcomm\Eudora\CommandLine') then
          begin
            IniPath := Registry.ReadString('Current');
            { Récupération du Chemin/Nom du fichier de configuration pour l'utilisateur }
            { de l'ordinateur (loggé) qui est le dernier dans la chaîne }
            while pos(' ',IniPath) <> 0 do 
              delete(IniPath,1,pos(' ',IniPath));
            IniEudora := TIniFile.Create(IniPath);
            edtHost.Text := IniEudora.ReadString('Settings','SMTPServer','');
            IdSMTP.Host := edtHost.Text;
            IdMessage.Sender.Address := IniEudora.ReadString('Settings','ReturnAddress','');
            IdMessage.Sender.Name := IniEudora.ReadString('Settings','RealName','');
            { Assignation des champs From afin de les faire correspondre avec l'envoyeur }
            IdMessage.From.Assign(IdMessage.Sender);
          end;
      finally
        FreeAndNil(Registry);
        FreeAndNil(IniEudora);
      end;
    end;

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    N'est-il pas possible de passer par la messagerie par défaut de l'expéditeur ?

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Mail et caractères accentués
    Bonjour

    Je constate que quand j'envoie des mails en utilisant la messagerie par défaut avec l'instruction ShellExecute(Handle,'open',PChar(Email),nil,nil,SW_SHOW), le mail arrive sans caractères spéciaux.
    Je n'arrive pas à trouver les valeurs que je dois appliquer à ces caractères (àéèëöüùç...) pour une conversion qui les rendrait visible.
    A noter que les balises du genre &eacute n'y changent rien.

    Merci d'avance à tout qui aurait la solution

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Ton mail est au format HTML ou texte brut ?
    En fait, je doute que Delphi soit à l'origine de ce problème puisqu'il ne fait qu'exécuter le programme de messagerie...
    Tu peux toujours essayer avec ces exemples trouvés avec Google :

    Citation Envoyé par • delphipage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Var email,destinataire,sujet,messge:String;
    begin 
    destinataire:='monemail@monemail.fr';
    sujet:='Mon titre';
    messge:='Mon message';
    email:='mailto:'+destinataire+'?subject='+sujet+'&body='+messge; 
    ShellExecute (Handle,'open',PChar(email),nil,nil,SW_SHOW); 
    end;
    Citation Envoyé par • micropic.free.fr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Uses WinTypes, ShellAPI;
     
    begin
      ShellExecute( 0, Nil, PChar('mailto:offset@multimania.com'),Nil, Nil, SW_NORMAL );
    end;
    Un autre lien, mais avec VB : http://vb-helper.com/howto_shell_mail.html

    [EDIT]-> Sujets fusionnés

  6. #6
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    J'ai remplacé le Handle de Shellexecute par 0 et le premier caractère accentué d'une chaine ne passe toujours pas alors que les suivant bien ???

    Quant à mon message d'origine sur l'envoi d'un mail avec les composants indy sans connaître le nom et le mot de passe de l'expéditeur, je ne vois toujours pas de solution.

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par defluc
    J'ai remplacé le Handle de Shellexecute par 0 et le premier caractère accentué d'une chaine ne passe toujours pas alors que les suivant bien ???
    Je ne pense pas que cela à quoi que ce soit à voir avec Delphi, mais plutôt en rapport avec le format de ton mail, son encodage. A propos, tu n'as pas répondu à ma question : Format HTML ou texte brut ?

    Citation Envoyé par defluc
    Quant à mon message d'origine sur l'envoi d'un mail avec les composants indy sans connaître le nom et le mot de passe de l'expéditeur, je ne vois toujours pas de solution.
    Je ne pense pas qu'il soit possible (pour des raisons évidentes de sécurité et de confidentialité) de récupérer l'adresse mail du client sans son intervention. En tous les cas, je n'aimerai pas qu'un programme puisse récupérer mon adresse mail sans rien me demander (ou alors possible que je n'ai pas bien saisi ton objectif, je ne suis pas assez renseigné sur le sujet). En tous les cas, imagine que cela soit possible, la porte ouverte aux spams... Les anti-virus bloqueront probablement cette fonctionalité, du moins j'espère.

    Alors récupérer le mot de passe du compte, n'y pense même pas !

  8. #8
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je comprends ces arguments.
    Mais la commande Shellexecute(0,'open',PChar(Email),nil,nil,SW_SHOW) ouvre bien la messagerie par défaut de la machine qui exécute le programme.
    Alors, ma question est simplement de savoir comment faire de même avec un composant qui permettrait à l'utilisateur de mon programme de m'envoyer une demande de renseignements que j'aurais préformatée avec un message par défaut.

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    La différence fondamentale, c'est qu'avec ShellExecute, l'utilisateur donne la permission au programme d'utiliser son adresse -> C'est l'utilisateur qui décide le moment où il enverra le mail.
    Pouvoir le faire automatiquement serait tout simplement une faille de sécurité. Encore plus si il s'agit de récupérer le login du compte mail.

    En tous les cas, ne compte pas sur les membres du forum pour t'aider à réaliser une telle fonction.

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Maintenant, il est possible de faire autrement, plus proprement :

    • Poster les renseignements saisis par l'utilisateur vers ton site web
    • T'envoyer un mail à partir de ton site web

    Ainsi, tu reçois les renseignements sans que l'utilisateur ait à fournir son mail.
    Ça t'intéresse ?

  11. #11
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Cà m'intéresse mais, je crois que je me suis mal fait comprendre.

    Mon but n'est pas de percer la confidentialité de l'expéditeur.
    Mon programme comporte un bouton sur lequel l'utilisateur décide du moment où il m'enverra le mail.
    Avec ShellExecute, son logiciel de messagerie s'ouvre sur son écran, il voit mon adresse et peut encore décider d'envoyer le mail ou non.

    Par contre, le ShellExecute n'est vraiment pas pratique pour préformater le body du message et les caractères accentués ne passent pas.

    C'est pourquoi, je cherche un compsant plus convivial.

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 001
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 001
    Points : 15 490
    Points
    15 490
    Par défaut
    Les composants de François Piette fonctionnent très bien pour tout ça, et il y a un super-exemple, regarde l'image jointe (2 copies d'écran l'une dans l'autre : le mailer et la réception dans mon OE, avec les caractères accentués minuscules ET majuscules, dans le titre ET dans le texte)
    HTH,
    --
    jp
    Images attachées Images attachées  

  13. #13
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    J'avance mais

    Email:='mailto:ego@swing.be?subject=Mon sujet&body=àâéèêëîïôöùûü';
    ShellExecute(0,'open',PChar(Email),nil,nil,SW_SHOW)

    ne fait apparaître que la chaine àâ èê îïôöùû dans le corps du message.

    Il ne manque que le «é».

    Bizarre non ? et dommage pour la langue de Molière.

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par defluc
    Cà m'intéresse mais, je crois que je me suis mal fait comprendre.
    En effet, je n'ai pas bien saisi ton objectif. En fait, tu cherches à obtenir un mail de l'utilisateur ou bien seulement des renseignements qu'il aura saisi ?

    Si tu veux juste récupérer des informations du client, tu peux par exemple ouvrir un formulaire de saisie dans une page web (via ShellExecute). Pour cela, il suffit d'héberger ton formulaire HTML sur un site. L'utilisateur remplira le formulaire à partir de son propre navigateur et le serveur te le renverra directement sur ton mail. C'est simple et l'utilisateur est sécurisé car il n'est pas forcé de fournir son adresse mail. C'est cette solution qui est le plus souvent utilisée par les logiciels renommés pour questionner les utilisateurs.

    Sache qu'il serait tout à fait possible de réaliser ce formulaire de saisi avec Delphi sans passer par un navigateur web, car ton programme Delphi peut simuler un navigateur, mais cela implique que l'utilisateur permette l'accès internet à ton programme (firewall). La fonction proposée par Jipété nécessite aussi cette permission, tandis que le formulaire HTML la possède déjà... la messagerie par défaut du client la possède déjà également.

  15. #15
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    Et hop .. une petite idée qui me passe par la tête comme ca juste avant d'aller au lit. Si dans un des repertoires de ton programme tu stoque ton mail prégénéré sous forme eml. Après, si tu ouvre le fichier eml avec un ShellExecute, il devrait te l'ouvrir avec la messagerie par défaut. Et la, l'utilisateur n'a qu'à appuyer sur répondre, ton adresse est déja inscrite, il a plus qu'à envoyer

    Peut être que c'est envisageable dans ton cas ou alors mon cerveau fatigué dis des bêtises quoi qu'il en soit, je file au lit ^^

  16. #16
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par hy00ga
    Et hop .. une petite idée qui me passe par la tête comme ca juste avant d'aller au lit. Si dans un des repertoires de ton programme tu stoque ton mail prégénéré sous forme eml. Après, si tu ouvre le fichier eml avec un ShellExecute, il devrait te l'ouvrir avec la messagerie par défaut. Et la, l'utilisateur n'a qu'à appuyer sur répondre, ton adresse est déja inscrite, il a plus qu'à envoyer

    Peut être que c'est envisageable dans ton cas ou alors mon cerveau fatigué dis des bêtises quoi qu'il en soit, je file au lit ^^
    L'eml c'est pas un fichier uniquement pour OutLook ?
    Moi qui utilise uniquement Mozilla Thunderbird, et qui n'ai rien configuré dans outlook, ca me servierait à rien d'envoyer un mail avec son système si ca ne m'ouvre pas le bon programme .

  17. #17
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    En effet tu as raison J'avais vu que l'eml était dans les RFC je me suis dit que tous les clients de messageries devaient pouvoir les ouvrir... Mais c'était qu'à moitié vrai. Le format interne d'un eml correspond au standard de communication ARPA machin chose, mais le fait d'écrire cela dans un fichier n'est pas en lui même normalisé. Donc j'ai installé TB pour contrôler et en effet il ne sait pas quoi en faire. Donc cette technique ne marche que avec Outlook

  18. #18
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Moi aussi, je ne travaille qu'avec Thunderbird.

    Je voudrais que le mail qui m'est envoyé soit préformaté avec des champs personnalisés comme une signature qui serait le nom de l'utilisateur (GetUserName...).

    Alors, comment puis-je

    • Poster les renseignements saisis par l'utilisateur + les données personnalisées que j'aurais capturées vers mon site web
    • M'envoyer un mail contenant tout cela à partir de mon site web

  19. #19
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Tout cela est possible avec PHP.
    Comme tu pourras le constater, tu n'es pas le 1er à vouloir réaliser cette fonction.
    Pour preuve, regarde ces sujets rapidement :
    http://www.developpez.net/forums/sho...d.php?t=217976
    http://www.developpez.net/forums/sho...d.php?t=228484

    Si tu me dis exactement ce que tu veux, je peux te conseiller. A lire absolument avant de commencer :
    http://php.developpez.com/faq/?page=mail#envoi-mail

    Voici un exemple de script :
    http://www.developpez.net/forums/sho...d.php?t=225437

    PHP permet également de récupérer des informations sur le client...

  20. #20
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je savais que c'était possible en PHP, ASP, JavaScript....

    Encore faut-il que mon hébergeur traite ces langages.
    A ma connaissance, seul le JavaScript est indépendant de l'hébergeur.

    Par contre, il peut être bloqué par le paramétrage du PC Client.

    Me trompe-je ?

Discussions similaires

  1. [Indy] Envoyer un mail avec Delphi
    Par Hmalik dans le forum Composants VCL
    Réponses: 1
    Dernier message: 13/03/2011, 18h18
  2. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 13h27
  3. Comment envoyer un mail avec la commande mail
    Par pi3141563 dans le forum Réseau
    Réponses: 5
    Dernier message: 21/10/2004, 14h34
  4. Envoyer un mail avec mailto de haute importance
    Par VirginieGE dans le forum ASP
    Réponses: 3
    Dernier message: 13/08/2004, 14h41
  5. Envoyer un mailling avec Indy
    Par bidochon dans le forum Web & réseau
    Réponses: 5
    Dernier message: 03/08/2004, 20h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo