Управление цифрово подписанными сообщениями

Aspose.Email реализует полный алгоритм объекта электронной почты S/MIME. Это предоставляет API полные возможности добавлять цифровые подписи к сообщениям, сохранять их при конвертации между форматами, удалять и т.д.

Прикрепить подпись к письму

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