account instellen bij verzenden mail vanuit access

Status
Niet open voor verdere reacties.

josenlieke

Gebruiker
Lid geworden
3 apr 2006
Berichten
33
Beste forumleden,

Ik zit al een tijdje te worstelen met een vba code om vanuit access een mail te versturen waarbij ik een account kan opgeven.
In outlook heb ik verschillende accounts aangemaakt. Nu wil ik mail verstruren met een andere account dan de standaard ingestelde account.
Het versturen van mail loopt allemaal goed maar ik moet in outlook nog steeds de account aanpassen.
Ik werk zelf met access 2007 en ben geen ster met programmeren.
Ik heb al dagen op diversen sites en internet een goede code proberen te vinden maar kan er geen vinden die werkt.
Dit is de code die ik achter een knop geplaatst heb.
Kan iemand mijn hiermee helpen??

Private Sub cmdMail_Click()

Dim email As String
Dim ref As String
Dim origin As String
Dim destination As String
Dim notes As String

'**create variables for Outlook
Dim objOutlook As Outlook.Application
Dim objEmail As Outlook.MailItem

'**gathers information from your form. this sets the string variable to your fields
email = Me!Mailadressen
destination = Me!Bouwnummer
notes = Me!Aanhef

'***creates an instance of Outlook
Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

'***creates and sends email
With objEmail
.To = email
.CC = Me!Mailadres_2
.Subject = ref & "" & origin & "Parklaan, bouwnummer " & destination
.Body = notes
.Display

End With

End Sub
Alvast bedankt voor jullie medewerking.
Groeten Jos Hoogervorst
 
Dat is meer een Outlook vraag dan een Access vraag; in Access kun je wel zo een email versturen, en zelfs nog wel het Sent adres instellen, maar accounts veranderen is een heel ander verhaal. Op deze site staat een uitleg met een link naar een bibliotheek die je nodig hebt om het te regelen. Het is een nogal uitgebreid verhaal, bedoeld om in Outlook binnenkomende mails gelijk aan de juiste account te hangen, maar de functie <SetMessageAccount> zou je wel moeten kunnen gebruiken, denk ik.
 
OctaFish,

Bedankt voor je snelle reactie.
Ik heb even naar je link gekeken en het is inderdaad een uitgebreid verhaal, zeker voor iemand die geen verstand heeft van vba.
Als ik een afzender kan opgeven is het wat mijn betreft ook goed genoeg.
Het gaat er om dat de uitgaande mail via een bepaalde (opgegeven) bestaande afzender verstuurd wordt.
Is dat te regelen met een paar regels vba code ergens tussen de eerder aangegeven code.

Alvast bedankt.
Groeten Jos Hoogervorst
 
Ik heb ondertussen ook nog even verder gezocht, en een truc gevonden die bij mij in ieder geval werkt. Het is wel een lap code, maar als het goed is, kun je het vrij makkelijk overnemen, want ik heb de juiste parameters al ingevuld op basis van jou code. Ik heb eerst een keuzelijst op een formulier gemaakt waarmee je een account kunt kiezen. Dat deel zou je kunnen vervangen door een andere oplossing.

Code:
Option Compare Database
Dim OlApp As Outlook.Application
Dim olAccounts As Outlook.Accounts
Dim olAccount As Outlook.Account
Dim olAccountTemp As Outlook.Account
Dim FoundAccount As Boolean
Dim sAccounts As String
Dit deel legt de gebruikte variabelen vast. Die worden meerdere keren gebruikt, dus kun je ze beter één keer definiëren.

Code:
Private Sub Form_Load()

Set OlApp = New Outlook.Application
FoundAccount = False

'loop through and find Outlook account based on from email address
Set olAccounts = OlApp.Application.Session.Accounts
For Each olAccountTemp In olAccounts
    sAccounts = sAccounts & olAccountTemp.DisplayName & ";"
Next
Do While Right(sAccounts, 1) = ";"
    sAccounts = Left(sAccounts, Len(sAccounts) - 1)
Loop
Me.cboEmail.RowSourceType = "Value list"
Me.cboEmail.RowSource = sAccounts

End Sub
De procedure Form_Load() vult de keuzelijst op mijn formuiler met beschikbare accounts.

Code:
Private Sub cmdMail_Click()
Dim Email As String
Dim Ref As String
Dim Origin As String
Dim Destination As String
Dim Notes As String

'**create variables for Outlook
Dim objOutlook As Outlook.Application
Dim objEmail As Outlook.MailItem

'**gathers information from your form. this sets the string variable to your fields
Email = Me!Mailadressen
Destination = Me!Bouwnummer
Notes = Me!Aanhef

