程序生成的数字签名电子邮件在Outlook中显示正确,但在Gmail中不正确

本文关键字:但在 Gmail 不正确 显示 电子邮件 数字签名 Outlook 程序生成 | 更新日期: 2023-09-27 18:09:07

我使用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扩展成功地自动验证签名。

ace .

(如果我向message.Body添加任何东西,它就会中断。Outlook不再将其识别为签名电子邮件,我只看到message.Body文本,而不是AlternateView。

但是,如果我把这封电子邮件发送到Gmail地址,例如,它显示为一个带有smme的空白电子邮件。p7m作为附件,在里面我看到了电子邮件的文本,但它周围看起来像是一大堆二进制乱码。

是否有一种方法可以使这个数字签名的电子邮件兼容Outlook客户端和Gmail web客户端?

程序生成的数字签名电子邮件在Outlook中显示正确,但在Gmail中不正确

当outlook生成签名电子邮件时,它会添加一个带有签名消息的备用视图,另一个带有html版本的备用视图,然后另一个带有纯文本版本的备用视图。我想如果你也这样做,那么它将在大多数电子邮件客户端工作。

有一个未签名的纯文本替代视图内容类型:文本/平原;charset = " us - ascii"Content-Transfer-Encoding: 7位

有一个未签名的HTML版本内容类型:text/html;charset = " us - ascii"Content-Transfer-Encoding: quoted-printable

有一个带符号的备用视图内容类型:应用程序/pkcs7签名;name = " smime.p7s "Content-Transfer-Encoding: base64附加:附件;文件名= " smime.p7s "

相关文章: