Trabajando con Propiedades MAPI

Configurando y Accediendo a Propiedades MAPI de Outlook

Aspose.Email para Java proporciona la MapiProperty clase que representa una propiedad MAPI:

  • Nombre: el nombre de la propiedad.
  • Etiqueta: la etiqueta de la propiedad.
  • Datos: los datos de la propiedad.

Este tema también discute cómo configurar y acceder a las propiedades MAPI de un archivo de Mensaje de Outlook (MSG) utilizando Aspose.Email para Java. Además, se ha proporcionado un código de ejemplo sobre cómo eliminar propiedades de MSG y Adjuntos.

Leer Propiedades

Para leer los datos de las propiedades MAPI de un archivo MSG:

  1. Crear una instancia de la MapiMessage clase para cargar un archivo MSG usando el Load() método estático.
  2. Establecer una referencia al MapiMessage objeto getProperties() método para obtener la MapiPropertyCollection.
  3. Obtener el MapiProperty objeto de la MapiPropertyCollection por las MapiPropertyTag claves.
  4. Obtener los datos de la propiedad utilizando un método adecuado getXXX() .
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
//Instantiate an MSG file to load an MSG file from disk
MapiMessage outlookMessageFile = MapiMessage.fromFile(dataDir + "messageMapi.msg");
//Get the MapiProperties collection
MapiPropertyCollection coll = outlookMessageFile.getProperties();
//Access the MapiPropertyTag.PR_SUBJECT property
MapiProperty prop = (MapiProperty) coll.get_Item((Object) MapiPropertyTag.PR_SUBJECT);
//If the MapiProperty is not found, check the MapiProperty.PR_SUBJECT_W
//which is a unicode peer of MapiPropertyTag.PR_SUBJECT
if (prop == null) {
prop = (MapiProperty) coll.get_Item(MapiPropertyTag.PR_SUBJECT_W);
}
//If it cannot be found
if (prop == null) {
System.out.println("Mapi property could not be found.");
} else {
//Get the property data as string
String strSubject = prop.getString();
System.out.println("Subject: " + strSubject);
}
//Read internet code page property
prop = (MapiProperty) coll.get_Item(MapiPropertyTag.PR_INTERNET_CPID);
if (prop != null) {
System.out.println("Code page: " + prop.getLong());
}

Configurar Propiedades Adicionales

El siguiente código de ejemplo puede ser utilizado para configurar propiedades adicionales de un MapiMessage de Outlook.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// PT_MV_FLOAT, PT_MV_R4, mv.float
MapiMessage msg = new MapiMessage();
IList values = (IList) new ArrayList();
values.addItem((float) 1);
values.addItem((float) 2);
msg.setProperty(new MapiProperty(0x23901004, values));
//PT_MV_DOUBLE, PT_MV_R8
values = (IList) new ArrayList();
values.addItem((double) 1);
values.addItem((double) 2);
msg.setProperty(new MapiProperty(0x23901005, values));
//PT_MV_APPTIME
values = (IList) new ArrayList();
values.addItem(30456.34);
values.addItem(40655.45);
msg.setProperty(new MapiProperty(0x23901007, values));
//PT_MV_I8, PT_MV_LONGLONG
values = (IList) new ArrayList();
values.addItem((long) 30456);
values.addItem((long) 40655);
msg.setProperty(new MapiProperty(0x23901014, values));
//PT_MV_SHORT, PT_MV_I2, mv.i2
values = (IList) new ArrayList();
values.addItem((short) 1);
values.addItem((short) 2);
msg.setProperty(new MapiProperty(0x23901002, values));
//PT_MV_BOOLEAN
values = (IList) new ArrayList();
values.addItem(true);
values.addItem(false);
msg.setProperty(new MapiProperty(0x2390100b, values));
//PT_NULL
msg.setProperty(new MapiProperty(0x67400001, new byte[1]));
//PT_MV_LONG
values = (IList) new ArrayList();
values.addItem((int) 4);
UUID uuid = UUID.randomUUID();
MapiProperty property = new MapiProperty(msg.getNamedPropertyMapping().getNextAvailablePropertyId(MapiPropertyType.PT_MV_LONG), values);
msg.getNamedPropertyMapping().addNamedPropertyMapping(property, 0x00008028, uuid);
msg.setProperty(property);
//OR you can set the custom property (with the custom name)
MapiMessage message = new MapiMessage("sender@test.com", "recipient@test.com", "subj", "Body of test msg");
values = (IList) new ArrayList();
values.addItem((int) 4);
property = new MapiProperty(message.getNamedPropertyMapping().getNextAvailablePropertyId(MapiPropertyType.PT_MV_LONG), values);
message.addCustomProperty(property, "customProperty");
//PT_FLOAT
//Please note that you need explicit cast to float value for this to work
float floatValue = 123.456F;
MapiMessage newMsg = new MapiMessage();
long floatTag = newMsg.getNamedPropertyMapping().getNextAvailablePropertyId(MapiPropertyType.PT_FLOAT);
UUID guid = UUID.randomUUID();
MapiProperty newMapiProperty = new MapiProperty(floatTag, BitConverter.getBytesSingle(floatValue));
newMsg.getNamedPropertyMapping().addNamedPropertyMapping(newMapiProperty,(long) 12, guid);
newMsg.setProperty(newMapiProperty);
boolean propertyIsOk = false;
for (MapiNamedProperty prop : (Iterable<MapiNamedProperty>) newMsg.getNamedProperties().getValues())
{
if (prop.getGuid().equals(guid))
{
float val = prop.getFloat();
propertyIsOk = val == floatValue;
}
}

