public void TestWindows1251() { EmailMessage emailmessage = new EmailMessage(); emailmessage.FromAddress=TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject = "ошибочка?"; emailmessage.HeaderCharSet = System.Text.Encoding.GetEncoding("windows-1251"); TextAttachment ta = new TextAttachment("\r\nнесколько строк по русски"); ta.CharSet = System.Text.Encoding.GetEncoding("windows-1251"); emailmessage.TextPart = ta; emailmessage.Send(TestAddressHelper.GetSmtpServer()); Assert.IsTrue(emailmessage.ToDataString().IndexOf("Subject: =?windows-1251") > 0, "Missing windows-1251 in subject"); Assert.IsTrue(emailmessage.ToDataString().IndexOf("koi8-r") < 0); }
public void TestFor7BitHeader() { EmailMessage emailmessage=new EmailMessage(); emailmessage.HeaderCharSet=System.Text.ASCIIEncoding.ASCII; emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.SevenBit; emailmessage.FromAddress=TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject="EmailMessageTests Test HTML and Text"; emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart."); emailmessage.TextPart.CharSet=System.Text.ASCIIEncoding.ASCII; emailmessage.TextPart.Encoding=DotNetOpenMail.Encoding.EncodingType.SevenBit; emailmessage.HtmlPart=new HtmlAttachment("<html><body>This<br>\r\nis the<br>\r\n<strong>HTML</strong><br>\r\npart.</body></html>"); emailmessage.HtmlPart.CharSet=System.Text.ASCIIEncoding.ASCII; emailmessage.HtmlPart.Encoding=DotNetOpenMail.Encoding.EncodingType.SevenBit; //emailmessage.Send(_smtpserver); String content=emailmessage.ToDataString(); StringReader sr=new StringReader(content); //log.Debug(content); int i=0; String line=null; String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">"; int has7Bit=0; int hasUSASCII=0; while ((line=sr.ReadLine())!=null) { i++; if (line.IndexOf("Content-Transfer-Encoding: 7bit")==0) { has7Bit++; } if (line.IndexOf("charset=\"us-ascii\"")>0) { hasUSASCII++; } //log.Debug("Line "+i+": "+line); } Assert.AreEqual(2, has7Bit, "Not enough 7bit lines"); Assert.AreEqual(2, hasUSASCII, "Not enough us-ascii lines"); }
public void TestExtraHeader() { EmailMessage emailmessage=new EmailMessage(); emailmessage.FromAddress=TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.AddCcAddress(TestAddressHelper.GetToAddress()); emailmessage.AddBccAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject="Extra Header"; emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable; emailmessage.XMailer="NUnit Test Mailer"; emailmessage.AddCustomHeader("MyHeader", "Value"); emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart."); emailmessage.HtmlPart=new HtmlAttachment("<html><body>This<br>\r\nis the<br>\r\n<strong>HTML</strong><br>\r\npart.</body></html>"); String content=emailmessage.ToDataString(); emailmessage.Send(_smtpserver); }
public void TestHtmlAndText() { EmailMessage emailmessage=new EmailMessage(); emailmessage.FromAddress=TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject="EmailMessageTests Test HTML and Text"; emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart."); emailmessage.HtmlPart=new HtmlAttachment("<html><body>This<br>\r\nis the<br>\r\n<strong>HTML</strong><br>\r\npart.</body></html>"); emailmessage.AddCustomHeader("X-MyHeader1", "my header number one"); emailmessage.AddCustomHeader("X-MyHeader2", "my header number two"); emailmessage.Send(_smtpserver); String content=emailmessage.ToDataString(); StringReader sr=new StringReader(content); log.Debug(content); int i=0; String line=null; bool hasToHeader=false; bool hasFromHeader=false; bool hasSubjectHeader=false; bool hasMimeVersion=false; bool hasMultipartAlternative=false; bool hasPlainText=false; bool hasHtmlText=false; bool hasDefaultXMailerHeader=false; bool hasCustomHeader1=false; bool hasCustomHeader2=false; int quotedPrintableParts=0; String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">"; while ((line=sr.ReadLine())!=null) { i++; if (line.IndexOf("To: "+expectedToAddress)==0) { hasToHeader=true; } if (line.IndexOf("From: "+emailmessage.FromAddress.ToString())==0) { hasFromHeader=true; } if (line.IndexOf("Subject: "+emailmessage.Subject)==0) { hasSubjectHeader=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-Transfer-Encoding: quoted-printable")==0) { quotedPrintableParts++; } if (line.IndexOf("X-Mailer: DotNetOpenMail") == 0) { hasDefaultXMailerHeader=true; } if (line.IndexOf("X-MyHeader1: my header number one") == 0) { hasCustomHeader1=true; } if (line.IndexOf("X-MyHeader2: my header number two") == 0) { hasCustomHeader2=true; } // log.Debug("Line "+i+": "+line); } Assert.IsTrue(hasToHeader, "Missing TO Header"); Assert.IsTrue(hasFromHeader, "Missing FROM Header"); Assert.IsTrue(hasSubjectHeader, "Missing Subject Header"); Assert.IsTrue(hasMimeVersion, "Missing Mime Version header"); Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting"); Assert.IsTrue(hasPlainText, "Missing Plain Text"); Assert.IsTrue(hasHtmlText, "Missing HTML"); Assert.IsTrue(hasDefaultXMailerHeader, "Missing X-Mailer Header"); Assert.IsTrue(hasCustomHeader1, "Missing Custom Header 1"); Assert.IsTrue(hasCustomHeader2, "Missing Custom Header 2"); Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found "+quotedPrintableParts); }
public void TestLongSubjectEncoded() { EmailMessage emailmessage=new EmailMessage(); emailmessage.FromAddress=TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.AddCcAddress(TestAddressHelper.GetToAddress()); emailmessage.AddBccAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject="Join our Group's Fundraising Efforts é test test test Gulf Little League"; emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable; emailmessage.XMailer="NUnit Test Mailer"; emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart."); emailmessage.HtmlPart=new HtmlAttachment("<html><body>This<br>\r\nis the<br>\r\n<strong>HTML</strong><br>\r\npart.</body></html>"); String content=emailmessage.ToDataString(); emailmessage.Send(_smtpserver); }
public void TestHeaders() { EmailMessage emailmessage=new EmailMessage(); emailmessage.FromAddress=TestAddressHelper.GetFromAddress(); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.AddToAddress(TestAddressHelper.GetToAddress()); emailmessage.AddCcAddress(TestAddressHelper.GetToAddress()); emailmessage.AddCcAddress(TestAddressHelper.GetToAddress()); emailmessage.AddBccAddress(TestAddressHelper.GetToAddress()); emailmessage.AddBccAddress(TestAddressHelper.GetToAddress()); emailmessage.Subject="Test Headers"; emailmessage.XMailer="NUnit Test Mailer"; emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart."); emailmessage.HtmlPart=new HtmlAttachment("<html><body>This<br>\r\nis the<br>\r\n<strong>HTML</strong><br>\r\npart.</body></html>"); String content=emailmessage.ToDataString(); StringReader sr=new StringReader(content); int i=0; String line=null; bool hasToHeader=false; bool hasFromHeader=false; bool hasSubjectHeader=false; bool hasBccHeader=false; bool hasCcHeader=false; bool hasXMailerHeader=false; String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">"; while ((line=sr.ReadLine())!=null) { i++; if (line.IndexOf("To: "+expectedToAddress+", "+expectedToAddress)==0) { hasToHeader=true; } if (line.IndexOf("Cc: "+expectedToAddress+", "+expectedToAddress)==0) { hasCcHeader=true; } if (line.IndexOf("Bcc: "+expectedToAddress+", "+expectedToAddress)==0) { hasBccHeader=true; } if (line.IndexOf("From: "+emailmessage.FromAddress.ToString())==0) { hasFromHeader=true; } if (line.IndexOf("Subject: "+emailmessage.Subject)==0) { hasSubjectHeader=true; } if (line.IndexOf("X-Mailer: NUnit Test Mailer")==0) { hasXMailerHeader=true; } } Assert.IsTrue(hasToHeader, "Missing TO Header"); Assert.IsTrue(hasFromHeader, "Missing FROM Header"); Assert.IsTrue(hasSubjectHeader, "Missing Subject Header"); Assert.IsTrue(hasCcHeader, "Missing Cc Header"); Assert.IsFalse(hasBccHeader, "Bcc Header Shouldn't appear"); Assert.IsTrue(hasXMailerHeader, "Missing XMailer Header"); //emailmessage.Send(_smtpserver); }
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 void TestJapaneseHtmlAndTextQPEncoding() { //SmtpServer smtpserver=TestAddressHelper.GetSmtpServer(); System.Text.Encoding encoding=System.Text.Encoding.GetEncoding("Shift_JIS"); EmailAddress japanesefromaddress=new EmailAddress(TestAddressHelper.GetFromAddress().Email, "日本語", EncodingType.QuotedPrintable, encoding); EmailAddress japanesetoaddress=new EmailAddress(TestAddressHelper.GetToAddress().Email, "日本語", EncodingType.QuotedPrintable, encoding); EmailMessage emailmessage=new EmailMessage(); emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable; System.Text.Encoding jencoding=System.Text.Encoding.GetEncoding("iso-2022-jp"); //emailmessage.HeaderCharSet=System.Text.Encoding.GetEncoding("Shift_JIS"); emailmessage.HeaderCharSet=jencoding; log.Debug("ENCODING IS "+jencoding.EncodingName); log.Debug("IN HEADER:"+jencoding.HeaderName); log.Debug("IN BODY:"+jencoding.BodyName); log.Debug("CODE PAGE:"+jencoding.CodePage); log.Debug("WebName:"+jencoding.WebName); log.Debug("WINDOWS CODE PAGE:"+jencoding.WindowsCodePage); emailmessage.FromAddress=japanesefromaddress; emailmessage.AddToAddress(japanesetoaddress); emailmessage.Subject="日本語 - Quoted Printable"; emailmessage.TextPart=new TextAttachment("東京、日本語"); //emailmessage.TextPart.CharSet+AD0AIg-Shift_JIS+ACIAOw- emailmessage.TextPart.CharSet=jencoding; emailmessage.TextPart.Encoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable; emailmessage.HtmlPart=new HtmlAttachment("<html><body>東京、日本語</body></html>"); //emailmessage.HtmlPart.CharSet+AD0AIg-Shift_JIS+ACIAOw- emailmessage.HtmlPart.CharSet=jencoding; emailmessage.HtmlPart.Encoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable; emailmessage.Send(_smtpserver); String content=emailmessage.ToDataString(); StringReader sr=new StringReader(content); log.Debug(content); int i=0; String line=null; bool toHeaderEncoded=false; bool fromHeaderEncoded=false; bool subjectHeaderEncoded=false; bool htmlEncoded=false; bool textEncoded=false; bool hasPlainText=false; bool hasHtmlText=false; while ((line=sr.ReadLine())!=null) { i++; //log.Debug("FOUND +ACIAKw-line); if (line.IndexOf("To: =?iso-2022-jp?Q?=93=FA=96{=8C=EA?= <"+japanesetoaddress.Email+">")==0) { toHeaderEncoded=true; } if (line.IndexOf("From") == 0) { String expectedfrom="From: =?iso-2022-jp?Q?=93=FA=96{=8C=EA?= <"+japanesefromaddress.Email+">"; if (line.IndexOf(expectedfrom)== 0) { fromHeaderEncoded=true; } } if (line.IndexOf("Subject: =?iso-2022-jp?Q?=1B$BF|K\\8l=1B(B=20-=20Quoted=20Printable?=")==0) { subjectHeaderEncoded=true; } if (line.IndexOf("<html><body>=1B$BEl5~!\"F|K\\8l=1B(B</body></html>")==0) { //<html><body>=67=71=4E=AC=30=01=65=E5=67=2C=8A=9E</body></html> htmlEncoded=true; } if (line.IndexOf("=1B$BEl5~!\"F|K\\8l=1B(B")==0) { textEncoded=true; } if (line.IndexOf("Content-Type: text/plain")==0) { hasPlainText=true; } if (line.IndexOf("Content-Type: text/html")==0) { hasHtmlText=true; } if (line.IndexOf("X-Mailer: DotNetOpenMail " + VersionInfo.GetInstance().ToString())==0) { //hasDefaultXMailerHeader=true; } if (line.IndexOf("X-MyHeader1: my header number one") == 0) { //hasCustomHeader1=true; } if (line.IndexOf("X-MyHeader2: my header number two") == 0) { //hasCustomHeader2=true; } // log.Debug("Line +ACIAKw-i+-": +ACIAKw-line); } Assert.IsTrue(toHeaderEncoded, "To Header not encoded"); Assert.IsTrue(fromHeaderEncoded, "From Header not encoded"); Assert.IsTrue(subjectHeaderEncoded, "Subject Header not encoded"); //Assert.IsTrue(hasSubjectHeader, "Missing Subject Header"); //Assert.IsTrue(hasMimeVersion, "Missing Mime Version header"); //Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting"); Assert.IsTrue(hasPlainText, "Missing Plain Text"); Assert.IsTrue(hasHtmlText, "Missing HTML"); Assert.IsTrue(htmlEncoded, "HTML Not encoded"); Assert.IsTrue(textEncoded, "Text Not encoded"); //Assert.IsTrue(hasDefaultXMailerHeader, "Missing X-Mailer Header"); //Assert.IsTrue(hasCustomHeader1, "Missing Custom Header 1"); //Assert.IsTrue(hasCustomHeader2, "Missing Custom Header 2"); //Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found +ACIAKw-quotedPrintableParts); }
public void TestJapaneseHtmlAndTextB64Encoding() { //SmtpServer smtpserver=TestAddressHelper.GetSmtpServer(); System.Text.Encoding encoding=System.Text.Encoding.GetEncoding("Shift_JIS"); EmailAddress japanesefromaddress=new EmailAddress(TestAddressHelper.GetFromAddress().Email, "日本語", EncodingType.Base64, encoding); EmailAddress japanesetoaddress=new EmailAddress(TestAddressHelper.GetToAddress().Email, "日本語", EncodingType.Base64, encoding); EmailMessage emailmessage=new EmailMessage(); emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.Base64; emailmessage.HeaderCharSet=System.Text.Encoding.GetEncoding("Shift_JIS"); emailmessage.FromAddress=japanesefromaddress; emailmessage.AddToAddress(japanesetoaddress); emailmessage.Subject="日本語 - Base 64"; emailmessage.TextPart=new TextAttachment("東京、日本語"); emailmessage.TextPart.CharSet=System.Text.Encoding.GetEncoding("Shift_JIS"); emailmessage.TextPart.Encoding=DotNetOpenMail.Encoding.EncodingType.Base64; emailmessage.HtmlPart=new HtmlAttachment("<html><body>東京、日本語</body></html>"); emailmessage.HtmlPart.CharSet=System.Text.Encoding.GetEncoding("Shift_JIS"); emailmessage.HtmlPart.Encoding=DotNetOpenMail.Encoding.EncodingType.Base64; emailmessage.Send(_smtpserver); String content=emailmessage.ToDataString(); StringReader sr=new StringReader(content); log.Debug(content); int i=0; String line=null; bool toHeaderEncoded=false; bool fromHeaderEncoded=false; bool subjectHeaderEncoded=false; //bool htmlEncoded=false; //bool textEncoded=false; bool hasPlainText=false; bool hasHtmlText=false; while ((line=sr.ReadLine())!=null) { i++; //log.Debug("FOUND +ACIAKw-line); if (line.IndexOf("To: =?iso-2022-jp?B?k/qWe4zq?= <"+japanesetoaddress.Email+">")==0) { toHeaderEncoded=true; } if (line.IndexOf("From") == 0) { String expectedfrom="From: =?iso-2022-jp?B?k/qWe4zq?= <"+japanesefromaddress.Email+">"; if (line.IndexOf(expectedfrom)== 0) { fromHeaderEncoded=true; } } if (line.IndexOf("Subject: =?iso-2022-jp?B?k/qWe4zqIC0gQmFzZSA2NA==?=")==0) { subjectHeaderEncoded=true; } if (line.IndexOf("Content-Type: multipart/alternative")==0) { //htmlEncoded=true; } if (line.IndexOf("Content-Type: text/html")==0) { hasHtmlText=true; } if (line.IndexOf("Content-Type: text/plain")==0) { hasPlainText=true; } if (line.IndexOf("X-Mailer: DotNetOpenMail " + VersionInfo.GetInstance().ToString())==0) { //hasDefaultXMailerHeader=true; } if (line.IndexOf("X-MyHeader1: my header number one") == 0) { //hasCustomHeader1=true; } if (line.IndexOf("X-MyHeader2: my header number two") == 0) { //hasCustomHeader2=true; } // log.Debug("Line +ACIAKw-i+-": +ACIAKw-line); } Assert.IsTrue(toHeaderEncoded, "To Header not encoded"); Assert.IsTrue(fromHeaderEncoded, "From Header not encoded"); Assert.IsTrue(subjectHeaderEncoded, "Subject Header not encoded"); //Assert.IsTrue(hasSubjectHeader, "Missing Subject Header"); //Assert.IsTrue(hasMimeVersion, "Missing Mime Version header"); //Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting"); Assert.IsTrue(hasPlainText, "Missing Plain Text"); Assert.IsTrue(hasHtmlText, "Missing HTML"); //Assert.IsTrue(htmlEncoded, "HTML Not encoded"); //Assert.IsTrue(textEncoded, "Text Not encoded"); //Assert.IsTrue(hasDefaultXMailerHeader, "Missing X-Mailer Header"); //Assert.IsTrue(hasCustomHeader1, "Missing Custom Header 1"); //Assert.IsTrue(hasCustomHeader2, "Missing Custom Header 2"); //Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found +ACIAKw-quotedPrintableParts); }