Керування цифрово підписаними повідомленнями

Aspose.Email реалізує повний алгоритм об’єкта електронної пошти S/MIME. Це дає API повний контроль над додаванням цифрових підписів до листів, їх збереженням під час конвертації між форматами, видаленням тощо.

Приєднання підпису до електронного листа

The SecureEmailManager.attachSignature метод дозволяє приєднувати цифрові підписи до електронних листів. Після приєднання підпису перевірте результати за допомогою властивостей, таких як IsSigned, MessageClass, а також деталі прикріплення.

Ви можете надати MailMessage або MapiMessage, приватний сертифікат та параметри підпису, щоб налаштувати процес приєднання підпису за допомогою SignatureOptions клас, який дозволяє користувачам задавати різні параметри приєднання підпису, включаючи відокремлені та не відокремлені підписи.

У наведеному прикладі коду показано, як завантажити повідомлення з файлу, приєднати відокремлений та не відокремлений цифровий підпис за допомогою приватного сертифіката, а потім перевірити, чи підписи були успішно приєднані.

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.");
}

Збереження підпису під час конвертації з EML у MSG

Aspose.Email зберігає цифровий підпис під час конвертації з EML у MSG. У наведеному фрагменті коду показано, як здійснити конвертацію з EML у 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());

Видалення підпису з файлу повідомлення Outlook

Якщо вам потрібно видалити підпис з повідомлення у форматі MAPI, наприклад, з метою сумісності, Aspose.Email пропонує MapiMessage.removeSignature метод і MapiMessage.isSigned властивість.

У наведеному фрагменті коду показано, як завантажити повідомлення MAPI з файлу, перевірити, чи воно цифрово підписане, і в разі підтвердження створити нове повідомлення без цифрового підпису:

MapiMessage msg = MapiMessage.load(fileName);

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

Конвертація S/MIME повідомлень з MSG у EML

Aspose.Email зберігає цифровий підпис під час конвертації з MSG у EML, як показано у наведеному фрагменті коду.

// 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");

Розшифрування файлу MSG за допомогою сертифіката

Якщо у вас є зашифровані повідомлення MAPI і потрібно розшифрувати їх за допомогою приватного ключа, збереженого у сертифікаті, наступні можливості Aspose.Email можуть бути корисними:

  • MapiMessage.isEncrypted - Повертає значення, що вказує, чи зашифровано повідомлення.
  • MapiMessage.decrypt() - Розшифровує це повідомлення (метод шукає відповідний сертифікат і приватний ключ у сховищах My поточного користувача та комп’ютера).
  • MapiMessage.decrypt(X509Certificate2 certificate) - Розшифровує це повідомлення за допомогою сертифіката.

У наведеному фрагменті коду показано, як працювати з зашифрованими повідомленнями MAPI:

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");
}