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());
		}
示例#2
0
		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;
		}
		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);


		}