'***Call function CreateEmail with parameters
If CreateEmail(Origin, Email, Ref & "" & Origin & "Parklaan, bouwnummer " & Destination, "Text", Notes, , Me!Mailadres_2) = False Then
    MsgBox "Could not find the appropriate Outlook account for email address: " _
        & strFrom & "." & vbOKOnly, "Outlook error retrieving SMTP account"
Else
    MsgBox "Mails have been sent from " & Origin & "."
End If
End Sub
Dit is jouw bijgewerkte knop. De variabelen heb ik hergebruikt; alleen weet ik niet wat <Origin> is; ik vermoed het email adres dat je als afzender(account) wilt gebruiken.
De regel If CreateEmail(Origin, Email, Ref & "" & Origin & "Parklaan, bouwnummer " & Destination, "Text", Notes, , Me!Mailadres_2) = False Then roept de feitenlijke functie aan. Daar zitten verplichte en optionele parameters in. BCC bijvoorbeeld is optioneel.

Code:
Function CreateEmail(strFrom As String, strTo As String, strSubject As String, _
    strTextOrHTML As String, Optional strBodyText As String, Optional strBodyHTML As String, _
    Optional strCC As String, Optional strBCC As String, Optional FileName As String) As Boolean

On Error GoTo Err_CreateEmail
Dim OlApp As Outlook.Application
Dim olAccounts As Outlook.Accounts
Dim olAccount As Outlook.Account
Dim olAccountTemp As Outlook.Account
Dim olMail As MailItem
Dim FoundAccount As Boolean

Set OlApp = New Outlook.Application
FoundAccount = False

'loop through and find Outlook account based on from email address
Set olAccounts = OlApp.Application.Session.Accounts
For Each olAccountTemp In olAccounts
''    If (olAccountTemp.smtpAddress = strFrom) Then
    If olAccountTemp.DisplayName = Me.cboEmail Then
        Set olAccount = olAccountTemp
        FoundAccount = True
        Exit For
    End If
Next

If (FoundAccount) Then
    Set olMail = OlApp.CreateItem(olMailItem)
    With olMail
        .SendUsingAccount = olAccount
        .To = strTo
        If Not strCC & "" = "" Then .CC = strCC
        If Not strBCC & "" = "" Then .BCC = strBCC
        .Subject = strSubject
        If strTextOrHTML = "HTML" Then
            .BodyFormat = olFormatHTML
            .Body = strBodyText
            .HTMLBody = strBodyHTML
        Else
            .BodyFormat = olFormatPlain
            .Body = strBodyText
        End If
        If Not FileName & "" = "" Then .Attachments.Add FileName
        .Display
    End With
    CreateEmail = True
Else
End If

Exit_CreateEmail:
Set olMail = Nothing
Set olAccount = Nothing
Set OlApp = Nothing
Exit Function

Err_CreateEmail:
MsgBox Err.Description
Resume Exit_CreateEmail
End Function
De eigenlijke functie. Deze loopt door de beschikbare accounts heen, en kijkt welke er moet worden gebruikt. De code gebruikt nu de keuzelijst om de account te bepalen, maar je kunt dat ook doen op basis van een afzender email. Dan moet je de regel If (olAccountTemp.smtpAddress = strFrom) Then gebruiken. Die heb ik overigens niet getest, dus geen idee of die werkt.
Kijk maar eens of je er uit komt.
 
OctaFish,

Nogmaals bedankt voor je reactie en de tijd die je er in gestopt hebt.
Ik ga er mee aan de gang, al zal het wel even duren voordat ik dit allemaal op een rijtje heb.

Groeten, Jos Hoogervorst
 
OctaFish,

Ondanks al jou voorbereidende werk kom ik er niet uit.
Zoal ik al eerder gemeld heb ben ik een leek op het gebied van programmeren.
Ik heb er maar even een voorbeeld bestand bijgedaan zodat je kan zien hoe het in elkaar steekt, de gegeven zijn verder fictief.
Onder de knop op het formulier wil ik een mail kunnen verzenden met een ingesteld (account) mailadres.
Het mailadres mag in de code (handmatig) opgenomen worden en hoeft dus niet uit een keuzelijst gehaald te worden.

Bekijk bijlage Mailen.zip

Alvast berdankt voor de moeite.
groeten, Jos Hoogervorst
 
Laatst bewerkt:
Zou iemand bereid willen zijn om aan te geven in welke volgorde ik de formulles onder elkaar moet zetten, zelf kom ik er niet uit.
OctaFish heeft al het nodige voorwerk gedaan en de formulles aangegeven.
In het vorige bericht heb ik een voorbeeld bestand bijgevoegd.
Het mailadres waarmee ik de mail wil versuren hoeft niet uit een een keuzemenu gehaalt te worden.

Alvast bedankt voor jullie medewerking.
Groeten Jos Hoogervorst
 
