M365 Outlookmail verzenden vanuit Access

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Hoi,

Wij gebruiken een Access database om mails te versturen.
Op zich werkt de database correct.

In het formulier kan je aanvinken of je een 'Display' of 'onmiddellijk wil verzenden'.
Als je Display aanklikt kom je in de code
Code:
.Display
De mail wordt geopend. Je kan alles nog eens nakijken en op de knop 'Verzenden' klikken en de mail wordt verstuurd.
Als je 'onmiddellijk wil verzenden' aanklikt kom in je in de code
Code:
.Send
Het probleem nu is dat je een security warning krijgt en je op de knop 'Toestaan' moet klikken.
Als je op 'Toestaan' klikt wordt de mail verzonden. Op zich geen probleem.
Maar wij willen nu 100 tot 500 mails versturen in batch. En om dan telkens op 'Toestaan' te klikken is niet echt productief.

Op internet al gezocht naar een oplossing maar nog niet echt gevonden.
Blijkbaar kan je met Sendkeys werken maar lukt niet.
Iemand had geschreven dat je de
Code:
.Send
moet vervangen door
Code:
.Display
en de 'Sendkey'
Code:
.SendKeys "%s", True
moet gebruiken.
Maar de mail wordt niet verzonden. De mail wordt geopend en blijft geopend.
Dit is de code
Code:
.Display
                               .SendKeys "%s", True
De mail wordt niet verzonden.

Want is de oplossing om de Outlook security te omzeilen zodat je niet telkens op 'Toestaan' moet klikken.

Alvast bedankt.
 
Laatst bewerkt:
Vroeger (duurt best lang, want het is er nog steeds) had je voor oudere Outlookversies het programma ClickYes, dat dit probleem prima afving. Je kunt kijken of het nog steeds werkt. Er zit ook een VBA routine bij; wellicht dat je het proces daarmee nog wat kan verbeteren.

Een alternatief is om via een Outlook procedure te versturen. Die is wat ingewikkelder.
 
De bescherming is er om SPAM mailing te verhinderen. Er zijn wel heel wat mailing programma's op het internet beschikbaar die je toelaten commerciele mailings te sturen.
 
Maar het kan gewoon in Acces met VBA, waarom zou je mensen geld uit de zak willen kloppen? De bescherming is hier echt niet nodig.
 
Kan iemand mij op weg wijzen ivm de Outlook procedure ?
Een website, een eerste aanzet, ....

Alvast bedankt.
 
Op internet gezocht, wat aanpassingen gedaan en code werkt.
Het enige probleem dat ik nu heb is dat de 'vreemde' tekens in de tekst niet worden weergegeven zoals é, è, à, ç ed
Hier wordt de ? weergegeven.

Dan gezocht en blijkbaar kan je karakterset aanpassen maar krijg het niet in orde.
Wat doe ik fout ?

ps : Omwille van privacy het e-mailadres en wachtwoord vervangen door xxxxx

Code:
Option Compare Database

Private Sub Knop0_Click()
    Dim objMessage, objConfig, fields
    Dim AddAttachment
    Dim sFile As String
    sFile = "c:\out.txt"
    Set objMessage = New CDO.Message
    Set objConfig = New CDO.Configuration
    Set fields = objConfig.fields
    With fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx@xxx.xxx"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxx"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Update
    End With
    Set objMessage.Configuration = objConfig
    
    With objMessage
        
        .Subject = " é à ç è Onderwerp"
        .From = "xxxx@xxx.xxx"
        .To = "xxxxx"
        .HTMLBody = "é ç à è Body Message"
        .HTMLBody = AlterCharset(.HTMLBody, "windows-1252", "windows-1252")
        'Add the attachment
        .AddAttachment "c:\out.txt"
    End With
    objMessage.Send
End Sub

'Const adTypeBinary = 1
'Const adTypeText = 2

