Нашла решение.
Отписываюсь для тех, кто столкнулся с той же проблемой.
Для шифрования письма с вложением я исполmзовала s/mime
Вот хороший пример, на котором я основывалась:
http://istern.dk/blog/20...ail%29.aspx#comment-1586У меня это выглядит так:
// Построение сообщения с вложенным файлом
private static string BuildAttachedMessageContent(string attachmentFileName)
{
StringBuilder message = new StringBuilder();
string reportData = "";
using (StreamReader file = new StreamReader(attachmentFileName, Encoding.GetEncoding("windows-1251")))
{
try
{
reportData = file.ReadToEnd();
}
finally
{
file.Close();
}
}
byte[] data = Encoding.GetEncoding("windows-1251").GetBytes(reportData);
//Setup filecontent
String filecontent = Convert.ToBase64String(data, Base64FormattingOptions.InsertLineBreaks);
message.Append("Content-Type: ");
message.Append("application/octet-stream;");
string name = attachmentFileName.Substring(attachmentFileName.LastIndexOf('\\') + 1);
message.Append("name=" + name);
message.Append("\r\n");
message.Append("Content-Transfer-Encoding: base64\r\n\r\n");
message.Append(filecontent);
message.Append("\r\n\r\n");
return message.ToString();
}
// шифрование
private static byte[] DoEncrypt(string message, X509Certificate2 encryptionCertificates)
{
byte[] messageBytes = Encoding.ASCII.GetBytes(message);
EnvelopedCms envelopedCms = new EnvelopedCms(new ContentInfo(messageBytes));
envelopedCms.ContentEncryptionAlgorithm.Oid = new System.Security.Cryptography.Oid("1.2.643.2.2.21", "Gost28147-89");
CmsRecipient recipients = new CmsRecipient(SubjectIdentifierType.IssuerAndSerialNumber, encryptionCertificates);
envelopedCms.Encrypt(recipients);
return envelopedCms.Encode();
}
...
string content = BuildAttachedMessageContent(fileName);
encryptedBytes = DoEncrypt(content, cert);
MemoryStream stream = new MemoryStream(encryptedBytes);
AlternateView view = new AlternateView(stream, "application/pkcs7-mime; smime-type=enveloped-data;name=smime.p7m");
view.TransferEncoding = TransferEncoding.Base64;
message.AlternateViews.Add(view);
message.From = new MailAddress(from);
message.To.Add(address);
message.Subject = subject;
SmtpClient client = new SmtpClient(...);
client.Credentials = new NetworkCredential(....);
client.Send(message);
...