Toon posts:

[VB6] rapport versturen via mail

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Op dit moment ben ik bezig met het maken van een Ordervolgsysteem in VB6 met een acces database. Het afdrukken van een order dmv een datareport is geen probleem. Echter wil ik deze order ook graag via email willen versturen.

Het is dus de bedoeling om de standaard(outlook) mail applicatie te openen waar dan het e-mail adres, subject en de order in de body van de mail al zijn ingevuld. In Google heb ik gevonden dat je met de Microsoft MAPI controls 6.0 een soort eigen mail programma kan maken om je mail in VB te versturen. Maar ik wil het via het standaard mail programma (Outlook) versturen.

Ook heb ik zitten denken om het rapport te exporteren naar een html pagina en dan op een één of andere manier deze te e-mailen. In die html pagina kan je dat een redirect zetten met het mailto element. Hiermee kan ik het aan aders en het subject vullen. Maar niet de body met meerdere orderregels.

Kortom, het mooiste zou zijn dat na een klik op een knop er een mail wordt genereert die er het zelfde uitziet als een datareport. Waar dus meerdere OrderRegels in staan die op dat moment uit de database worden gehaald. Net als bij het datareport.

Verwijderd

Waarom wil je het via een standaard mail programma als het direct via vb6 kan? :bonk:

Verwijderd

Topicstarter
De opdrachtgever wil zijn mail kunnen teruglezen via outlook. En volgens mij is het qua opmaak in vb6 beperkt.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je kunt toch gewoon de Outlook Library gebruiken om mails te versturen? Je kunt dan de body helemaal samenstellen zoals je het hebben wilt, bijvoorbeeld als HTML. Eerst exporteren en dan versturen lijkt me in ieder geval overkill.
Als je een mail op die manier verstuurt, dan komt ie gewoon in de sent-mail folder te staan van Outlook en kan je baas dus de mail nalezen als hij dat wil.

Een beetje research met google (keywords: outlook visual basic send mail):
http://msdn.microsoft.com.../dnvbpj01/html/gs0103.asp

[ Voor 18% gewijzigd door bigbeng op 19-05-2005 17:18 ]


Verwijderd

Topicstarter
Na wat zoekwerk op internet heb ik een simpele code gevonden die op de achtergrond Outlook opent en de mail verstuurt.
Visual Basic .NET:
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
Private Sub ccbVersuren_Click()

On Error GoTo ErrorHandler

    Dim objOutlook As Object
    Dim objOutlookMsg As Object
    
    If ctxAan.Text = "" Then
        Call pgDisplayFoutieveInvoer("Aan niet ingevuld")
        ctxAan.SetFocus
        Exit Sub
    End If
    
    If ctxOnderwerp.Text = "" Then
        Call pgDisplayFoutieveInvoer("Onderwerp niet ingevuld")
        ctxOnderwerp.SetFocus
        Exit Sub
    End If
    
    Set objOutlook = CreateObject("Outlook.Application")
    Set objOutlookMsg = objOutlook.CreateItem 

    With objOutlookMsg
        .To = ctxAan.Text
        .Cc = ctxCC.Text
        .Subject = ctxOnderwerp.Text
        .Body = ctxBody.Text
        .Send
    End With
    
    Set objOutlookMsg = Nothing
    Set objOutlook = Nothing

Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 287
        Call pgDisplayError(Err.Number, "Geen toegang tot Outlook. Verzend nogmaals en klik in het dialoog scherm op ja.")
    Case Else
        Call pgDisplayError(Err.Number)
    End Select

End Sub
Als het Form word aangeroepen genereer ik in een string (vlcBody) de mail. Doormiddel van een loop zet ik alle orderregels in die string. Deze wordt later in een tekstbox (ctxBody) gezet en aan de gebruiker getoond. Zo kan de gebruiker nog enkele aanpassingen aan de mail doen.

