Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

ter

XLDnaute Nouveau
Bonjour,

Je voudrais pouvoir envoyer des mails via excel à partir d'Outlook.
Ceci ne me pose pas de problème à partir du code :
Code:
Dim ol As Object, monItem As Object
Set ol = CreateObject("outlook.application")
Set monItem = ol.CreateItem(olMailItem)

For i =2 to 100
monItem.To = "email du destinataire"
monItem.Subject = "sujet n°"&cells(i,2)


monItem.Body = "Blabla"

monItem.Send
Set ol = Nothing

'    End If
'Next i
MsgBox "les demandes ont bien été transmises "

End Sub

Le problème est que je voudrais pouvoir envoyer ces mails à partir non de l'adresse Outlook qui est configuré sur mon ordinateur, mais à partir d'une adresse mail spécialement réservée à l'envoi de mail à laquelle on m'a donné accès.
En effet, à partir d'Outlook, il me suffit en mode manuel, après avoir cliqué sur "nouveau message", de cliquer sur "option", puis "de" et je peux choisir à partir de quelle boîte mail envoyer mes mails (la mienne ou celle à laquelle on m'a donné accès).

Malheureusement, je ne sais pas comment faire cela à partir de vba. Existerait-il un moyen ? (par exemple une sorte de ligne) :
monItem.From= "email à partir duquel j'envoie le courrier"
 

Dedekind

XLDnaute Nouveau
Re : Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

Tu as déja essayé d'utiliser la propriété SenderEmailAddress ?
monItem.SenderEmailAddress = "email à partir duquel j'envoie le courrier"

En espérant t'avoir aidé :cool:
 

ter

XLDnaute Nouveau
Re : Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

Bonjour Dedekind,

Merci pour ton aide. Cependant, quand j'utilise cette propriété, un message vba s'affiche en me disant que cette propriété est en lecture seule.
Cela viendrait-il de la configuration de mon Outlook ? Y aurait-il une autre solution ?
 

mromain

XLDnaute Barbatruc
Re : Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

Bonsoir ter, Dedekind, le forum,

...Cependant, quand j'utilise cette propriété, un message vba s'affiche en me disant que cette propriété est en lecture seule...
Effectivement, SenderEmailAddress est en lecture seule, par contre, on peut définir l'expéditeur avec Sender.
Ci-dessous un petit exemple à adapter :
VB:
Private Const CST_EmailFrom As String = "expediteur@boitemail.fr"

Sub test()
Dim olApp As Outlook.Application, olAcc As Outlook.Account, olMail As Outlook.MailItem, i As Long
    
    'récupérer / créer l'application Outlook
    Set olApp = GetObject(, "Outlook.Application")
    If olApp Is Nothing Then Set olApp = CreateObject("Outlook.Application")
    If olApp Is Nothing Then Stop   'si on s'arrête ici, c'est qu'Outlook n'était pas ouvert et qu'on n'a pas pu l'ouvrir
    
    'récupérer le compte mail correspondant à CST_EmailFrom
    For i = 1 To olApp.Session.Accounts.Count
        If olApp.Session.Accounts(i).CurrentUser.Address = CST_EmailFrom Then Set olAcc = olApp.Session.Accounts(i)
    Next i
    If olAcc Is Nothing Then Stop   'si on s'arrête ici, c'est qu'on n'a pas trouvé la boite mail CST_EmailFrom
    
    'créer et envoyer le mail
    Set olMail = olApp.CreateItem(olMailItem)
    olMail.Sender = olAcc.CurrentUser.AddressEntry
    olMail.Subject = "test"
    olMail.Body = "bla bla bla"
    olMail.To = "destinataire@boitemail.fr"
    olMail.Send
    
    Set olMail = Nothing
    Set olApp = Nothing
    Set olAcc = Nothing
