Gerenciando Mensagens Assinadas Digitalmente

Aspose.Email implementa o algoritmo completo do objeto de email S/MIME. Isso dá à API total poder para adicionar assinaturas digitais a mensagens de email, preservá-las ao converter mensagens entre formatos, removê-las, etc.

Anexar uma Assinatura a um Email

O método SecureEmailManager.attachSignature permite anexar assinaturas digitais a mensagens de email. Após anexar a assinatura, verifique os resultados por meio de propriedades como IsSigned, MessageClass, e detalhes do anexo.

Você pode fornecer um MailMessage ou MapiMessage, um certificado privado e opções de assinatura para personalizar o processo de anexação de assinatura com a classe SignatureOptions que permite aos usuários especificar várias opções para a anexação de assinatura, incluindo assinaturas destacadas ou não destacadas.

O seguinte exemplo de código mostrará como carregar uma mensagem de um arquivo, anexar uma assinatura digital destacada e não destacada usando um certificado privado e, em seguida, verificar se as assinaturas foram anexadas com sucesso.

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("Assinatura Destacada Anexada com Sucesso.");
}

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

if (signedNonDetached.isSigned()) {
    System.out.println("Assinatura Não Destacada Anexada com Sucesso.");
}

Preservando a Assinatura ao Converter de EML para MSG

Aspose.Email preserva a assinatura digital ao converter de EML para MSG. O seguinte trecho de código mostra como converter de EML para MSG.

// Para exemplos completos e arquivos de dados, por favor vá para https://github.com/aspose-email/Aspose.Email-for-Java
// O caminho para o diretório de arquivos.
String dataDir = "outlook/";

// Carregar mensagem de email
MailMessage message = MailMessage.load(dataDir + "Message.eml", new EmlLoadOptions());
// Salvar como MSG
message.save(dataDir + "ConvertEMLToMSG_out.msg", SaveOptions.getDefaultMsgUnicode());

Remover Assinatura de um Arquivo de Mensagem do Outlook

Se você está enfrentando a necessidade de remover a assinatura de uma mensagem em um formato MAPI, por exemplo, por motivos de compatibilidade, Aspose.Email oferece o método MapiMessage.removeSignature e a propriedade MapiMessage.isSigned.

O seguinte trecho de código mostra como carregar uma mensagem MAPI de um arquivo, verificar se está assinada digitalmente e, se estiver, criar uma nova mensagem sem a assinatura digital:

MapiMessage msg = MapiMessage.load(fileName);

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

Convertendo Mensagens S/MIME de MSG para EML

Aspose.Email preserva a assinatura digital ao converter de MSG para EML, como mostrado no seguinte trecho de código.

// Para exemplos completos e arquivos de dados, por favor vá para https://github.com/aspose-email/Aspose.Email-for-Java
// O caminho para o diretório de arquivos.
String dataDir = "outlook/";

MailMessage msg = MailMessage.load(dataDir + "message.eml");
MapiMessage mapi = MapiMessage.fromMailMessage(msg, new MapiConversionOptions(OutlookMessageFormat.Unicode));
// Salvar arquivo no disco
mapi.save(dataDir + "ConvertMIMEMessagesFromMSGToEML_out.msg");

Descriptografar um Arquivo MSG com Certificado

Se você tem mensagens MAPI criptografadas e precisa descriptografá-las usando a chave privada armazenada em um certificado, os seguintes recursos do Aspose.Email podem ser úteis:

O seguinte trecho de código mostra como trabalhar com mensagens MAPI criptografadas:

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