Eliminar Propiedades

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiMessage mapi = new MapiMessage("from@doamin.com", "to@domain.com", "subject", "body");
mapi.setBodyContent("<html><body><h1>This is the body content</h1></body></html>", BodyContentType.Html);
MapiMessage attachment = MapiMessage.fromFile(dataDir + "message.msg");
mapi.getAttachments().add(dataDir + "Outlook2 Test subject.msg", attachment);
System.out.println("Before removal = " + mapi.getAttachments().get_Item(mapi.getAttachments().size() - 1).getProperties().size());
mapi.getAttachments().get_Item(mapi.getAttachments().size() - 1).removeProperty(923467779);//Delete anyone property
System.out.println("After removal = " + mapi.getAttachments().get_Item(mapi.getAttachments().size() - 1).getProperties().size());
mapi.save(dataDir + "EMAIL_589265.msg");
MapiMessage mapi2 = MapiMessage.fromFile(dataDir + "EMAIL_589265.msg");
System.out.println("Reloaded = " + mapi2.getAttachments().get_Item(mapi2.getAttachments().size() - 1).getProperties().size());

Lectura de Propiedades Mapi Nombradas desde Mensajes de Correo Electrónico

Microsoft Outlook admite la adición de propiedades MAPI nombradas a un archivo MSG. Estas propiedades son añadidas por el usuario. Los desarrolladores pueden agregar una propiedad nombrada, por ejemplo “MyProp”, a un archivo MSG utilizando Aspose.Email.

Este artículo ilustra la colección MapiMessage getNamedProperties() de Aspose.Email para leer propiedades MAPI nombradas de un archivo MSG.

Leer Propiedad MAPI Nombrada

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Load MSG file
MapiMessage message = MapiMessage.fromFile(dataDir + "message.msg");
// Get all named MAPI properties
MapiPropertyCollection properties = message.getNamedProperties();
// Read all properties in for loop
for (MapiNamedProperty mapiNamedProp : (Iterable<MapiNamedProperty>) properties.getValues()) {
// Read any specific property
switch (mapiNamedProp.getNameId()) {
case "TEST":
System.out.println(mapiNamedProp.getNameId() + " equals " + mapiNamedProp.getString());
break;
case "MYPROP":
System.out.println(mapiNamedProp.getNameId() + " equals " + mapiNamedProp.getString());
break;
default:
break;
}
}

Leer Propiedad Mapi Nombrada desde un Adjunto

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MailMessage mail = MailMessage.load(dataDir + "test.eml");
MapiMessage mapi = MapiMessage.fromMailMessage(mail);
for (MapiNamedProperty namedProperty : (Iterable<MapiNamedProperty>) mapi.getAttachments().get_Item(0).getNamedProperties().getValues()) {
if (namedProperty.getNameId().equalsIgnoreCase("CustomAttGuid")) {
System.out.println("Equal..");
}
}