' accept a string and convert it to Bytes array in the selected Charset
Function StringToBytes(Str, Charset)
  'Dim Stream: Set Stream = Server.CreateObject("ADODB.Stream")
  Dim Stream As New ADODB.Stream
  Stream.Type = adTypeText
  Stream.Charset = Charset
  Stream.Open
  Stream.WriteText Str
  Stream.Flush
  Stream.Position = 0
  ' rewind stream and read Bytes
  Stream.Type = adTypeBinary
  StringToBytes = Stream.Read
  Stream.Close
  Set Stream = Nothing
End Function

' accept Bytes array and convert it to a string using the selected charset
Function BytesToString(Bytes, Charset)
  'Dim Stream: Set Stream = Server.CreateObject("ADODB.Stream")
  Dim Stream As New ADODB.Stream
  Stream.Charset = Charset
  Stream.Type = adTypeBinary
  Stream.Open
  Stream.Write Bytes
  Stream.Flush
  Stream.Position = 0
  ' rewind stream and read text
  Stream.Type = adTypeText
  BytesToString = Stream.ReadText
  Stream.Close
  Set Stream = Nothing
End Function

' This will alter charset of a string from 1-byte charset(as windows-1252)
' to another 1-byte charset(as windows-1251)
Function AlterCharset(Str, FromCharset, ToCharset)
  Dim Bytes
  Bytes = StringToBytes(Str, FromCharset)
  AlterCharset = BytesToString(Bytes, ToCharset)
End Function
 
Laatst bewerkt:
Als er een andere manier is dan liever die optie.
Want nu moet je het wachtwoord invullen in de code.
En dat doe ik eerlijk gezegd liever niet.
 
Overigens is deze regel
Code:
.[COLOR=#333333]HTMLBody = AlterCharset(.HTMLBody, "windows-1252", "windows-1252")[/COLOR]

een beetje onzinnig, omdat je een karakterset vervangt door dezelfde karakterset. Niet echt nuttig…
 
Probleem toch niet opgelost.
De tekst staat in HTML. Als wij op de 'oude' manier versturen en telkens op 'Toestaan' klikken (Outlook security) dan is de tekst goed.
De vreemde tekens worden herkend. De HTML is goed.
Wanneer wij nu versturen via CDO worden de vreemde tekens niet herkend.
Op welke manier kan ik dit probleem oplossen ?
 
Dit is een deel van de instructie.
Kan hier vb de charset ingevuld worden :
Code:
.HTMLBody = "<BODY> <font face='Arial' size='3'>"
 
Iets gevonden maar helpt niet :
Code:
.TextBodyPart.Charset = "utf-8"
De vreemde tekens é à worden niet weergegeven maar een ?
 
Oplossing gevonden :
Deze code achter (volgende regels) van .HTMLBody invullen

Code:
 .BodyPart.Charset = "utf-8"
 .HTMLBodyPart.Charset = "utf-8"
 
Je hele probleem is op te lossen door Outlook te gebruiken op de juiste manier. Morgen is hopelijk mijn computer weer in orde, en kan ik je de benodigde code wel geven. (Is ook je nieuwe vraag opgelost…) Maar je mag van mij natuurlijk best zelf naar een andere oplossing blijven zoeken :).
 
Wij willen natuurlijk Outlook ook op de juiste manier gebruiken. Maar soms een 'alternatieve' oplossing om toch verder te kunnen werken.
Dus de deskundige oplossing is meer dan welkom.
Wij kijken er naar uit :)
 
Mijn pc moet nog een maand op zijn voeding wachten; blijkbaar tóch niet meer leverbaar. Onbegrijpelijk dat een simpele PSU nergens meer in voorraad is :(. Maar goed, ik kan er dus voorlopig niet meer bij.
 
Geen probleem dat het wat langer duurt.
Na maand is ook nog goed hoor.
Hopelijk komt alles terug in orde met uw computer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan