public void TestTwo() { EmailMessage emailmessage = new EmailMessage(); emailmessage.FromAddress = TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject = "A photo of hawthornes"; emailmessage.TextPart = new TextAttachment("This photo requires a better email reader."); emailmessage.HtmlPart = new HtmlAttachment("<html><body>" + "<p>Note to self: look at this photo again in 30 years.</p>" + "<p><img src=\"cid:hawthornes\" alt=\"Hawthorne bush\"/></p>" + "<p>-Marcel</p>"); FileInfo relatedfileinfo = new FileInfo(@"..\..\TestFiles\grover.jpg"); FileAttachment relatedfileattachment = new FileAttachment(relatedfileinfo, "hawthornes"); relatedfileattachment.ContentType = "image/jpeg"; emailmessage.AddRelatedAttachment(relatedfileattachment); SmtpServer smtpserver = TestAddressHelper.GetSmtpServer(); emailmessage.Send(smtpserver); //Assert.IsNull(smtpserver.GetSmtpConversation()); }
public void TestRelatedAttachments() { EmailMessage emailmessage = new EmailMessage(); emailmessage.FromAddress = TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject = "EmailMessageTests Test Related Graphic"; emailmessage.TextPart = new TextAttachment("This\r\nis the\r\ntext\r\npart."); emailmessage.HtmlPart = new HtmlAttachment("<html><body>This<br>\r\nis the<br><img src=\"cid:mycontentid\">\r\n<strong>HTML</strong><br>\r\npart.</body></html>"); FileInfo relatedfileinfo = new FileInfo(@"..\..\TestFiles\grover.jpg"); Assert.IsTrue(relatedfileinfo.Exists); FileAttachment relatedfileattachment = new FileAttachment(relatedfileinfo, "mycontentid"); relatedfileattachment.ContentType = "image/jpeg"; emailmessage.AddRelatedAttachment(relatedfileattachment); //emailmessage.Send(_smtpserver); String content = emailmessage.ToDataString(); StringReader sr = new StringReader(content); int i = 0; String line = null; bool hasMimeVersion = false; bool hasMixedHeader = false; bool relatedHeaderComesFirst = false; bool hasMultipartAlternative = false; bool hasPlainText = false; bool hasHtmlText = false; bool hasAttachment = false; bool hasRelatedHeader = false; int quotedPrintableParts = 0; String expectedToAddress = TestAddressHelper.GetToAddress().Name + " <" + TestAddressHelper.GetToAddress().Email + ">"; //log.Debug("To Address is "+expectedToAddress); while ((line = sr.ReadLine()) != null) { i++; if (line.IndexOf("Content-Type: multipart/mixed") == 0) { hasMixedHeader = true; } if (line.IndexOf("MIME-Version: 1.0") == 0) { hasMimeVersion = true; } if (line.IndexOf("Content-Type: multipart/alternative;") == 0) { hasMultipartAlternative = true; } if (line.IndexOf("Content-Type: text/html") == 0) { hasHtmlText = true; } if (line.IndexOf("Content-Type: text/plain") == 0) { hasPlainText = true; } if (line.IndexOf("Content-Type: image/jpeg") == 0) { hasAttachment = true; } if (line.IndexOf("Content-Transfer-Encoding: quoted-printable") == 0) { quotedPrintableParts++; } if (line.IndexOf("/9j/4AAQSkZJRgABAQEASABIAAD/") == 0) { hasAttachment = true; } if (line.IndexOf("Content-Type: multipart/related") >= 0) { hasRelatedHeader = true; if (!hasMultipartAlternative && !hasMixedHeader) { relatedHeaderComesFirst = true; } } //log.Debug("Line "+i+": "+line); } Assert.IsFalse(hasMixedHeader, "Should not have a multipart/mixed header"); Assert.IsTrue(hasMimeVersion, "Missing Mime Version header"); Assert.IsTrue(relatedHeaderComesFirst, "The related header should come first"); Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting"); Assert.IsTrue(hasPlainText, "Missing Plain Text"); Assert.IsTrue(hasHtmlText, "Missing HTML"); Assert.IsTrue(hasAttachment, "Missing the base64 Attachment"); Assert.IsTrue(hasRelatedHeader, "Missing the related header."); Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found " + quotedPrintableParts); }
public static EmailMessage CreateEmbeddedEmail(string body, int newsletterId) { EmailMessage message = new EmailMessage(); Hashtable addedAtt = new Hashtable(); body = template.ParseInternalLinks(body); //string currentDomain = "http://" + System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; //string pattern = "href=\"?([^\\\"' >]+)|src=\\\"?([^\\\"' >]+)"; string currentDomain = "http://" + System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; string pattern = "href=\"?([^\\\"' >]+)|src=\\\"?([^\\\"' >]+)|background=\\\"?([^\\\"' >]+)"; string appendNewsletter = "umbNl=" + newsletterId.ToString(); MatchCollection tags = Regex.Matches(body, pattern, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); foreach (Match tag in tags) { if (tag.Groups.Count > 0) { if (tag.Groups[1].Value.ToLower().IndexOf("http://") == -1 && tag.Groups[2].Value.ToLower().IndexOf("http://") == -1 && tag.Groups[1].Value.ToLower().IndexOf("mailto:") == -1 && tag.Groups[2].Value.ToLower().IndexOf("mailto:") == -1) { // links if (tag.Groups[1].Value != "") { if (tag.Groups[0].Value.ToLower() == "href=\"/") { if (tag.Groups[1].Value.IndexOf("?") == -1) { body = body.Replace(tag.Groups[0].Value + "\"", "href=\"" + currentDomain + tag.Groups[1].Value + "?" + appendNewsletter + "\""); } else { body = body.Replace(tag.Groups[0].Value + "\"", "href=\"" + currentDomain + tag.Groups[1].Value + "&" + appendNewsletter + "\""); } } else { if (tag.Groups[1].Value.IndexOf("?") == -1) { body = body.Replace("href=\"" + tag.Groups[1].Value + "\"", "href=\"" + currentDomain + tag.Groups[1].Value + "?" + appendNewsletter + "\""); } else { body = body.Replace("href=\"" + tag.Groups[1].Value + "\"", "href=\"" + currentDomain + tag.Groups[1].Value + "&" + appendNewsletter + "\""); } } } // src else { string imageExtextions = "jpg,jpeg,gif,png"; string image = tag.Groups[2].Value; if (image == "") { image = tag.Groups[3].Value; } string orgImage = image; string ext = image.Split(char.Parse("."))[image.Split(char.Parse(".")).Length - 1].ToLower(); bool isImage = imageExtextions.IndexOf(ext) != -1; if (isImage) { string guid = Guid.NewGuid().ToString(); FileAttachment attachment = CreateImageAttachment(image, ext, guid); if (attachment != null) { if (addedAtt.ContainsKey(image)) { body = body.Replace(image, "cid:" + addedAtt[image].ToString()); } else { message.AddRelatedAttachment(attachment); body = body.Replace(image, "cid:" + guid); addedAtt.Add(image, guid); } } else { body = body.Replace(orgImage, currentDomain + tag.Groups[2].Value); } // break; } else { body = body.Replace(orgImage, currentDomain + tag.Groups[2].Value); } } } } } message.HtmlPart = new HtmlAttachment(body); return(message); }