IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lotus Notes Discussion :

Export mail en EML


Sujet :

Lotus Notes

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Par défaut Export mail en EML
    Bonjour à tous

    J'ai trouvé sur le NET un super script qui permet d'extraire les mail LOTUS en EML.
    Seulement voila il ne fonctionne pas pour tous, certains me génèrent l'erreur "Masque introuvable : MimeConvert"

    Quelqu'un sait il pourquoi, et ce que je dois faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    %REM
    	Email Export:
    	Use to export Lotus Notes documents as .eml files, for import into other email programs
    
    	Based upon Arthur Turner's article of 05.31.2006:
    	Exporting email from Lotus Notes to .EML messages
    	http://searchdomino.techtarget.com/tip/0,289483,sid4_gci1190110,00.html
    
    	Added error handling, charset support, repair of Lotus Notes generated HTML, and 
    	companion agent to install MimeConvert form without requiring Designer.
    
    	Copyright 2008 Tech[niques] (http://tech.niques.info).  Some rights reserved.
    	This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 Australia License.
    	See http://creativecommons.org/licenses/by-nc-sa/2.5/au/ for more details.
    
    
    	Version 1.0	2008/02/10	Initial release
    
    
    	Agent Properties box
    	====================
    	Name : Archive\(Custom) Email Export
    	Event to trigger agent : Action menu selection
    	Selection Target : All selected documents 
    %END REM
    
    Option Public
    
    Dim CONVERT_DB_SERVER As String
    Dim CONVERT_DB_NAME As String
    Dim CONVERT_FORM As String
    Dim CONVERT_FIELD As String
    Dim CONVERT_TOFIELD As String
    Dim OUTFILENAME As String
    Dim crlf As String
    Dim SaveTempDoc As Integer
    Dim fileNum As Integer
    
    
    Dim doc As NotesDocument
    Dim nstream As NotesStream
    Dim x As String
    Dim count As Integer
    Dim b As String
    
    '** ShellExecute will open a file using the registered file association on the computer.
    '** If it returns a value of greater than 32 then the call was successful; otherwise
    '** it should return one of the error codes below. The parameters are:
    '**hwnd = an active window handle, or 0
    '**operation = "edit", "explore", "find", "open", or "print"
    '**fileName = a file or directory name
    '**parameters = if fileName is an executable file, the command line parameters
    '**to pass when launching the application, or "" if no parameters
    '**are necessary
    '**directory = the default directory to use, or "" if you don't care
    '**displayType = one of the displayType constants listed below
    Declare Function ShellExecute Lib "shell32" Alias "ShellExecuteA" _
     (Byval hwnd As Long, Byval operation As String, Byval fileName As String, _
     Byval parameters As String, Byval directory As String, Byval displayType As Long) As Long
    
    '** FindExecutable will determine the executable file that is set up to open a particular
    '** file based on the file associations on this computer. If it returns a value of greater than
    '** 32 then the call was successful; otherwise it should return one of the error codes 
    '** below. The parameters are:
    '**fileName = the full path to the file you are trying to find the association for
    '**directory = the default directory to use, or "" if you don't care
    '**retAssociation = the associated executable will be returned as this parameter,
    '**with a maximum string length of 255 characters (you will want
    '**to pass a String that's 256 characters long and trim the 
    '**null-terminated result)
    Declare Function FindExecutable Lib "shell32" Alias "FindExecutableA" _ 
     (Byval fileName As String, Byval directory As String, Byval retAssociation As String) As Long
    
    '** constants for the displayType parameter
    Const SW_HIDE = 0
    Const SW_SHOWNORMAL = 1
    Const SW_NORMAL = 1
    Const SW_SHOWMINIMIZED = 2
    Const SW_SHOWMAXIMIZED = 3
    Const SW_MAXIMIZE = 3
    Const SW_SHOWNOACTIVATE = 4
    Const SW_SHOW = 5
    Const SW_MINIMIZE = 6
    Const SW_SHOWMINNOACTIVE = 7
    Const SW_SHOWNA = 8
    Const SW_RESTORE = 9
    Const SW_SHOWDEFAULT = 10
    Const SW_MAX = 10
    
    '** possible errors returned by ShellExecute
    Const ERROR_OUT_OF_MEMORY = 0		'The operating system is out of memory or resources.
    Const ERROR_FILE_NOT_FOUND = 2		'The specified file was not found. 
    Const ERROR_PATH_NOT_FOUND = 3	'The specified path was not found. 
    Const ERROR_BAD_FORMAT = 11			'The .exe file is invalid (non-Microsoft Win32® .exe or error in .exe image). 
    Const SE_ERR_FNF = 2							'The specified file was not found. 
    Const SE_ERR_PNF = 3						'The specified path was not found. 
    Const SE_ERR_ACCESSDENIED = 5		'The operating system denied access to the specified file. 
    Const SE_ERR_OOM = 8						'There was not enough memory to complete the operation. 
    Const SE_ERR_SHARE = 26					'A sharing violation occurred. 
    Const SE_ERR_ASSOCINCOMPLETE = 27	'The file name association is incomplete or invalid. 
    Const SE_ERR_DDETIMEOUT = 28			'The DDE transaction could not be completed because the request timed out. 
    Const SE_ERR_DDEFAIL = 29				'The DDE transaction failed. 
    Const SE_ERR_DDEBUSY = 30				'The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed. 
    Const SE_ERR_NOASSOC = 31				'There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable. 
    Const SE_ERR_DLLNOTFOUND = 32		'The specified dynamic-link library (DLL) was not found. 
    
    Declare Function GetActiveWindow Lib "user32.dll" () As Long 
    
    ' // BrowseInfo stucture
    Type BROWSEINFO
    hwndOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
    End Type
    
    
    ' // BrowseFlags constants
    Const BIF_BROWSEFORCOMPUTER = 1000
    Const BIF_BROWSEFORPRINTER = 2000
    Const BIF_DONTGOBELOWDOMAIN = 2
    Const BIF_RETURNFSANCESTORS = 8
    Const BIF_RETURNONLYFSDIRS = 1
    Const BIF_STATUSTEXT = 4
    
    Const MAX_SIZE = 255
    
    ' // Win32 function to browse for a folder, rather than a file or files
    Declare Function BrowseFolderDlg Lib "shell32.dll" Alias "SHBrowseForFolder" (lpBrowseInfo As BROWSEINFO) As Long
    
    ' // Win32 function that returns the path of the folder selected
    Declare Function GetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDList" (Byval PointerToIDList As Long, Byval pszPath As String) As Long
    
    
    
    Sub Initialize
    	Dim s As New NotesSession
    	Dim db As NotesDatabase
    	Dim dc As NotesDocumentCollection
    	Dim body As NotesItem
    	Dim rtitem As NotesRichTextItem
    	Dim mimebits As Variant
    	Dim n As Integer
    	Dim errorCount As Integer
    	
    	Dim msgid As Variant
    	
    	
    	crlf = Chr(13) & Chr(10)
    	'Dim mime As NotesMIMEEntity, mime2 As NotesMIMEEntity
    	
    	'** this is a form that has a rich text field that is set to store contents
    	'** in MIME format
    	CONVERT_FORM = "MimeConvert"
    	
    	
    	'** this is the field on the form mentioned above that stores rich text
    	'** as MIME
    	CONVERT_TOFIELD="MimeRichTextField"
    	CONVERT_FIELD = "Body"
    	
    	
    	'** do you want to save the temporary doc after you're done with it
    	'** (True) or delete it (False)?
    	SaveTempDoc = False
    	expdir$=BrowseForFolder()
    	If expdir$="" Then
    		Messagebox "You have not selected a directory", MB_OK, "Select output Directory"
    		Exit Sub
    	End If
    	
    	Dim mime As NotesMIMEEntity
    	Dim subj As String
    	Dim form As String
    	Set nstream=s.CreateStream
    	Set db = s.CurrentDatabase
    	s.ConvertMime = False ' Do not convert MIME to rich text|
    	Set dc = db.UnprocessedDocuments
    	Set doc = dc.GetFirstDocument
    	
    	'** Record details when we are unable to process a document
    	Dim errorFileNum As Integer
    	Dim errorFileName As String
    	Dim errorText As String
    	
    	n=0
    	errorCount=0
    	errorFileName=expdir$ & "\error.log"
    	
    	
    	While Not(doc Is Nothing)
    		If doc.subject(0) ="" Then
    			subj="No subject"
    		Else
    			subj=validatefilename(doc.subject(0)) 
    		End If
    		'OUTFILENAME=expdir$ & "\" & subj & " - " & doc.NoteID & ".eml"
    		OUTFILENAME=expdir$ & “\” & Left$(subj,200) & ” – ” & doc.NoteID & “.eml”
    
    		Set body = doc.GetFirstItem("Body")
    		fileNum% = Freefile
    		fileName$ = OUTFILENAME
    		Open filename$  For Output As fileNum%
    		
    		'** If we can't find a body to export, record relevant details so the user knows which 
    		'** document wasn't exported and move on
    		If body Is Nothing Then
    			If doc.form(0) ="" Then
    				form="Unknown Form"
    			Else
    				form=doc.form(0) 
    			End If
    			
    			errorCount=errorCount+1
    			errorFileNum% = Freefile
    			Open errorFileName$  For Append As errorFileNum%
    			errorText = "[" & form & "] """ & subj & """: Unable to export - could not locate document body"			
    			Print #errorFileNum%, errorText
    			Close errorFileNum%
    			
    			'** Clean up the email we didn't actually export
    			Close fileNum%
    			Kill filename$
    		Else
    			n=n+1
    			If body.Type = MIME_PART Then
    				Set mime = body.GetMimeEntity
    				mimebits=getmultipartmime(mime)
    				Print #fileNum%, mimebits
    			Else
    				Call GetRichTextAsHtmlFile(doc, CONVERT_FIELD, OUTFILENAME, True)
    			End If
    			
    			Close fileNum%
    		End If
    		
    		Set doc = dc.GetNextDocument(doc)
    	Wend
    	
    	
    	'** Report status of exporting and errors
    	Msgbox Cstr(n) & " email(s) have been exported to " & expdir$
    	If errorCount > 0 Then
    		Msgbox Cstr(errorCount) & " email(s) count not be exported.  Please check log for details: " & errorFileName$
    	End If
    End Sub 
    
    
    
    Function remsub(substr As String)
    Dim mystr As String
    
    	For a=1 To Len(substr)
    		y=Asc(Mid$(substr,a,1))
    		If Not ( y="13" Or y="10") Then
    			mystr=mystr+Mid$(substr,a,1)
    		End If
    	Next
    	remsub=mystr
    End Function
    Function GetBoundary (header As String) As String
    	'** get the boundary from the initial header of a multi-part MIME string
    	'** normally, the format in Notes is something like:
    	'**    Content-Type: multipart/related; boundary="=_related 0012868C85256E16_="
    Dim boundary As String
    	boundary = Strright(header, "boundary=""")
    
    	'** we want everything from the boundary=" to the closing "
    	If (Instr(boundary, """") > 0) Then
    		boundary = Strleft(boundary, """")
    	End If
    
    	If (Len(boundary) > 0) Then
    		boundary = "--" & boundary
    	End If
    
    	GetBoundary = boundary
    End Function
    Function GetMultipartMime (mime As NotesMIMEEntity) As String
    	'** recursively get all the parts of a multi-part MIME entity
    Dim child As NotesMIMEEntity
    Dim mText As String
    Dim boundary As String
    
    
    	count=count+1
    
    
    	boundary = GetBoundary(mime.Headers)
    
    	'** DANGER -- ContentAsText truncates large MIME bodies in R5!!!
    	'** ND6 seems to be okay...
    	If mime.ContentType<>"text" Then
    		Call mime.encodecontent(1727)
    		mText = mText & mime.Headers & crlf & crlf
    		mText = mText & mime.ContentAsText & crlf
    	Else
    		mText = mText & mime.Headers & crlf & crlf
    		mText = mText & crlf & mime.ContentAsText & crlf
    	End If 
    
    	Set child = mime.GetFirstChildEntity
    	While Not(child Is Nothing)
    		mText = mText & boundary & crlf
    		mText = mText & GetMultipartMime(child)
    		Set child = child.GetNextSibling
    	Wend
    
    	If (Len(boundary) > 0) Then
    		mText = mText & boundary & "--" & crlf & crlf
    	End If
    
    	GetMultipartMime = mText
    End Function
    Function getlist(field As String)
    Dim values As Variant
    Dim out As String
    Dim session As New NotesSession
    Dim nam As NotesName
    	values = doc.GetItemValue( field )
    	Forall v In values
    		c=c+1
    		Set nam=session.CreateName(v)
    		If c>1 Then
    			out = out +"; "+ nam.abbreviated
    		Else
    			out=nam.abbreviated
    		End If
    
    	End Forall
    	getlist=out
    End Function
    Function WriteHtmlStringToFile (htmlBody As String, _
    fileName As String, setFileExtension As Integer, isMultiPart As Integer) As Integer
    	'** send a NotesStream containing HTML to the specified fileName
    	'** (if setFileExtension is True, the fileName will automatically have
    	'** either .htm or .mht appended as the file extension, depending
    	'** on whether isMultiPart is True (.mht) or False (.htm))
    Dim htmlStart As String, htmlEnd As String
    
    
    	'** set our variables, based on isMultiPart and setFileExtension
    	If Not  isMultiPart Then
    '** non-multi-part files need opening and closing HTML
    		htmlStart = "<html><body>"
    		htmlEnd = "</body></html>"
    	End If
    
    	'fileName = fileName & ".eml"
    
    	'** open the file for output
    	'fileNum = Freefile()
    	'Open fileName For Output As fileNum
    	Print #fileNum%,"From: " & getlist("From")
    	Print #fileNum%,"To: " & getlist("SendTo")
    	Print #fileNum%,"Cc: " & getlist("CopyTo")
    	Print #fileNum%, "Bcc: " & getlist("BlindCopyTo")
    	Print #fileNum%,"Subject: " & doc.subject(0)
    	Print #fileNum%, "Date: " & Format(doc.posteddate(0), "dd mmm yyyy  hh:mm:ss") 
    	msgid=doc.GetItemValue("$MessageID")
    	Print #fileNum, "Message-ID: " & msgid(0)
    	If Not  ismultipart Then Print  #fileNum%, "MIME-Version: 1.0"
    	If Not  ismultipart Then Print #fileNum%,"Content-Type: multipart/alternative;" 
    	If Not  ismultipart Then Print #fileNum%, Chr(09) & |boundary="| & Cstr(doc.NoteID) & |"| 
    	Print #1, "X-Priority: " & doc.importance(0) 
    	Forall i In doc.Items
    		If i.text<>"" Then
    			If i.name<>"Body" Then
    				Print #1, "X-Notes-Item: " & i.text & "; name=" & i.name
    			End If
    		End If
    	End Forall	
    	If Not  ismultipart Then Print #fileNum%, crlf & "--" & Cstr(doc.NoteID) 
    	If Not  ismultipart Then Print #fileNum%,"Content-Type: text/html;"
    	If Not  ismultipart Then Print #fileNum%, Chr(09) & |charset="iso-8859-1"|
    	If Not  ismultipart Then Print #fileNum%, "Content-Transfer-Encoding:  quoted-printable" & crlf
    	If Not ismultipart Then Print #fileNum%, htmlStart
    	Print #fileNum%, RepairHtmlString(htmlBody)
    	If Not  ismultipart Then Print #fileNum%, htmlEnd & crlf
    	If Not ismultpart Then Print #fileNum%, crlf & "--" & Cstr(doc.NoteID) & "--"
    
    	'Close #fileNum
    	WriteHtmlStringToFile = True
    	Exit Function
    
    processError:
    	Print "Error " & Err & ": " & Error$
    	Reset
    	WriteHtmlStringToFile = False
    	Exit Function
    
    End Function
    Function RefreshDocFields (doc As NotesDocument) As String
    	'** Refresh the fields on a document, and return the NoteID of
    	'** the refreshed doc (I don't think this would cause the NoteID
    	'** to change, but just in case)
    	On Error Resume Next
    
    	'** before we save the uidoc, disable any MIME conversion warnings
    	'** by setting the MIMEConvertWarning parameter in Notes.ini to 1
    Dim session As New NotesSession
    Dim oldWarningVal As String
    	oldWarningVal = session.GetEnvironmentString("MIMEConvertWarning", True)
    	Call session.SetEnvironmentVar("MIMEConvertWarning", "1", True)
    
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    	Set uidoc = workspace.EditDocument(True, doc)
    	Call uidoc.Save
    	RefreshDocFields = uidoc.Document.NoteID
    	Call uidoc.Close(True)
    
    %REM
    	'** if you're not running this on a Notes client, you could
    	'** try to run this in the background by doing everything 
    	'** using the Notes COM objects, although this is totally
    	'** unsupported and probably riddled with memory leaks
    	'** if you could actually get it working (plus, it would only
    	'** work on a Windows server...)
    	Dim oleSession As Variant
    	Dim oleDb As Variant
    	Dim oleDoc As Variant
    	Dim oleWorkspace As Variant
    	Dim oleUidoc As Variant
    	
    	'** first we have to get a handle to the doc as an OLE object
    	Set oleSession = CreateObject("Notes.NotesSession")
    	Call oleSession.Initialize
    	Set oleDb = oleSession.GetDatabase("", doc.ParentDatabase.FilePath)
    	Set oleDoc = oleDb.GetDocumentByID(doc.NoteID)
    	
    	'** if we were able to do that, we can open and save it as a UIDoc
    	'** using COM
    	If Not (oleDoc Is Nothing) Then
    		Set oleWorkspace = CreateObject("Notes.NotesUIWorkspace")
    		Set oleUidoc = oleWorkspace.EditDocument(True, oleDoc)
    		Call oleUidoc.Save
    		RefreshDocFields = oleUidoc.Document.NoteID
    		Call oleUidoc.Close(True)
    	End If
    %END REM
    
    	'** reset the MIMEConvertWarning Notes.ini variable and return
    	Call session.SetEnvironmentVar("MIMEConvertWarning", oldWarningVal, True)
    
    End Function
    Function GetRichTextAsHtmlFile (doc As NotesDocument, _
    fieldName As String, fileName As String, setFileExtension As Integer) As Integer
    	'** convert a rich text field to HTML, and send it to the specified file
    	'** (if setFileExtension is True, the fileName will automatically have
    	'** either .htm or .mht appended as the file extension, depending
    	'** on whether the HTML representation is multi-part or not)
    Dim isMultiPart As Integer
    Dim htmlBody As String
    
    	htmlBody = GetRichTextAsHtmlString(doc, fieldName, isMultiPart)
    	GetRichTextAsHtmlFile = WriteHtmlStringToFile(htmlBody, fileName, True, isMultiPart)
    
    End Function
    
    
    Function GetRichTextAsHtmlString (doc As NotesDocument, _
    fieldName As String, isMultiPart As Integer) As String
    	'** get the contents of the given field as HTML by copying them
    	'** to a MIME rich text field and reading the MIME field
    	Dim session As New NotesSession
    	Dim mText As String
    	Dim db As NotesDatabase
    	Dim newDoc As NotesDocument
    	Dim noteID As String
    	Dim currentSessionMimeSetting As Integer
    	
    	Dim rtitem As NotesRichTextItem
    	Dim rtitem2 As NotesRichTextItem
    	Dim mimeItem As NotesItem
    	Dim mime As NotesMIMEEntity
    	Dim MimeFieldName As String
    	
    	Dim mimestream As NotesStream
    	
    	
    	'** make sure we can actually get the rich text field we want to
    	'** copy, and make sure it's really rich text (error 13 if it's not)
    	On Error 13 Resume Next
    	Set rtitem = doc.GetFirstItem(fieldName)
    	If (rtitem Is Nothing) Then
    		Exit Function
    	End If
    	
    	'** save the current ConvertMime setting, because we'll change it
    	'** a couple of times
    	currentSessionMimeSetting = session.ConvertMime
    	
    	'** initially set the ConvertMime property to True and create a
    	'** temporary document, which allows us to treat the MIME field
    	'** as rich text so we can append some real rich text to it
    	session.ConvertMime = True
    	
    	'** create a new document to manipulate the MIME entry with.
    	Set db =session.CurrentDatabase
    	'Set db = session.GetDatabase(CONVERT_DB_SERVER, CONVERT_DB_NAME)
    	Set newDoc = New NotesDocument(db)
    	
    	
    	'** this document must use a form that already exists in this
    	'** database, and the MIME field that we create must be the
    	'** same name as a field that's already on the form as a rich text
    	'** field that stores its data in MIME format
    	newDoc.Form = CONVERT_FORM
    	MimeFieldName = CONVERT_TOFIELD
    	
    	Set rtitem2 = New NotesRichTextItem(newDoc, MimeFieldName)
    	Call rtitem2.AppendRTItem(rtitem)
    	Call newDoc.Save(True, True)
    	
    	'** HERE'S THE TRICK: you have to open the temporary doc
    	'** as a uidoc, and then save and close it.
    	'** This will convert all the rich text in our MIME field back to
    	'** MIME format (which is why the field had to exist as a valid
    	'** MIME field on a valid form in the first place, so Notes will 
    	'** know to convert it back)
    	noteID = RefreshDocFields(newDoc)
    	
    	'** after you've done this, you need to reset the reference for
    	'** the newDoc variable, so none of the in-memory information
    	'** about the document will remain
    	Set newDoc = Nothing
    	
    	'** set ConvertMime to False, reopen the temporary doc,
    	'** and now we can get the rich text contents as HTML
    	session.ConvertMime = False
    	Set newDoc = db.GetDocumentByID(noteID)
    	Set mimeItem = newDoc.GetFirstItem(MimeFieldName)
    	If Not (mimeItem Is Nothing) Then
    		If (mimeItem.Type = MIME_PART) Then
    			Set mime = mimeItem.GetMimeEntity
    			If Not (mime Is Nothing) Then
    				If (mime.ContentType = "multipart") Then
    					'** for multi-part MIME, which is anything with graphics,
    					'** you need to get the various parts one at a time.
    					'** If you write this to a file, it should be a .mht file so the
    					'** the browser knows what to do with it.
    					'** NOTE: there is a bug in R5 where you can't always
    					'** get the full contents of large sections of multi-part
    					'** MIME -- if you're dealing with large images, they will
    					'** often get cropped off at the bottom
    					isMultipart = True
    					mText = GetMultipartMime(mime)
    				Else
    					'** if we're not dealing with multi-part (thank goodness)
    					'** we can just grab the HTML contents and go
    					Set mimestream=session.CreateStream() 
    					isMultipart = False
    
    					'** Retrieve the text contents of the MIME entity, ensuring
    					'** the charset is converted (if required)
    					'** For R5 may need to replace the following 4 lines with:
    					'** mText = mText & mime.ContentAsText
    					Call mime.GetContentAstext(mimestream,True)
    					mimestream.Position=0
    					mText = mText & mimestream.ReadText()
    					mimestream.Close 
    				End If
    			End If
    		End If
    	End If
    	
    	'** delete or save the temporary doc when we're done (depending on
    	'** the SaveTempDoc setting)
    	If SaveTempDoc Then
    		Set rtitem2 = New NotesRichTextItem(newDoc, "HTMLText")
    		Call rtitem2.AppendText(mText)
    		Call newDoc.Save(True, True)
    	Else
    		Call newDoc.Remove(True)
    	End If
    	
    	'** set the ConvertMIME setting back to whatever it was
    	'** before we started all this, and exit out
    	session.ConvertMIME = currentSessionMimeSetting
    	GetRichTextAsHtmlString = mText
    End Function
    
    
    Function validatefilename(filename As String)
    Dim l As Integer
    Dim x As Integer
    Dim newname As String
    	l=Len(filename)
    	For x = 1 To l
    		If Mid$(filename,x,1) Like "[-@()~^$#[{}=A-Za-z0-9]" Then
    			newname=newname+Mid$(filename,x,1)
    		Else
    			If Mid$(filename,x,1)=" " Or Mid$(filename,x,1)="]" Or Mid$(filename,x,1)=","  Or Mid$(filename,x,1)="'"  Or Mid$(filename,x,1)="!" Then
    				newname=newname+Mid$(filename,x,1)
    			Else
    				Print Mid$(filename,x,1) " is not valid"
    			End If
    
    		End If
    	Next x
    	validatefilename=newname
    End Function
    Function isFolder(Byval sFolderPath As String) As Integer
    Const ATTR_DIRECTORY = 16
    	isFolder = False
    	If Dir$(sFolderPath, ATTR_DIRECTORY) <> "" Then isFolder = True
    End Function 
    Function isFile(Byval sFileName As String) As Integer
    	On Error Resume Next
    Dim lFileLength As Long
    Const ATTR_NORMAL = 0
    
    	isFile = False
    	If Dir$(sFileName, ATTR_NORMAL) <> "" Then
    		lFileLength = Filelen(sFileName)
    		If (lFileLength > 0) Then isFile = True
    	End If
    End Function 
    Function BrowseForFolder() As String
    Dim mBrowseInfo As BROWSEINFO
    Dim lngPointerToIDList As Long
    Dim lngResult As Long
    Dim strPathBuffer As String
    Dim strReturnPath As String
    Dim vbNullChar As String
    
    	vbNullChar = Chr(0)
    
    	On Error Goto lblErrs
    
    	mBrowseInfo.hwndOwner = GetActiveWindow()
    
    ' // Set the default folder for the dialog box (0 = My Computer,
    ' // 5 = My Documents)
    	mBrowseInfo.pidlRoot = 0
    
    	mBrowseInfo.lpszTitle = "Select the folder you wish to use:"
    ' // Pointer to a buffer that receives the display name 
    ' // of the folder selected by the user
    	mBrowseInfo.pszDisplayName = String(MAX_SIZE, Chr(0))
    ' // Value specifying the types of folders to be listed
    ' // in the dialog box as well as other options
    	mBrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS
    
    ' // Returns a pointer to an item identifier list that
    ' // specifies the location of the selected folder relative
    ' // to the root of the name space
    	lngPointerToIDList = BrowseFolderDlg(mBrowseInfo)
    
    	If lngPointerToIDList <> 0& Then
    ' // Create a buffer
    		strPathBuffer = String(MAX_SIZE, Chr(0))
    
    ' // Now get the selected path
    		lngResult = GetPathFromIDList(Byval lngPointerToIDList, Byval strPathBuffer)
    ' // And return just that
    		strReturnPath = Left$(strPathBuffer, Instr(strPathBuffer, vbNullChar) - 1)
    	End If
    
    	BrowseForFolder = strReturnPath
    
    lblEnd:
    	Exit Function
    
    lblErrs:
    	Messagebox "Unexpected error: " & Error$ & " (" & Cstr(Err) & ").", 0, "Error"
    	Resume lblEnd
    End Function
    
    Function RepairHtmlString (fieldName As String) As String
    	'** Repairs HTML string so will display when .eml is imported into Outlook
    	'** or Outlook Express.  Adds the missing face attribute on font tags.
    Dim mText1 As String
    Dim mText2 As String
    
    	On Error 13 Resume Next
    
    	'** There is probably a more elegant way to search and replace font tags
    	'** but this works
    	mText1 = Replace(fieldName,"<font size=1>","<font size=1 face=""sans-serif"">")
    	mText2 = Replace(mText1,"<font size=2>","<font size=2 face=""sans-serif"">")
    	mText1 = Replace(mText2,"<font size=3>","<font size=3 face=""sans-serif"">")
    	mText2 = Replace(mText1,"<font size=4>","<font size=4 face=""sans-serif"">")
    	mText1 = Replace(mText2,"<font size=5>","<font size=5 face=""sans-serif"">")
    	mText2 = Replace(mText1,"<font size=6>","<font size=6 face=""sans-serif"">")
    	mText1 = Replace(mText2,"<font size=7>","<font size=7 face=""sans-serif"">")
    
    	RepairHtmlString = mText1
    End Function
    Merci et bonne soirée

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    J'ai copie le source dans un agent que l'on execute depuis le menu Actions.
    Lorsque je veux sauvegarder la ligne suivante provoque une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OUTFILENAME=expdir$ & “\” & Left$(subj,200) & ” – ” & doc.NoteID & “.eml”
    "Initialize: 63: Unexpected: -; Expected : End-of-statement; Operator"

    comment puis je corriger ?

    version de lotus 8.5.3

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/03/2015, 17h02
  2. [V8] Exporter mails en .eml
    Par Jerkiou dans le forum Odoo (ex-OpenERP)
    Réponses: 0
    Dernier message: 22/01/2015, 12h52
  3. Export mails avec pièce jointe vers BDD
    Par yoyo33fc dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 26/06/2014, 15h08
  4. Importer/Exporter mails Outlook
    Par PMPMPM dans le forum Outlook
    Réponses: 0
    Dernier message: 04/02/2012, 12h53
  5. [Mail] Générer un fichier mail .eml
    Par OjBarbare dans le forum Langage
    Réponses: 3
    Dernier message: 12/05/2006, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo