Je voudrais que mon programme en VB6 envoie, à un moment précis, un mail automatiquement et sans passer par la validation de l'utilisateur. Je travaille sous windows 2000.
Merci
Je voudrais que mon programme en VB6 envoie, à un moment précis, un mail automatiquement et sans passer par la validation de l'utilisateur. Je travaille sous windows 2000.
Merci
Bonjour,
Je veux dire par automatique le fait qu'il s'exécute quand l'utilisateur effectue une action bien précise et sans l'intervention de celui-ci.
Merci d'avance pour toutes réponses
Oui, c'est pour ça que je pensais à propos de WINSOCK, mais si Delbeke a dit que le seul moyen est de piloter outlook c'est peut être pour une certaine raison, du coup, attend un peu pour qu'il clarifie pourquoi il n'a pas proposé autre chose comme WINSOCK, avant que tu te lances dans des recherches en vain. Moi je l'aurai fait avec WINSOCK, mais peut etre Delbeke a compris quelque chose dans ce que tu as dis, que moi j'ai pas compris, ainsi il a trouvé qu'avec WINSOCK ce n'est pas faisable et t'as proposé de chercher à piloter Outlook
J'ai utilisé sa en vba, envoi automatique sans confirmation, et tout ce que j'ai fait en vba j'ai réussi à le convertir en vb6 en utilisant des objets, je te met mon code si jamais sa peut t'aider
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 Dim ol As Object Set ol = CreateObject("Outlook.Application") Dim olmail As Object Set olmail = ol.CreateItem(MailItem) With olmail .To = "MAIL1;MAIL2;MAILX" .Subject = "SUJET" .Body = "BLA BLA BLA" _ "ET BLA BLA BLA" _ "ET BLA BLA." .Attachments.Add "c:\PIECE JOINTE.txt" .Send End With Set ol = Nothing Set olmail = Nothing
D'après ce que j'avais compris, il fallait envoyer un mail de relance si on avait pas recu un mail de confirmation
Ce qui impilque que pour détecter si on a reçu la confiormation de chercher dans les messages reçus si on avait ou non la confirmation. Hors les envois de départ ont été fait par outlook, donc c'est dans outlook qu'on doit chercher si un mail a reçu sa confirmation ou pas et eventuellement d'envoyer une relance.
Winsock c'est bien pour envoyer des mails en automatique, mais pour la partie recherche de l'info .....
Ah oui, moi j'ai proposé winsock car je n'avais pas compris qu'il faut parcourir son inbox, et j'étais sur que si tu n'as pas proposé WINSOCK, c'est pour une raison.
Pour résumer, cpf2006, si t'as pas besoin de parcourir ton inbox et tout ton but est d'envoyer des mails automatique, je te recommande winsock, si tu dois parcourir ton inbox, je te conseille de voir ce code (en anglais) qui te permet de voir comment parcourir le inbox de outlook!
Sinon aussi regarde ce qu'il t'a passé Paindep pour l'envoi des mails, ça peut être utile pour toi
Bonjour,
Je vous remercie grandement pour toutes vos réponses.
Je n'ai pas besoin de parcourir l'inbox mais juste d'envoyer des mails vers l'administrateur lorsque, à l'utilisation d'un programme en VB6 sous windows 2000, l'utilisateur commet une erreur. Donc un mail auto sans que l'utilisateur doive intervenir d'une manière ou d'une autre.
J'ai déjà commencé à comprendre l'objet winsock et cela me semble encore un peu confus. Mais je vais quand même tester le script avec Outlook. Je vous tiens au courant. Merci
RE
J'ai testé le code de 'paindep' avec l'objet "outlook-Application".
Le résultat est une erreur interne au programme avec le num 80030003.
l'erreur pointe sur la ligne " Set olmail = ol.CreateItem(MailItem)" du script et donne une valeur à olmail = empty (vide) comme s'il n'avait pas trouvé l'objet outlook
Ma question : faut-il possèder outlook complet ou bien outlook-express suffit ?
Je continue mon exploration de winsock
Merci et à très bientôt
A ma connaissance, tu dois ajouter une référence (Menu projet, reference) vers : Microsot Outlook XX Object library (XX = la version expl 11.0)
Sinon pour winsock, ça ne doit pas te prendre tant que ça, y a un tas d'example sur le net comment envoyer un mail avec winsock !
Si c'est pour parcourir ton inbox, je t'ai passé un lien dans ma réponse précédente
Bon courage
C'est normal que sa ne marche pas je t'ai dis que ce code était utilisé en vba, or tu es en vb6 là, je ne pense pas qu'il y est obligatoirement besoin de référence comme la dit justgreat mais passer par des objets devrait suffire, il faut tenter quelque chose comme
Et surement la meme chose pour le olmail je pense mais je n'ai pas la syntaxe exacte désolé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim appOutlook As Object Set appOutlook = CreateObject("Outlook.application")![]()
Il est également possile d'utiliser le controle MAPI
Ajouter un controle Microsoft Mapi Control au projet
Déposer un controle MapiSession et un controle MapiMessages sur la feuille
Ajouter ce code
Cette technique à l'avantage de fonctioner avec tous les clients mail supportant le protocole MAPI. (Ce qui est le cas de tous les clients Mail de Microsoft)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85 Private Function SendMapi(SendTo As String, _ CopyTo As String, _ BCopyTo As String, _ Subject As String, _ Body As String, _ PJ As String) As Boolean Dim ADR As Variant Dim iPnt As Integer Dim iPosit As Integer MAPISession1.LogonUI = True MAPISession1.SignOn With MAPIMessages1 .SessionID = MAPISession1.SessionID 'purge des destinataires While .RecipCount > 0 .RecipIndex = 0 .Delete mapRecipientDelete Wend 'purge des messages While .MsgCount > 0 'purge des fichiers attachés au message .AttachmentIndex = 0 While .AttachmentCount > 0 .Delete 2 Wend .Delete 0 Wend .MsgIndex = -1 ADR = Split(SendTo, ";") For iPnt = 0 To UBound(ADR) If ADR(iPnt) <> "" Then .RecipIndex = .RecipCount .RecipDisplayName = ADR(iPnt) '.ResolveName .RecipType = mapToList End If Next ADR = Split(CopyTo, ";") For iPnt = 0 To UBound(ADR) If ADR(iPnt) <> "" Then .RecipIndex = .RecipCount .RecipDisplayName = ADR(iPnt) '.ResolveName .RecipType = mapCcList End If Next ADR = Split(BCopyTo, ";") For iPnt = 0 To UBound(ADR) If ADR(iPnt) <> "" Then .RecipIndex = .RecipCount .RecipDisplayName = ADR(iPnt) '.ResolveName .RecipType = mapBccList End If Next .MsgSubject = Subject .MsgNoteText = Body & vbCrLf & " " 'Texte de l'Email .MsgReceiptRequested = Accusé '================ 'Fichier attaché If PJ <> "" Then .AttachmentIndex = 0 '.AttachmentCount iPosit = InStrRev(PJ, "\") If iPosit = 0 Then .AttachmentName = PJ 'fichier à attacher Else .AttachmentName = Mid(PJ, iPosit + 1) 'fichier à attacher End If .AttachmentPathName = PJ 'chemin complet + nom du fichier .AttachmentPosition = Len(.MsgNoteText) - 1 .AttachmentType = mapData 'le fichier joint est du type fichier de données End If SendMapi = True On Error GoTo ErrSend .Send False On Error GoTo 0 End With MAPISession1.SignOff Exit Function ErrSend: MsgBox "Erreur n°" & Err & " " & Err.Description, VbInformation,"Erreur soumission de l'email à MAPI" SendMapi = False Resume Next End Function
OK! Merci à tous ! Je suis arrivé à mes fins avec l'objet de VB6 "winsock" et grâce aussi aux nombreux forum sur la questions.
Encore merci
Désolé pour le retard:je n'avais pas encore lu le dernier message.
Mon problème était que je ne connaissait pas la procédure à utiliser pour se connecter avec telnet
Voici le code que j'ai utilisé et que j'ai pris ailleurs :
- après avoir ajouté un object winsock (appelé "Winsock1") dans le projet
Voila, mais il faudra peut-être encore adapter certaines choses
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 Set evt = Winsock1 Winsock1.Close Winsock1.LocalPort = 7000 Winsock1.RemotePort = 25 Winsock1.Connect "server.a.adapter.be", 25 While Winsock1.State <> sckConnected DoEvents Wend nextSend = False Winsock1.SendData "HELO login_dans_serveur" & vbCrLf While nextSend = False DoEvents Wend nextSend = False Winsock1.SendData "MAIL FROM:" & "adresse_mail_expediteur" & vbCrLf While nextSend = False DoEvents Wend nextSend = False Winsock1.SendData "RCPT TO:" & "adresse_mail_destinataire" & vbCrLf While nextSend = False DoEvents Wend nextSend = False Winsock1.SendData "DATA" & vbCrLf While nextSend = False DoEvents Wend Winsock1.SendData "From:" & "adresse_mail_expediteur" & vbCrLf Winsock1.SendData "To:" & "adresse_mail_destinataire" & vbCrLf Winsock1.SendData "Subject:" & "message à adapter" & vbCrLf Winsock1.SendData lign & vbCrLf Winsock1.SendData "MIME-Version 1.0" & vbCrLf Winsock1.SendData "Content-Type:text/plain; charset=" & Chr(34) & "ISO-8859-1" & Chr(34) & vbCrLf Winsock1.SendData "Content-Transfert-Encoding: 8 bit" & vbCrLf & vbCrLf '----- corps message ----- Winsock1.SendData "" & vbCrLf Winsock1.SendData "message éventuel" & vbCrLf Winsock1.SendData "----------------------------------------------------" & vbCrLf Winsock1.SendData "On met se qu'on veut dans le corps " & vbCrLf Winsock1.SendData "" & vbCrLf nextSend = False Winsock1.SendData vbCrLf & "." & vbCrLf While nextSend = False DoEvents Wend nextSend = False Winsock1.SendData "QUIT" & vbCrLf While nextSend = False DoEvents Wend Winsock1.Close End Sub Public Sub evt_Close() rtxtLog = "Deconnexion réalisée" MsgBox rtxtLog End Sub Public Sub evt_Connect() rtxtLog = "Connexion au serveur réalisée" If Module1.ifconnect = True Then MsgBox rtxtLog End Sub Public Sub evt_ConnectionRequest(ByVal requestID As Long) rtxtLog = "Demande de connexion au serveur" MsgBox rtxtLog End Sub Public Sub evt_DataArrival(ByVal bytesTotal As Long) Dim tmp As String If Winsock1.State = sckClosed Or Winsock1.State = sckClosing Then Exit Sub Winsock1.GetData tmp, vbString, bytesTotal rtxtLog = Chr(13) & tmp MsgBox "infos serveur : " & rtxtLog nextSend = True End Sub Public Sub evt_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) If Module1.ifconnect = True Then MsgBox "ERREUR de connection " & vbCrLf & Number & " : " & Description End If End Sub
Merci à tous pour l'aide précieuse que vous m'apporter régulièrement
A+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager