How to read files of EDB / PST mail copies from PHP / Laravel?

0

I am trying to read from the framework "Laravel 5.5" and / or directly PHP (it would even be worth something that happened to MySQL or a database manager to later deal with it) backups of 1TB in total, distributed in files 100GB, 200GB (size is important) saved in .EDB format (Microsoft Exange) and .PST (Outlook).

The problem comes from not being able to read the files, and the few solutions I found are not viable for these file sizes:

  • Parse everything to CSV and import it to MySQL
  • Restore it to Gmail, then pair it to IMAP and then read it with a PHP library.
  • Activate PHP's EXEC function and try using code in C # / Batch (it does not work for me)

Code .bat

$olApp = New-Object -com Outlook.Application
$namespace = $olApp.GetNamespace("MAPI")
$folder = $namespace.GetDefaultFolder(1)
$folder.Items  | %{ 
    "insert into MyTable (MyCol1, MyCol2, etc) values ($_.Subject, $_.body, etc)"
} | out-file "outfile.sql" -Append

Code C #

// Dumps all email in Outlook to console window.
// Prompts user with warning that an application is attempting to read Outlook data.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookEmail
{
class Program
{
    static void Main(string[] args)
    {
        Outlook.Application app = new Outlook.Application();
        Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
        Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

        foreach (Outlook.MailItem item in emailFolder.Items)
        {
            Console.WriteLine(item.SenderEmailAddress + " " + item.Subject + "\n" + item.Body);
        }
        Console.ReadKey();
    }
}
}

Sources of solutions:

SUMMARY: Any ideas to go offline EDB / PST with files to MySQL?

    
asked by Manuel Robles 26.10.2017 в 13:55
source

1 answer

0

In case anyone is worth it, I created a macro in Vbscript for outlook to solve this.

    Option Explicit

'***********************************************************************
'* Code based on sample code from Martin Green and adapted to my needs
'***********************************************************************

Sub GetAttachments()
On Error Resume Next
'create the folder if it doesnt exists:
    Dim fso, ttxtfile, txtfile, WheretosaveFolder
    Dim objFolders As Object
    Set objFolders = CreateObject("WScript.Shell").SpecialFolders

    ' MySQL Conexion
    Dim cn As Object
    Dim sCon As String
    Dim sSQL As String

    Set cn = CreateObject("ADODB.Connection")
    sCon = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=correos;User=root;Option=3;"
    cn.Open sCon

    'MsgBox objFolders("mydocuments")
    ttxtfile = objFolders("mydocuments")

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txtfile = fso.CreateFolder(ttxtfile & "\Email Attachments")
    ' Changes made by Mrobles ([email protected]) on October 27th 2017
    ' ------------------------------------------------------
    ' Set fso = Nothing
    ' ------------------------------------------------------
     WheretosaveFolder = ttxtfile & "\Email Attachments"


On Error GoTo GetAttachments_err
' Declare variables
    Dim ns As NameSpace
    Dim Inbox As MAPIFolder
    Dim Item As Object
    Dim Atmt As Attachment
    Dim FileName As String
    Dim i As Integer
    Set ns = GetNamespace("MAPI")
    'Set Inbox = ns.GetDefaultFolder(olFolderInbox)
    ' added the option to select whic folder to export
    Set Inbox = ns.PickFolder

    'to handle if the use cancalled folder selection
    If Inbox Is Nothing Then
                MsgBox "You need to select a folder in order to save the attachments", vbCritical, _
               "Export - Not Found"
        Exit Sub
    End If

    ''''


    i = 0
' Check Inbox for messages and exit of none found
    If Inbox.Items.Count = 0 Then
        MsgBox "There are no messages in the selected folder.", vbInformation, _
               "Export - Not Found"
        Exit Sub
    End If
' Check each message for attachments

    cn.BeginTrans

    For Each Item In Inbox.Items

    sSQL = "INSERT INTO emails (" & _
     "ConversationID," & _
     "ConversationIndex," & _
     "SenderEmailAddress," & _
     "SendUsingAccount_SmtpAddress," & _
     "Subject," & _
     "ReceivedTime," & _
     "LastModificationTime," & _
     "EntryID," & _
     "HTMLBody," & _
     "Body" & _
    ") VALUES (" & _
    "'" & Item.ConversationID & "'," & _
    "'" & Item.ConversationIndex & "'," & _
    "'" & Item.SenderEmailAddress & "'," & _
    "'" & Item.SendUsingAccount.SmtpAddress & "'," & _
    "'" & Item.Subject & "'," & _
    "'" & Item.ReceivedTime & "'," & _
    "'" & Item.LastModificationTime & "'," & _
    "'" & Item.EntryID & "'," & _
    "'" & Item.HTMLBody & "'," & _
    "'" & Item.Body & "'" & _
    ")"
    cn.Execute sSQL


    ' End XLS'

' Save any attachments found
        For Each Atmt In Item.Attachments
        ' This path must exist! Change folder name as necessary.

        ' Changes made by Mrobles ([email protected]) on October 27th 2017
        ' ------------------------------------------------------
            FileName = WheretosaveFolder & "\" & Item.ConversationID & "_" & fso.GetBaseName(Atmt.FileName) & i & "." & fso.GetExtensionName(Atmt.FileName)
        ' ------------------------------------------------------
            Atmt.SaveAsFile FileName

            i = i + 1

         Next Atmt
    Next Item

    cn.CommitTrans

' Show summary message
    If i > 0 Then
        MsgBox "There were " & i & " attached files." _
        & vbCrLf & "These have been saved to the Email Attachments folder in My Documents." _
        '& vbCrLf & vbCrLf & "Thank you for using Liron Segev - TheTechieGuy's utility", vbInformation, "Export Complete"'
    Else
        MsgBox "There were no attachments found in any mails.", vbInformation, "Export - Not Found"
    End If
    ' Changes made by Mrobles ([email protected]) on October 27th 2017
    ' ------------------------------------------------------
        Set fso = Nothing
    ' ------------------------------------------------------
' Clear memory
GetAttachments_exit:
    Set Atmt = Nothing
    Set Item = Nothing
    Set ns = Nothing
    Exit Sub
' Handle errors
GetAttachments_err:
    MsgBox "An unexpected error has occurred." _
        & vbCrLf & "Please note and report the following information." _
        & vbCrLf & "Macro Name: GetAttachments" _
        & vbCrLf & "Error Number: " & Err.Number _
        & vbCrLf & "Error Description: " & Err.Description _
        , vbCritical, "Error!"
    Resume GetAttachments_exit
End Sub
    
answered by 30.10.2017 / 13:56
source