C# 使用C对电子邮件进行加密和签名#

C# 使用C对电子邮件进行加密和签名#,c#,encryption,sign,C#,Encryption,Sign,我如何对电子邮件进行加密和签名? 似乎我可以加密或签名,但不能两者兼而有之。 下面是我的代码 public void SendEncryptedEmail04( //string SigningCertPath, string EncryptingCertPath, String sender, String To, string Subject, string Body, // string SmtpServer, int S

我如何对电子邮件进行加密和签名?
似乎我可以加密或签名,但不能两者兼而有之。 下面是我的代码

   public void SendEncryptedEmail04(
        //string SigningCertPath, string EncryptingCertPath,
        String sender, String To,
        string Subject, string Body,
       // string SmtpServer, int SmtpPort, bool HTML)
       bool HTML)
    {
        X509Certificate2 SignCert = new X509Certificate2("D:\\certwithprivatekey.pfx", "password"));
        X509Certificate2 EncryptCert = new X509Certificate2("abc@gmail.crt", "");

        StringBuilder Message = new StringBuilder();
        Message.AppendLine("Content-Type: text/" + ((HTML) ? "html" : "plain") +
            "; charset=\"iso-8859-1\"");
        Message.AppendLine("Content-Transfer-Encoding: 7bit");
        Message.AppendLine();
        Message.AppendLine(Body);

        byte[] BodyBytes = Encoding.ASCII.GetBytes(Message.ToString());

        EnvelopedCms ECms = new EnvelopedCms(new ContentInfo(BodyBytes));
        CmsRecipient Recipient = new CmsRecipient(
            SubjectIdentifierType.IssuerAndSerialNumber, EncryptCert);
        ECms.Encrypt(Recipient);
        byte[] EncryptedBytes = ECms.Encode();

        SignedCms Cms = new SignedCms(new ContentInfo(EncryptedBytes));
        CmsSigner Signer = new CmsSigner
            (SubjectIdentifierType.IssuerAndSerialNumber, SignCert);

        Cms.ComputeSignature(Signer);
        byte[] SignedBytes = Cms.Encode();

        MailMessage Msg = new MailMessage();
        Msg.To.Add(new MailAddress(To));
        Msg.From = new MailAddress(sender);
        Msg.Subject = Subject;

        //MemoryStream ms = new MemoryStream(EncryptedBytes);
        MemoryStream ms = new MemoryStream(SignedBytes);
        AlternateView av = new AlternateView(ms,
         "application/pkcs7-mime; smime-type=signed-data;name=smime.p7m");
             //"application/pkcs7-mime; smime-type=enveloped-data;name=smime.p7m");
        Msg.AlternateViews.Add(av);

        SmtpClient smtp = new SmtpClient(emailServer, 25);

       smtp.UseDefaultCredentials = false;
      smtp.Credentials = new System.Net.NetworkCredential(sender,"xxxx"));

        smtp.Send(Msg);
    }
ThunderBird收到的电子邮件有以下内容

但是,我改为

   MemoryStream ms = new MemoryStream(EncryptedBytes);
我有

我如何加密和签名

谢谢