我有以下工作代码来发送经过数字签名的电子邮件.我必须插入一个带有gif徽标的基于html的签名,该徽标应该从程序集资源中提取.我google了一下,发现Convert.ToBase64String()作为可能的解决方案,但Outlook不显示图像.
第二种方法是使用AlternateView的LinkedResource来嵌入我的图像,但实际上我没有使用下面的代码.我已经有一个AlternateView来发送带有数字签名的电子邮件.是否有可能以某种方式添加图像?
第二种方法是使用AlternateView的LinkedResource来嵌入我的图像,但实际上我没有使用下面的代码.我已经有一个AlternateView来发送带有数字签名的电子邮件.是否有可能以某种方式添加图像?
邮件(to,from,from_name,relay,subject,body,cc1,cc2);.
private void mailer(string toaddress,string fromaddress,string fromaddress_disp,string relays,string mailsubject,string bodytext,string ccman,string cccct) { string certname = ""; MailAddress from = new MailAddress(fromaddress,fromaddress_disp); MailAddress to = new MailAddress(toaddress); MailAddress cc_man = new MailAddress(ccman); MailAddress cc_cct = new MailAddress(cccct); MailMessage message = new MailMessage(from,to); message.CC.Add(cc_man); message.CC.Add(cc_cct); message.Subject = mailsubject; message.IsBodyHtml = true; string body = "Content-Type: text/html; charset=iso-8859-1 \r\nContent-transfer-encoding: 8bit\r\n\r\n" + bodytext; byte[] messageData = Encoding.ASCII.GetBytes(body); ContentInfo content = new ContentInfo(messageData); SignedCms Cms = new SignedCms(new ContentInfo(messageData)); X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); RSACryptoServiceProvider csp = null; X509Certificate2Collection certCollection = store.Certificates; X509Certificate2 cert = null; foreach (X509Certificate2 c in certCollection) { if ((c.Subject.Contains("myEmailAddress")) && (c.FriendlyName.Contains("CompanyEmailDigSig"))) { cert = c; break; } } if (cert != null) { csp = (RSACryptoServiceProvider)cert.PrivateKey; } else { throw new Exception("Valid certificate was not found"); } CmsSigner Signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber,cert); Cms.ComputeSignature(Signer); byte[] SignedBytes = Cms.Encode(); MemoryStream signedStream = new MemoryStream(SignedBytes); AlternateView signedView = new AlternateView(signedStream,"application/pkcs7-mime; smime-type=signed-data; name=sig.p7m"); message.AlternateViews.Add(signedView); SmtpClient client = new SmtpClient(relays); store.Close(); try { client.Send(message); } catch (Exception ex) { //exception } }
编辑:我不得不重新打开这个帖子,因为之前接受的答案还不够好.
解决方法
我确实认为不可能使用System.Net.Mail对整个邮件进行签名.但这也可以帮助你: –
Send Email in C# Tutorial – SSL,HTML,Embedded Image,S/MIME
另请查看:-( Send Email with Embedded Images – ImportHtml – Example): –
using System; using System.Collections.Generic; using System.Text; using EASendMail; //add EASendMail namespace namespace mysendemail { class Program { static void Main(string[] args) { SmtpMail oMail = new SmtpMail("TryIt"); SmtpClient oSmtp = new SmtpClient(); // Set sender email address,please change it to yours oMail.From = "[email protected]"; // Set recipient email address,please change it to yours oMail.To = "[email protected]"; // Set email subject oMail.Subject = "test html email with attachment"; // Your SMTP server address SmtpServer oServer = new SmtpServer("smtp.emailarchitect.net"); // User and password for ESMTP authentication,if your server doesn't require // User authentication,please remove the following codes. oServer.User = "[email protected]"; oServer.Password = "testpassword"; // If your SMTP server requires SSL connection,please add this line // oServer.ConnectType = SmtpConnectType.ConnectSSLAuto; try { // Import html body and also import linked image as embedded images. oMail.ImportHtml( "<html><body>test <img src=\"test.gif\"> importhtml</body></html>","c:\\my picture",//test.gif is in c:\\my picture ImportHtmlBodyOptions.ImportLocalPictures | ImportHtmlBodyOptions.ImportCss ); Console.WriteLine("start to send email with embedded image..."); oSmtp.SendMail(oServer,oMail); Console.WriteLine("email was sent successfully!"); } catch (Exception ep) { Console.WriteLine("Failed to send email with the following error:"); Console.WriteLine(ep.Message); } } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。