3

次のように、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 Web クライアントの両方に対応させる方法はありますか?

4

1 に答える 1

4

Outlook が署名された電子メールを生成すると、署名されたメッセージを含む代替ビュー、html バージョンの別の代替ビュー、プレーン テキスト バージョンの別の代替ビューが追加されます。これも行うと、ほとんどすべてのメールクライアントで機能すると思います。

Content-Type: text/plain; 署名されていないプレーン テキストの代替ビューがあります。charset="us-ascii" Content-Transfer-Encoding: 7bit

Content-Type: text/html; に署名されていない html バージョンがあります。charset="us-ascii" Content-Transfer-Encoding: quoted-printable

署名された代替ビュー Content-Type: application/pkcs7-signature があります。name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; ファイル名="smime.p7s"

于 2013-06-14T17:29:05.343 に答える