Code die mail genereert:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Do Until vliTeller = cdaOrder.Recordset.RecordCount
    vliTeller = vliTeller + 1
    
    vlcBody = vlcBody + cdaOrder.Recordset!Leverancier_Artikel_ID & "          "
    vlcBody = vlcBody + cdaOrder.Recordset!ArtikelOmschrinving & "          "
    vlcBody = vlcBody + cdaOrder.Recordset!Leverancier_Kleur_ID & "          "
    vlcBody = vlcBody + cdaOrder.Recordset!KleurOmschrijving & "          "
    vlcBody = vlcBody + CStr(cdaOrder.Recordset!Aantal) & cdaOrder.Recordset!EenheidSymbool
    vlcBody = vlcBody + vbNewLine
    
    cdaOrder.Recordset.MoveNext
Loop
Nu is er alleen het probleem dat je op deze manier weinig controle hebt over de lay-out van de mail. De ruimte tussen de velden vul ik nu op met staties waarvoor je normaal tabs zou gebruiken. Alleen heb ik geen idee hoe je tabs moet mee sturen. Mooier zou misschien zijn dat je een HTML mail zou kunnen generen en met tabellen zou kunnen werken. Maar ook hier heb ik geen idee hoe ik dat zou moeten uitvoeren.

code:
1
2
3
4
5
 Artikel ID          Artikel          Kleur ID          Kleur          Aantal
========================================================
40          Stofje          566          Geel          5M
4040          Stof          45          Rood          4M
40          Stofje          534          Groen          4M

Dus mijn vragen. Is deze methode goed of kleven er grote nadelen aan en hoe kan ik mijn mail een betere lay-out geven?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Stomme vraag:
Waarom Outlook gebruiken als er zoveel mail componenten zijn? Als Outlook op de achtergrond wordt gestart vind ik dat nogal overkill. Kijk eens naar Dundas bijvoorbeeld. Daarmee kun je makkelijk (HTML)Email versturen. Mochten ze de "verzonden" mail ergens willen bewaren dan stuur je gewoon een
(B)CC...

Verder kun je het uitlijnen simpel doen door een PadRight(str, len) te schrijven die een string aanvult met len spaties:
Visual Basic 6:
1
2
3
Private Function PadRight(strIn as string, lLen as long) as String
    PadRight = Left(strIn & Space(lLen),lLen)
End Function

Ik zou geen tabs gebruiken als je "klare ASCII" stuurt. En als je HTML wil gaan sturen zou ik het in een Table gooien.

Wat nadelen van Outlook gebruiken als "mailer":
• Je dient een MAPI profile te hebben (en dat wil je niet op servers bijvoorbeeld)
• Outlook dient geïnstalleerd te zijn op het station waar je je app op draait (= licentiekosten)
• Behoorlijk "bulky" om een simpel mailtje te versturen
• ...need I go on? >:)

Verder zou ik in mijn error handler niet alleen de error code (err.number) maar ook omschrijving laten zien (dat is een stuk makkelijker debuggen): err.description
En probeer, waar mogelijk, het gebruik van Exit... te voorkomen.

[ Voor 38% gewijzigd door RobIII op 23-05-2005 15:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Cyzor
  • Registratie: Augustus 2002
  • Laatst online: 06-05 14:55
Ik programmeer mee aan deze applicatie en kan me bijna in al je punten vinden maar.

De applicatie gaat alleen locaal draaien met de database op een netwerk schijf.
Outlook 2003 is op alle pc binnen dat bedrijf geïnstalleerd.
De mail komt op deze manier netjes in de verzonden items van Outlook

De description haal ik in sub die mijn error melding laat zien uit het error nummer op deze manier: Error(vplErrNumber)

De methode die je geeft voor het uitlijnen ga ik zo meteen proberen, bedankt voor je reactie.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

I.p.v. objOutlookMsg.Body kan je ook objOutlookMsg.HTMLBody gebruiken.... raad eens hoe je dan je opmaak kan doen ;)

Overigens staan alle properties van deze classes prima bij elkaar verzameld in de MSDN ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1