SmtpClient 附件+Inline圖檔插圖

rusli
Site Admin
文章: 212
註冊時間: 週三 7月 07, 2010 9:49 pm

SmtpClient 附件+Inline圖檔插圖

文章rusli » 週三 10月 05, 2011 11:40 am

代碼: 選擇全部

            const string testName = "小堃모발 이식 비용堃一杯を求めて ラーメンは進化し続ける雲端時代來臨,心動不如馬上行動,搶先體驗 Rusli 顧客服務!";
            const string testBody = "小堃모발 이식 비용{0}堃一杯を求めて ラー{1}メンは進化し続ける雲端時代來臨,心動不如馬上行動,搶先體驗 Rusli 顧客服務!";
            const string testImg = "<img src='cid:{0}' width='100px' height='100px'></img>";
            var networkCredential = new NetworkCredential("your account", "your passwd");
            const string smtpServer = "your mail server";
            string attachFileName = string.Format(@"C:\{0}.xls", testName);
            string inlinefileName = string.Format(@"C:\{0}.jpg", testName);
            string inlinefileName2 = string.Format(@"C:\{0}.gif", testName);

            var contentIDs = new[] {Guid.NewGuid().ToString(), Guid.NewGuid().ToString()};
            var files = new[] {inlinefileName, inlinefileName2};
            var mailsTo = new[] { "rusli@gmail"};
            var mailFrom = new MailAddress("rusli@gmail");

            string subject = DateTime.Now.Ticks + testName;
            string img1 = string.Format(testImg, contentIDs[0]);
            string img2 = string.Format(testImg, contentIDs[1]);
            string body = string.Format(testBody, img1, img2);

            string encodeSubject = string.Format("=?UTF-8?B?{0}?=",
                                Convert.ToBase64String(System.Text.Encoding.GetEncoding("UTF-8").GetBytes(subject)));

            var mailMessage = new MailMessage
                                  {
                                      From = mailFrom,
                                      SubjectEncoding = Encoding.ASCII,
                                      Subject = encodeSubject
                                  };

            foreach (var m in mailsTo)
            {
                mailMessage.To.Add(new MailAddress(m));
            }

            //// 附件處理
            encodeSubject = string.Format("=?UTF-8?B?{0}?=",
                                Convert.ToBase64String(System.Text.Encoding.GetEncoding("UTF-8").GetBytes(attachFileName)));
            Attachment file = new Attachment(System.IO.File.OpenRead(attachFileName), "", "application/octet-stream; charset=Big5; name=\"" + encodeSubject + "\"");
            ContentDisposition disposition = file.ContentDisposition;
            disposition.FileName = encodeSubject;
            file.TransferEncoding = TransferEncoding.Base64;
            mailMessage.Attachments.Add(file);

            //// body 處理附件 inline 方式
            AlternateView view = AlternateView.CreateAlternateViewFromString(body, Encoding.GetEncoding("utf-8"),
                                                                             "text/html");
            view.TransferEncoding = TransferEncoding.Base64;

            for (int i = 0; i < files.Length; i++)
            {
                attachFileName = files[i];
                string contentId = contentIDs[i];
                string contentType = ImageContentType.GetContentText(attachFileName);
                var linkedResource = new LinkedResource(attachFileName, contentType + "; charset=Big5; name=\"" + encodeSubject + "\"")
                                         {
                                             TransferEncoding = TransferEncoding.Base64,
                                             ContentId = contentId,
                                             ContentType = {MediaType = contentType}
                                         };
                view.LinkedResources.Add(linkedResource);
            }

            mailMessage.AlternateViews.Add(view);

            var smtpClient = new SmtpClient
                                 {
                                     Host = smtpServer,
                                     EnableSsl = false,
                                     UseDefaultCredentials = false,
                                     Credentials = networkCredential 
                                 };

            smtpClient.Send(mailMessage);

回到「C#」

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 0 位訪客