Me pidieron que dejara renombrado los correos del Outlook (*.msg) que estaban en una carpeta. La idea era poner la fecha de creacion del mail delante del nombre original para poder ordernarlos cronologicamente y por Tema o Subject y asi no perderse navegando buscando que mail fue enviado antes que otro.

Despues de darles unas vueltas al asunto, qqui dejo el codigo que use para solucionar este tema.

Primero que nada, abran un proyecto Windows en Visual Basic. En las referencias, en la eqtiqueta COM busquen y agreguen la del Outlook: Microsoft Outlook 11.0 Object Library.

Tambien usaremos la librerias de IO: Imports System.IO

Agreguen un boton que diga “Renombrar” y al code behind agreguen el siguiente codigo:

‘aqui creo un arreglo con los archivos MSG de la carpeta en cuestion

Dim files_msg() As String = Directory.GetFiles(“C:\temp”, “*.msg”)
Dim nombre As String = “”
Dim fecha_string As String = “”, fecha_mail As Date
Dim sPath As String = “”
Dim pos As Integer
Dim sNuevoNombre As String = “”

For Each fi In files_msg
Dim oApp As New Outlook.Application
Dim mitem As Outlook.MailItem
‘obtengo el objeto MSG para obtener sus propiedades
mitem = oApp.CreateItemFromTemplate(fi)

fecha_mail = mitem.ReceivedTime
‘formaqteo la fecha a partir del año para el orden alfabetico
fecha_string = fecha_mail.ToString(“yyyy-MM-dd HHmmss”)
sPath = fi

‘aqui obtengo el nombre del archivo msg
pos = InStrRev(sPath, “\”)
nombre = sPath.Substring(pos, Len(sPath) – pos)

‘cierro el objeto

oApp.Quit()

sNuevoNombre = fecha_string & ” – “ & nombre

Try
‘ Renombrarlo con la función renameFile
My.Computer.FileSystem.RenameFile(sPath, sNuevoNombre)

Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try

Application.DoEvents()
Next
MsgBox(“
proceso finalizado”)

El codigo completo del formulario seria el sgte:

Imports System.IO

Public Class Form1

Private Sub btnRenombrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRenombrar.Click

‘aqui creo un arreglo con los archivos MSG de la carpeta en cuestion
Dim files_msg() As String = Directory.GetFiles(“C:\temp”, “*.msg”)
Dim nombre As String = “”
Dim fecha_string As String = “”, fecha_mail As Date
Dim sPath As String = “”
Dim pos As Integer
Dim sNuevoNombre As String = “”

For Each fi In files_msg
Dim oApp As New Outlook.Application
Dim mitem As Outlook.MailItem
‘obtengo el objeto MSG para obtener sus propiedades
mitem = oApp.CreateItemFromTemplate(fi)

fecha_mail = mitem.ReceivedTime
‘formaqteo la fecha a partir del año para el orden alfabetico
fecha_string = fecha_mail.ToString(“yyyy-MM-dd HHmmss”)
sPath = fi

‘aqui obtengo el nombre del archivo msg
pos = InStrRev(sPath, “\”)
nombre = sPath.Substring(pos, Len(sPath) – pos)
oApp.Quit()

sNuevoNombre = fecha_string & ” – ” & nombre

Try
‘ Renombrarlo con la función renameFile
My.Computer.FileSystem.RenameFile(sPath, sNuevoNombre)

Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try

Me.TextBox1.Text &= fi & vbNewLine
Me.TextBox1.Refresh()
Application.DoEvents()
Next
MsgBox(“proceso finalizado”)

End Sub

End Class