End Sub
A+
_________________________________________________________________________________
Edit
Je reviens vers le code que je n'avais pas testé si Outlook était fermé. C'est corrigé.
VB:
Private Const CST_EmailFrom As String = "expediteur@boitemail.fr"
Sub test()
Dim olApp As Outlook.Application, olAcc As Outlook.Account, olMail As Outlook.MailItem
   
    'récupérer / créer l'application Outlook
     On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")
    If olApp Is Nothing Then Set olApp = CreateObject("Outlook.Application")
    On Error GoTo 0
    If olApp Is Nothing Then Stop   'si on s'arrête ici, c'est qu'Outlook n'était pas ouvert et qu'on n'a pas pu l'ouvrir
    
    'récupérer le compte mail correspondant à CST_EmailFrom
     For Each olAcc In olApp.Session.Accounts
        If olAcc.CurrentUser.Address = CST_EmailFrom Then Exit For
    Next olAcc
    If olAcc Is Nothing Then Stop   'si on s'arrête ici, c'est qu'on n'a pas trouvé la boite mail CST_EmailFrom
   
    'créer et envoyer le mail
     Set olMail = olApp.CreateItem(olMailItem)
    olMail.Sender = olAcc.CurrentUser.AddressEntry
    olMail.Subject = "test"
    olMail.Body = "bla bla bla"
    olMail.To = "destinataire@boitemail.fr"
    olMail.Send
   
    Set olMail = Nothing: Set olApp = Nothing: Set olAcc = Nothing
End Sub
De plus, je me suis aperçu que ça n'avais pas tout à fait le même comportement que lorsqu'on change le De manuellement à la création d'un mail.
En effet, je reçois un mail envoyé par "mon.adresse@maboitemail.fr" de la part de "expediteur@boitemail.fr".

Il n'empêche que lorsqu'on répond au mail, on répond à expediteur@boitemail.fr.

A+
 
Dernière édition:

ter

XLDnaute Nouveau
Re : Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

Bonjour mromain,

Tout d'abord, un grand merci pour ton aide. Si cela marche, ça m'aidera beaucoup.
Cependant, ton code bug systématiquement à la ligne :
Code:
 If olAcc Is Nothing Then Stop   'si on s'arrête ici, c'est qu'on n'a pas trouvé la boite mail CST_EmailFrom

Je précise que quelque soit l'adresse mail que je mets, le code s'arrête là (même celle qui est configurée sur mon ordinateur).

Pourtant, je ne l'ai pas adapté vraiment. J'ai juste changé l'adresse renvoyant à CST_EmailFrom et ai supprimé les déclarations de variables (car quand je lance le programme, vba m'écrit "type défini par l'utilisateur non défini").


Sauriez-vous pourquoi cela ne marche pas ?
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

Bonjour ter,

Il faudrait tester en laissant la ligne de déclaration des variables, et en activant la référence Microsoft Outlook XX.0 Object Library.
Normalement ça devrait marcher si le compte correspondant à l'adresse mail existe bien dans Outlook.

Si jamais ça ne fonctionne toujours pas, le code suivant devrait afficher tous les adresses des comptes configurés dans Outlook.
Contrôler si on retrouve l'adresse de CST_EmailFrom.
VB:
Sub ListAccount()
Dim olApp As Outlook.Application, olAcc As Outlook.Account, msg As String
    
     On Error Resume Next
     Set olApp = GetObject(, "Outlook.Application")
     If olApp Is Nothing Then Set olApp = CreateObject("Outlook.Application")
     On Error GoTo 0
     If olApp Is Nothing Then Stop
    
     For Each olAcc In olApp.Session.Accounts
         msg = msg & vbNewLine & olAcc.CurrentUser.Address
     Next olAcc
     
     MsgBox "Liste des comtes configurés :" & msg
End Sub

A+
 

ter

XLDnaute Nouveau
Re : Envoyer un mail via Outlook ... à partir d'une boite mail non configurée...

Bonjour mromain,

J'ai essayé ton dernier code, et ai alors compris que mon compte outlook avait été configuré automatiquement et non manuellement... (ce qui fait que j'ai beau envoyer des mails avec mon nom écrit dessus, ça passe par la récupération de mon nom d'utilisateur Word, et non par une véritable adresse mail : monnom@mail.fr).

Je vais essayé de voir du côté de Neolane du coup...

Mais merci encore pour ce fil, qui sera certainement utile à beaucoup, dans la mesure où je n'ai jamais trouvé une seule vraie réponse durant mes longues recherches sur internet (et pourtant un certain nombre de demandeurs).
 

Discussions similaires

Réponses
6
Affichages
269

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG