Управление цифрово подписанными сообщениями
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");
}