1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
//Construction du message
MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add(destinataire);
message.From = new MailAddress(expediteur);
message.Subject = "OBJET";
StringBuilder UnsignedMessage = new StringBuilder();
UnsignedMessage.Append("MIME-Version: 1.0\r\n");
UnsignedMessage.Append("Content-Type: multipart/mixed; boundary=boundary-1; protocol=\"application/x-pkcs7-signature\"; micalg = sha1;\r\n");
UnsignedMessage.Append("\r\n");
UnsignedMessage.Append("This is an S/MIME signed message\r\n");
UnsignedMessage.Append("--boundary-1\r\n");
UnsignedMessage.Append("Content-Type : text/plain\r\n");
UnsignedMessage.Append("Content-Transfer-Encoding : 7Bit\r\n\r\n");
UnsignedMessage.Append("Body\r\n");
UnsignedMessage.Append("\r\n\r\n");
//Ajout de la pièce jointe
FileInfo fileInfo = new FileInfo("ma piece jointe");
UnsignedMessage.Append("--boundary-1\r\n");
UnsignedMessage.Append("Content-Type : application/octet-stream; file = "+fileInfo.Name+"\r\n");
UnsignedMessage.Append("Content-Transfer-Encoding: base64\r\n");
UnsignedMessage.Append("Content-Disposition: attachment; filename="+fileInfo.Name+"\r\n\r\n");
byte[] buff = null;
FileStream fs = new FileStream("ma piece jointe", FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = fileInfo.Length;
buff = br.ReadBytes((int)numBytes);
byte[] bytes = buff;
String filecontent = Convert.ToBase64String(bytes,Base64FormattingOptions.InsertLineBreaks);
UnsignedMessage.Append(filecontent);
UnsignedMessage.Append("\r\n");
byte[] messageData = Encoding.ASCII.GetBytes(UnsignedMessage.ToString());
//Signature du message
ContentInfo content = new ContentInfo(messageData);
SignedCms signedCms = new SignedCms(content);
CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, SenderCert);
signer.IncludeOption = X509IncludeOption.WholeChain;
signer.Certificates.Add(SenderCert);
Pkcs9SigningTime signingTime = new Pkcs9SigningTime();
signer.SignedAttributes.Add(signingTime);
signedCms.ComputeSignature(signer);
byte[] signedData = signedCms.Encode();
//Cryptage du message
content = new ContentInfo(signedData);
EnvelopedCms envelopedCms = new EnvelopedCms(content);
CmsRecipient recipients = new CmsRecipient(SubjectIdentifierType.IssuerAndSerialNumber, RecipientCert);
envelopedCms.Encrypt(recipients);
byte[] encryptedBytes = envelopedCms.Encode();
//Envoi du message
MemoryStream encryptedStream = new MemoryStream(encryptedBytes);
AlternateView encryptedView = new AlternateView(encryptedStream, "application/x-pkcs7-mime; smime-type=enveloped-data; name=smime.p7m; content-disposition=attachment; fileName=smime.p7m");
message.AlternateViews.Add(encryptedView);
smtpClient.Send(message); |
Partager