Gestione dei messaggi firmati digitalmente

Aspose.Email implementa l’intero algoritmo dell’oggetto email S/MIME. Questo fornisce all’API il pieno potere di aggiungere firme digitali ai messaggi email, preservarle durante la conversione tra formati, rimuoverle, ecc.

Allegare una firma a un’email

Il SecureEmailManager.attachSignature metodo consente di allegare firme digitali ai messaggi email. Dopo aver allegato la firma, verifica i risultati tramite proprietà come IsSigned, MessageClass, e i dettagli dell’allegato.

Puoi fornire un MailMessage o MapiMessage, un certificato privato e le opzioni di firma per personalizzare il processo di allegato della firma con il SignatureOptions classe che consente agli utenti di specificare varie opzioni per l’allegato della firma, incluse firme distaccate o non distaccate.

Il seguente esempio di codice mostrerà come caricare un messaggio da un file, allegare una firma digitale distaccata e non distaccata utilizzando un certificato privato, e poi verificare se le firme sono state allegate correttamente.

String fileName = "message.msg";
String privateCertFile = "certFile.pfx";
X509Certificate2 privateCert = new X509Certificate2(privateCertFile, "password");

MapiMessage msg = MapiMessage.load(fileName);

SignatureOptions opt = new SignatureOptions();
opt.setDetached(true);
MapiMessage signedDetached = new SecureEmailManager().attachSignature(msg, privateCert, opt);

if (signedDetached.isSigned()) {
    System.out.println("Detached Signature Attached Successfully.");
}

opt.setDetached(false);
MapiMessage signedNonDetached = new SecureEmailManager().attachSignature(msg, privateCert, opt);

if (signedNonDetached.isSigned()) {
    System.out.println("Non-Detached Signature Attached Successfully.");
}

Preservare la firma durante la conversione da EML a MSG

Aspose.Email preserva la firma digitale durante la conversione da EML a MSG. Il seguente frammento di codice mostra come convertire da EML a MSG.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";

// Load mail message
MailMessage message = MailMessage.load(dataDir + "Message.eml", new EmlLoadOptions());
// Save as MSG
message.save(dataDir + "ConvertEMLToMSG_out.msg", SaveOptions.getDefaultMsgUnicode());

Rimuovere la firma da un file di messaggio Outlook

Se hai la necessità di rimuovere la firma da un messaggio in formato MAPI, ad esempio per motivi di compatibilità, Aspose.Email offre il MapiMessage.removeSignature metodo e il MapiMessage.isSigned proprietà.

Il seguente frammento di codice mostra come caricare un messaggio MAPI da un file, verificare se è firmato digitalmente e, in tal caso, creare un nuovo messaggio senza la firma digitale:

MapiMessage msg = MapiMessage.load(fileName);

if (msg.isSigned()) {
    MapiMessage unsignedMsg = msg.removeSignature();
}

Conversione di messaggi S/MIME da MSG a EML

Aspose.Email preserva la firma digitale durante la conversione da MSG a EML come mostrato nel seguente frammento di codice.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";

MailMessage msg = MailMessage.load(dataDir + "message.eml");
MapiMessage mapi = MapiMessage.fromMailMessage(msg, new MapiConversionOptions(OutlookMessageFormat.Unicode));
// Save File to disk
mapi.save(dataDir + "ConvertMIMEMessagesFromMSGToEML_out.msg");

Decifrare un file MSG con certificato

Se possiedi messaggi MAPI cifrati e devi decifrarli utilizzando la chiave privata memorizzata in un certificato, le seguenti funzionalità di Aspose.Email possono essere utili:

Il seguente frammento di codice mostra come lavorare con messaggi MAPI cifrati:

X509Certificate2 privateCert = new X509Certificate2("privateCertFile", "password");
MapiMessage msg = MapiMessage.load("encrypted.msg");

if (msg.isEncrypted()) {
    MapiMessage decryptedMsg = msg.decrypt(privateCert);
    //MapiMessage decryptedMsg = msg.decrypt(/*byte[]*/rawPrivateCert, "password");
}