[Excel 2003] .Send, envoi mail VBA : erreur

Fermé
zoubinho Messages postés 15 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 27 février 2009 - 2 févr. 2009 à 14:35
 Utilisateur anonyme - 3 févr. 2009 à 18:53
Bonjour,

Voici un problème récurrent. Je le remets une nouvelle fois sur le tapis pour savoir si quelqu'un a une update à proposer.

Lorsqu'on utilise la fonction
.Send

pour envoyer un mail automatique, une pop-up s'affiche et une progress bar de 5 secondes vous empêche de cliquer sur Oui/Yes. Cette pop-up permet d'éviter d'utiliser la messagerie Outlook de manière frauduleuse, et d'éviter la prolifération de mail bombers au travers d'un code VBA.
Cependant, pour les "gentils" qui cherchent tout simplement à créer une belle et jolie interface permettant d'envoyer jusqu'à une 50aine de mails autmatiques, ce n'est pas très simple de cliquer 50 fois...

Voilà la réponse trouvée sur un forum :
J'ai eu le même pb, j'ai un fichier Excel qui génère des mails et les envoie.
A priori, il est impossible de désactiver cette option, ça fait partie de la sécurité d'OutLook.

Tu es obligé de passer par une phase de validation de l'utilisateur, comme moi, je préfère vérifier mes destinataires et compagnie, je rajoute juste la commande

.display = true


Ca force l'affichage du mail constitué sur le poste. L'utilisateur n'a plus qu'à appuyer sur le bouton Envoyer comme pour n'importe quel mail qu'il aurait écrit.

C'est la seule chose à faire, et elle est sans doute plus pratique dans le sens ou le message avec la barre de progression qui fait allusion à une application extérieure, aux virus, et le fait qu'il faille attendre 5 secondes avant de pouvoir valider le bouton Oui ... L'utilisateur Lamba pensera tout de suite au virus et fera Non 9 fois sur 10.

Mais envoyer le mail de manière invisible par Outlook 2003, impossible.


Y a-t-il un moyen de trouver des paramètres pour la fonction Send qui permettrait de contourner ce message de confirmation ?

Merci à tous pour votre feedback
A voir également:

2 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
3 févr. 2009 à 14:10
Bonjour,

Par curiosité j'ai regardé le pb. J'ai trouvé une solution mais je ne sais pas si tu connaissais déjà, ni si elle est généralisable et surtout si elle est applicable dans ton cas. J'ai réussi à le faire fonctionner chez moi (avec Outlook 2003).

J'ai trouvé un freeware qui s'appelle Mapilab et qui permet de gérer la stratégie de sécurité de Outlook.
Il est téléchargeable ici : https://www.mapilab.com/download/ (chapitre Advanced Security for Outlook)

Après l'installation de mapilab, il suffit de relancer Outlook. Alors au premier lancement de ta macro Excel, Mapilab te demande quelle stratégie de sécurité tu souhaite adopter. Si tu réponds "allow access" et que tu coches la case "always" alors il ne pose plus la question pour les envois de mail.

Bien sur il faut avoir les droits suffisants pour installer cet utilitaire et gérer la stratégie de sécurité sur ta machine mais bon ....

Voilà je ne suis pas allé plus loin

A+
0
zoubinho Messages postés 15 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 27 février 2009 6
3 févr. 2009 à 14:15
Merci pilas31 pour ta réponse.
Je teste cela de suite et vous donne un retour asap :)

