Avatar billede _on_ Nybegynder
05. maj 2007 - 19:58 Der er 6 kommentarer og
1 løsning

Sende mails vedhjælp af access-basic

På mit arbejde har jeg en access database hvorfra jeg ønsker at kunde sende mails ved tryk på knap. Jeg har eksperimenteret en del med API kaldet MAPISendMail, men jeg kan ikke få det til at virke. Med det samme access udfører denne linje, crasher access simpelthen. Jeg har lavet en testdatabase hvor jeg har tilføjet flg. kode:

I et MainModule har jeg denne kode:

Option Compare Database
Option Explicit

' MAPISendMail flags
Global Const MAPI_LOGON_UI As Long = 1, MAPI_NEW_SESSION As Long = 2, MAPI_DIALOG As Long = 8

Type tpMapiFileDesc
      ulReserved As Long
      flFlags As Long
      nPosition As Long
      lpszPathName As String
      lpszFileName As String
      lpFileType As String
End Type

Type tpMapiMessage
      ulReserved As Long
      lpszSubject As String
      lpszNoteText As String
      lpszMessageType As String
      lpszDateReceived As String
      lpszConversationID As String
      flFlags As Long
      lpOriginator As String          ' Er oprindeligt en pointer til en tpMapiRecipDesc
      nRecipCount As Long
      lpRecips As String              ' Er oprindeligt en pointer til en tpMapiRecipDesc
      nFileCount As Long
      lpFiles As tpMapiFileDesc
End Type

Type tpMapiRecipDesc
      ulReserved As Long
      ulRecipClass As Long
      lpszName As String
      lpszAddress As String
      ulEIDSize As Long
      lpEntryID As String              ' Er oprindeligt en void pointer
End Type

Declare Function MAPISendMail Lib "mapi32" (ByVal LHANDLE As Long, ByVal ulUIParam As Long, lpMessage As tpMapiMessage, _
  ByVal flFlags As Long, ByVal ulReserved As Long) As Long


I en click event har jeg denne kode:
Private Sub btnTest_Click()
      Dim Attach As tpMapiFileDesc
      Dim Note As tpMapiMessage
      Dim err As Long

      Attach.ulReserved = 0
      Attach.flFlags = 0
      Attach.nPosition = -1
      Attach.lpszPathName = "G:\Arbejde\Afvigelsesrapport\Afvigelsesrapport.doc"
      Attach.lpszFileName = "Test.doc"
      Attach.lpFileType = ""

      Note.ulReserved = 0
      Note.lpszSubject = ""
      Note.lpszNoteText = ""
      Note.lpszMessageType = ""
      Note.lpszDateReceived = ""
      Note.lpszConversationID = ""
      Note.flFlags = 0
      Note.lpOriginator = ""
      Note.nRecipCount = 0
      Note.lpRecips = ""
      Note.nFileCount = 1
      Note.lpFiles = Attach

      err = MAPISendMail(0, 0, Note, MAPI_DIALOG, 0)      ' Access crasher her
End Sub

Venlig hilsen
Ole
Avatar billede mugs Novice
05. maj 2007 - 19:59 #1
Har skrevet en artikel om emnet som måske kan hjælpe.
Avatar billede mugs Novice
05. maj 2007 - 20:00 #2
Avatar billede _on_ Nybegynder
05. maj 2007 - 20:20 #3
Din artikel kan ikke bruges. Som du kan se af min kode skal jeg kunne sende et word dokument som en vedhæftet fil, og derfor mener jeg ikke at SendObject kan bruges.
Avatar billede mugs Novice
06. maj 2007 - 21:15 #4
Avatar billede kjulius Novice
07. maj 2007 - 22:50 #5
Jeg ved ikke om det hjælper dig videre, men strengene du opretter skal du bruges af en API, som bruger C strenge. I VB/VBA består en "streng" af en adresse på det sted hvor den egentlige streng ligger + en længdeangivelse (altså hvor lang strengen er). C sproget opererer med en null-termineret streng. Så som mindstemål skal du tilføje en null-karakter for at terminere dine strenge. Altså Streng = Streng & Chr(0)

Jeg har dog mine tvivl om det er nok. Dine type-subfelter skal jo indeholde adresserne på de reelle strenge. Uden at vide det, så tvivler jeg på, at de gør det.

Personligt ville jeg nok tage vejen omkring CDO (Collaboration Data Objects) i stedet. Se evt.
http://www.outlookcode.com/d/cdo.htm
http://support.microsoft.com/kb/171440/
http://msdn2.microsoft.com/en-us/library/ms950372.aspx
http://www.mvps.org/access/modules/mdl0019.htm
http://support.microsoft.com/kb/161833
Avatar billede _on_ Nybegynder
08. maj 2007 - 07:46 #6
Jeg er klar over hvordan C-strenge er opbygget (har programmeret i C i flere år), men jeg regnede med at basic konverterede dem til det rigtige format når der blev erklæret en extern procedure. Det har da også gjort at jeg er gået en lidt anden vej, idet jeg har skrevet en dll-fil i delphi som tilbyder et interface som kun skal have strenge samt en application-handle som parametre. Denne fremgangsmåde "virker næsten" :)
Der sker dog det at når access lukkes, så crasher access :), men jeg kan starte standard mailprogrammet med et vedhæftet word-dokument, så jeg er næsten i mål.

Men tak for indlæget, jeg vil undersøge om det er noget jeg kan bruge. Det skal bruges til en allerede kørende applikation på mit arbejde, så jeg har lidt strenge krav til hvad jeg kan tillade mig at bruge af trejdepart software.
Avatar billede _on_ Nybegynder
20. maj 2007 - 11:47 #7
Ok, løsning fundet, som beskrevet ovenover
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester