Сгенерированное программным способом электронное письмо с цифровой подписью отображается правильно в Outlook, но не в Gmail.

Я использую C #, .NET 4.0 для отправки электронной почты с цифровой подписью, например:

private void SendMailMessage(string emailTo)
{
    MailMessage message = new MailMessage();
    message.From = new MailAddress(fromAddress);
    message.To.Add(new MailAddress(emailTo));
    message.Subject = "Regarding your lottery winnings";
    message.IsBodyHtml = false;
    string body = "Content-Type: text/plain;charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\nThe URL to your secret is: " + url + "\nIt can only be viewed once.";                
    byte[] messageBytes = Encoding.ASCII.GetBytes(body);
    ContentInfo content = new ContentInfo(messageBytes);
    SignedCms signedCms = new SignedCms(content, false);
    CmsSigner Signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, emailCert);
    signedCms.ComputeSignature(Signer);
    byte[] signedBytes = signedCms.Encode();
    MemoryStream ms = new MemoryStream(signedBytes);
    AlternateView av = new AlternateView(ms, "application/pkcs7-mime; smime-type=signed-data;name=smime.p7m");
    message.AlternateViews.Add(av);                
    SmtpClient client = new SmtpClient(smtpServer, int.Parse(smtpServerPort));
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.Send(message);
    message.Dispose();
    client = null;
}

Обратите внимание, что message.Body оставлено пустым, и к электронному письму добавляется только AlternateView. Когда я отправляю это электронное письмо и просматриваю его в Outlook, оно отлично отображается со значком сертификата в сообщении электронной почты, а расширения S / MIME Outlook успешно и автоматически проверяют подпись.

Тузы.

(Если я добавлю что-нибудь в message.Body, он сломается. Outlook больше не распознает это как подписанное электронное письмо, и я вижу только текст message.Body, а не AlternateView.)

Но если я отправлю это электронное письмо на адрес Gmail, например, оно будет отображаться как пустое электронное письмо с прикрепленным файлом smime.p7m, а внутри я вижу текст письма, но он окружен тем, что выглядит как тонна бинарная тарабарщина.

Есть ли способ сделать это электронное письмо с цифровой подписью совместимым как с клиентом Outlook, так и с веб-клиентом Gmail?


person Ryan Ries    schedule 13.04.2013    source источник
comment
Ну какая тема сообщения. Вы ведь не создаете очередного спам-бота?   -  person alex    schedule 14.04.2013
comment
@alex Это была шутка. Мне нравится добавлять немного юмора в свои просьбы о помощи.   -  person Ryan Ries    schedule 14.04.2013


Ответы (1)


Когда Outlook создает подписанное электронное письмо, он добавляет альтернативное представление с подписанным сообщением, другое альтернативное представление с версией html, а затем другое альтернативное представление с версией обычного текста. Я думаю, что если вы также сделаете это, то это будет работать почти во всех почтовых клиентах.

есть альтернативное представление в виде простого текста, которое не подписано Content-Type: text / plain; charset = "us-ascii" Content-Transfer-Encoding: 7bit

есть версия html без подписи Content-Type: text / html; charset = "us-ascii" Content-Transfer-Encoding: quoted-printable

Существует подписанный альтернативный вид Content-Type: application / pkcs7-signature; name = "smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: вложение; filename = "smime.p7s"

person plbirch    schedule 14.06.2013