Laatst bewerkt:
Volgens mij haal je een aantal zaken door elkaar: een email adres is niet hetzelfde als een email account. Een email versturen vanuit een ander email adres is dan ook niet hetzelfde als een email versturen vanuit een ander account, en is ook een heel stuk simpeler. Ik heb mijn code overigens letterlijk in jouw formulier gezet, met een extra keuzelijst erbij, en ik kon gelijk een email versturen met een ander account. Maar zoals gezegd: jouw probleem (een andere afzender gebruiken) is een heel stuk simpeler.

Code:
Private Sub cmdMail_Click()
Dim Email As String, Ref As String, Origin As String, Destination As String, Notes As String
Dim objOutlook As Outlook.Application
Dim objEmail As Outlook.MailItem

    '**gathers information from your form. this sets the string variable to your fields
    Email = Me!Mailadressen
    Destination = Me!Bouwnummer
    Notes = Me!Aanhef
    Origin = "emailadres@live.nl"

    ' Create an Outlook application object
    Set objOutlook = New Outlook.Application
    Set objEmail = objOutlook.CreateItem(olMailItem)
    With objEmail
        .SentOnBehalfOfName = Origin
        .To = Email
        .CC = Me!Mailadres_2
        .Subject = Ref & " Parklaan, bouwnummer " & Destination
        .Body = Notes
        ' Display the item; use .Send to send without display the mail.
        .Display
    End With

End Sub

Het helpt als je de vraag accuraat omschrijft ;)
 
OctoFish,

Bedankt voor je reactie.
Ik ga er mee aan de gang.

groeten, Jos Hoogervorst
 
OktaFish,

Met de door jouw opgegeven code lijkt het allemaal goed te gaan.
Als ik op de kop druk dan wordt outlook geopent met bij de afzender het opgegeven emailadres, in jouw geval "emailadres@live.nl".
Als ik dan in outlook op verzenden druk, dan wordt mail ook inderdaad verstuurd maar dan via de standaard account.
Bij de ontvangende mail zie je dan staan;
van: Jos Hoogervorst [emailadres.standaardaccount@live.nl] namens "emailadres@live.nl"
"Jos Hoogervorst" is bij de standaard account ingesteld bij naam gebruikersgegevens.
"emailadres.standaardaccount@live.nl" is dan het emailadres van mijn standaard ingestelde account.
Is hier een eenvoudige manier voor om bij de ontvanger alleen het emailadres te laten zien waarmee het verstuurd zou moeten worden, in dit geval dus "emailadres@live.nl" of met er dan toch de account worden ingesteld?
De mailadressen staan tussen aanhalingstekens anders wordt het een beetje vreemd aangegeven.

Alvast weer bedankt voor de moeite.
Groeten, Jos Hoogervorst
 
Laatst bewerkt:
Ik zit verder niet zo heel goed in Outlook connecties; die moet ik ook googelen. Dus daar kan ik zo snel geen antwoord op geven; misschien iemand anders? Maar hier en hier kun je misschien wat meer vinden.
 
Is er nog iemand anders die hier een op lissingvoor heeft?

Groeten, Jos Hoogervorst
 
OctaFish,

Ik ben inmiddels weer iets verder gekomen.
Ik heb nu een extra knop (knop 2) op het formulier gemaakt.
Met de formule achter deze knop (van Ron de Bruin) kan ik nu een mail versturen met een ingesteld account.
Het lukt mijn verder niet om bij deze formule ook de velden in outlook te laten invullen van het actieve record.
Is het mogelijk om deze formules samen te smelten zodat de velden ingevuld worden met de juiste gegevens (zoals onder de 1e knop) en dat dan de mail verstuurd word met de juiste account (zoals onder kno 2).

Bekijk bijlage Mailen2.rar

Alvast bedankt voor je reactie.
Groeten Jos Hoogervorst
 
Laatst bewerkt:
Ik ben er eindelijk uit, alles werkt nu naar wens.:D
Zie onderstaande code.

Code:
Private Sub cmdMail_Click()
 
'Is only working in Office 2007-2010
'You must add a reference to the Microsoft Outlook Library
    Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
    Dim strbody As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)

    strbody = Me.Aanhef & vbNewLine & vbNewLine & _
              "Zet hier het bericht"

    On Error Resume Next
    With OutMail
        .To = Me.Mailadressen
        .CC = ""
        .BCC = ""
        .Subject = "Projectnaam, bouwnummer " & Me.Bouwnummer
        .Body = strbody

        'SendUsingAccount is new in Outlook 2007
        'Change Item(1)to another number to use another account
        .SendUsingAccount = OutApp.Session.Accounts.Item(1)

        .Display
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
    
End Sub
OctaFich nog bedankt voor je inzet.

Groeten, Jos Hoogervorst
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan