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

VB 6 et antérieur Discussion :

VB 6 mail avec Outlook


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut VB 6 mail avec Outlook
    Bonjour à tous!

    J'ai developpé une appli pour envoyer des mails à des destinataires dont les adresses sont stocquées dans une base Access.
    Ci-dessous la routine d'envoi de mail avec Outlook:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Public Sub CreateEmail(Recipient As String, Subject As String, Body As String, Optional Attach As Variant)
     
        Dim I As Integer
        Dim oEmail As Outlook.MailItem
        Dim appOutLook As Outlook.Application
     
        ' créer un nouvel item mail
     
        Set appOutLook = New Outlook.Application
        Set oEmail = appOutLook.CreateItem(olMailItem)
     
        ' les paramètres
     
        oEmail.To = GetTok(Recipient, 1, ";")   'le champ adresse pouvant contenir ++ adresse séparées par des ";"
        If GetTok(Recipient, 2, ";") <> "" Then
          oEmail.CC = GetTok(Recipient, 2, ";")
          If GetTok(Recipient, 3, ";") <> "" Then
             oEmail.BCC = GetTok(Recipient, 3, ";")
          End If
       End If
     
        'oEmail.To = Recipient
        oEmail.Subject = Subject
        oEmail.Body = Body
     
        If Not IsMissing(Attach) Then
     
           If TypeName(Attach) = "String" Then
     
                 ' s'il y a des pièces jointes
                oEmail.Attachments.Add Attach
     
     
           Else
     
                For I = 0 To UBound(Attach) - 1
                oEmail.Attachments.Add Attach(I)
     
                Next
     
            End If
     
        End If
     
        ' envoie le message
        oEmail.Send
     
        ' détruit les références aux objets
        Set oEmail = Nothing
     
        Set appOutLook = Nothing
     
    End Sub
    j'ai installé Express Click Yes pour le click automatique sur l'alerte que Outlook m'envoie. C'est cool mais je voudrais que cette boite de dialogue soit transparent à l'exploitation de l'appli, pas visible quoi. Quelqu'un at-il une idéé?

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Il est possible d'utiliser mon composant ocx dont le source est ici
    Comme il travaille au niveau smtp, pas de problemes d'alertes .
    Seul inconvenient connu à ce jour, il ne gere pas l'authentification ni la liaison sécurisée.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Suite
    En plus de ton composant SMTP dont il faut ajouter le composant et l'OCX qu'il faut copier dans le répertoire du projet. Est-*ce que j'aurai besoin de tes classes?

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    La place pour les composants ocx serait plutot dans le repertoire system32.
    (une dll est egalement a placer à cet endroit MimeCode.dll)
    L'avantage du composant ocx, c'est qu'il s'auto-suffit, pas besoin d'ajouter du code dans le projet a part celui permettant de piloter le composant.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Suite.
    Slt,

    Voici le nouveau code que j'utilise pour l'envoi des mails basés sur ton OCX:

    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
    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
    Public Sub SendMail(Compte As String)
     
    'envoi du mail
      Dim strTemp As String
      Dim Liste As Variant
      Dim iPnt As Integer
     
     
      'raz des elements du mail dans le composant
      SmtpCli1.InitMail
     
      'Initialisation de JnlDirectory
      SmtpCli1.JnlDirectory = App.Path & "\EML"
     
      'niveau de priorité
      SmtpCli1.Priority = Normal
     
      'sujet du mail
      SmtpCli1.Subject = "Fichier de " & Format(Date, "MM/YYYY")
     
      'message (peut être au format HTML)
      SmtpCli1.Message = lire_corps("Echelles")
     
      'chargement de la liste des destinataires
      Dim rec As Recordset
      Set rec = New ADODB.Recordset
      rec.Open "select mailcli from abonne where comptecli='" & Compte & "'", Cnech, adOpenForwardOnly, adLockReadOnly
      If rec.EOF = True Then
        strLog = Now & " : Envoi des avis du compte " & Compte & ": Echec : Adresse d'envoi inexistante"
        Call fPrintInLogFile(strLog)
        Exit Sub
      Else
     
      'ajout d'un destinataire
      'la methode add utilise deux parametres
      ' SmtpCli1.Receipts.Add NomDestinataireEnClair, AdresseEmail
      SmtpCli1.Receipts.Add " ", GetTok(rec!mailcli, 1, ";")
     
      'chargement de la liste des destinataires de copie conforme
        If GetTok(rec!mailcli, 2, ";") <> "" Then
         SmtpCli1.CCReceipts.Add " ", GetTok(rec!mailcli, 2, ";")
     
        'chargement de la liste des destinataires de copie conforme aveugle
          If GetTok(rec!mailcli, 3, ";") <> "" Then
              SmtpCli1.BCCReceipts.Add " ", GetTok(rec!mailcli, 3, ";")
          End If
        End If
     
      'ajout des pieces jointes
        Dim aResultat() As String
        Dim lRet As Long
        Dim i As Long
     
        lRet = GetFilesPathFromDirectory(strSendDir, aResultat())
        If lRet <> -1 Then
            For i = 0 To lRet
                'Debug.Print "Fichier " & i + 1 & " = " & aResultat(i)
                SmtpCli1.Attachments.Add aResultat(i)
            Next i
        End If
     
      'Envoi du Mail
      If SmtpCli1.SendMail Then
        strLog = Now & " : Envoi avis du compte " & Space(8) & Compte & " Destinataires : " & rec!mailcli & "  succès "
        Call fPrintInLogFile(strLog)
      Else
        strLog = Now & " : Echec lors de l'envoi des avis du compte " & Space(8) & comptecli & " à : " & adr!mailcli & "  succès "
        Call fPrintInLogFile(strLog)
      End If
     End If
    End Sub
    Malheureusement l'exécution se plante lors de l'appel de la méthode SmtpCli1.Sendmail, il affiche l'erreur n°'76': Chemin d'accès introuvable.
    Quels sont les répertoires utilisés par cette methode?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Sinon il existe aussi un formulaire a creer dans Outlook dans un repertoire de la boite en question qui permet d outrepasser cette pop up de facon completement transparente.

  7. #7
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    déjà au premier coup d'oeil, il faudrait voir si le répertoire App.Path & "\EML" existe.

  8. #8
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Reponse
    Il existe.

    En fait j'ai eu un envoi avec succès et pafff! il me sort l'erreur 76

  9. #9
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Solution
    J'ai mis en commentaire la ligne
    'SmtpCli1.JnlDirectory = App.Path & "\EML"

    et tout baigne comme on dit chez moi.

  10. #10
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut erreur
    je crois que je me suis vite emballé

    je choisis bien SmtpCli1.TextMode = True mais j'ai toujours au finish des mails avec des corps vide.

    Qu'ai-je omis.

  11. #11
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Quand tu es dans ton projet, demande a vb d'ajouter un projet, et la lui lui donne le projet du composant, ca va te permettre de tracer ce que fait exacement le composant. Ce sera comme si il faisait partie de ton projet,entre autre de suivre le cheminement du corps du message.

  12. #12
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut ok
    En fait, j'ai relancé ton code vu qu'il envoyait un mail avec contenu, j'ai compris qu'il y avait un bug dans mon code. En traçant, je me suis rendu compte d'une erreur dans la fonction qui lit le corps du mail. Donc pb résolu.

    Mais dis Delbeke, pourquoi en dépit des vbcrlf que je met en fin de la lecture de chaque ligne, j'obtiens toujours un texte sans retour à la ligne?

    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
    lecture:
    bodyMail = ""
     
    Do While Not EOF(nFile) 'Tant que la fin de fichier n'est pas atteinte
     
       Input #nFile, chaine
     
       bodyMail = bodyMail & vbCrLf & chaine
     
    Loop
     
    'Fermeture
     
    Close #nFile
     
    lire_corps = bodyMail

    PS: Le contenu lu est dans un fichier txt.

  13. #13
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Le corps du body derait etre au format html,
    Fais à la fin de ta rountine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bodyMail = Replace(bodyMail ,vbCrLf,"<BR>")
    Avant de l'envoyer au composant, ca devrait le faire

  14. #14
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Merçi
    Cà fait l'affaire, mais seulement il interprète pas les virgules de même que les lignes vierge.

    J'ai duû faire un lire_corps = Replace(bodyMail, vbCrLf, "<P><BR>") pour qu'il puisse inserer les lignes vierges, mais pour les virgules j'en ai pas la moindre idée. T'en as une?

Discussions similaires

  1. le .save d'un mail avec Outlook
    Par Hydex dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/06/2007, 15h38
  2. Envoi de mail avec Outlook
    Par lolo_bob2 dans le forum Access
    Réponses: 5
    Dernier message: 31/05/2006, 13h30
  3. envois d'un mail avec outlook express en vb
    Par trefles dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/01/2006, 18h27
  4. Envoi E-mail avec Outlook Express
    Par chim33 dans le forum Access
    Réponses: 6
    Dernier message: 24/12/2005, 17h14
  5. Envoi mail avec Outlook accusé de réception
    Par KapoueMan dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2005, 10h41

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