Mais vu comme ça ça à l'air d'être un très bon workaround à une solution à développer (qui n'a pas l'air d'être envisageable de toute façon^^)

'vous tiens au jus !
0
Utilisateur anonyme
3 févr. 2009 à 18:53
Bonjour,

J'ai aussi rencontrez ce problème que j'ai contourner en instanciant un objet [ OutlookExpress ] ,
qui est présent par défaut sous WXP et ce même s'il n'est pas configurer.

À la demande de certains CCMISTES, j'ai inclu beaucoup de commentaire statique dans le code.

Option Explicit
'

'Déclaration de constantes
Const PourLecture = 1
Const cteAdresseSource = "monadresse@monserveur.net"


Private Sub cmd_Click(Index As Integer)
' Ici le paramètre signifie que le bouton
' fait partie d'un groupe et l'Index est le no
' du bouton

    If (Index > 0) Then
       
        ' Déclaration de variables
        ' Objet courriel
        Dim objMail As Object
        ' Adresse de destination
        Dim sDestination As String
        ' Nom du fichier en pièce jointe
        Dim sPieceJointe As String
        ' Variable contenant l'objet du courriel
        Dim msgTitre As String
        ' Variable contenant le corps du message
        Dim msgTexte As String
        
        ' Variable boolèen pour savoir si
        ' on doit incluse le texte du fichier
        ' texte dans le corps du message ou
        ' si on doit inclure le fichier en
        ' pièce jointe
        Dim Drapeau As Boolean
    
        ' Instancié un objet "courriel"
        Set objMail = CreateObject("CDO.Message")
        ' Initialisation de la variable
        Drapeau = False
        ' Affectation de l'adresse courriel du destinataire
        sDestination = "destinataire@serveur.net"
        ' Affectation du titre
        msgTitre = "Automatisme"
        ' Affectation du corps di message
        msgTexte = "Bonjour," & vbLf & "Corps du message"
        ' Affectation du nom du fichier incluant sa localisation
        sPieceJointe = "D:\Monfichier.txt"
        ' D'où pièce jointe existe -> Drapeau = Vrai
        Drapeau = True
    
        ' Avec objet courriel
        With objMail
    
            ' Ligne à modifier selon l'adresse de l'envoyeur
            ' Affectation à la propriété [ .From ] de l'adresse
            ' de l'envoyeur
            .From = cteAdresseSource
            ' Idem pour le destinataire
            .To = sDestination
            ' Affectation du titre ( objet du message )
            .Subject = msgTitre
            ' Ligne à modifier selon le texte voulu !
            ' Si pièce jointe existe
            If (sPieceJointe <> "") Then
                ' Si le texte de la pièce jointe doit
                ' être inclus dans le corps - Utilisation de la
                ' fonction [ LirePieceJointe ] qui retourne le
                ' contenu du fichier texte
                If (Drapeau = True) Then
                    .TextBody = msgTexte & vbLf & LirePieceJointe(sPieceJointe) & vbLf
                Else
                    ' Sinon spécifié qu'il est inclu en pièce jointe
                    ' dans le corps du message
                    .TextBody = msgTexte & vbLf & "Pièce jointe incluse : " & vbLf
                End If
            Else
                ' Sinon spécifié dans le corps qu'il n'y a pas de pièce jointe
                .TextBody = msgTexte & vbCrLf & "Aucune Pièce jointe" & vbCrLf
            End If
            ' Ligne à modifier selon l'adresse du serveur SMTP
            ' Ici "smtp.serveur.net" doit correspondre à votre FAI
            ' exemple : [ smtp.free.fr ]
            .Configuration.Fields _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.serveur.net"
            ' Aucune modification à cette ligne
            .Configuration.Fields _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

            ' Aucune modification à cette ligne
            .Configuration.Fields.Update
    
            ' Si on veut inclure le fichier en pièce jointe
            If ((sPieceJointe <> "") And (Drapeau = False)) Then
                objMail.AddAttachment (sPieceJointe)
            End If
            ' Envoyer le message
            .Send
        End With
    
        ' Libération de l'objet instancié
        Set objMail = Nothing
    
        MsgBox "Courriel envoyé !"
    Else
        ' Fermeture de la forme pour envoi de courriel
        Unload Me
    End If

End Sub
'

'  Ici la fonction n'étant pas typé, elle est de type Variant
' et peut retourner a peu près n'importe quoi.
Function LirePieceJointe(LeFichier)

    Dim objFSO, CeFichier

    ' Instancié un objet du système de fichier
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ' Si le fichier existe
    If (objFSO.FileExists(LeFichier)) Then
        ' Instancié un poignée sur le fichier pour l'ouvrir ( une main sur )
        Set CeFichier = objFSO.OpenTextFile(LeFichier, PourLecture)
        ' Lire tout le contenu du fichier
        LirePieceJointe = CeFichier.ReadAll
        ' Fermer le fichier
        CeFichier.Close
        ' Libérré l'objet du fichier
        Set CeFichier = Nothing
    End If
    
    ' Libérré l'objet du système de fichier
    Set objFSO = Nothing

End Function
'
0