Control to Display Binary Images in ASP.NET
Introduction
The RbmBinaryImage control will help you display images directly from your database. You could bind the Image field directly to the ImageContent property, also you could specify whether you want the display to be as a thumbnail or not and provide the thumbnail size.
Using the RbmBinaryImage Control
<httpHandlers> <add verb="GET" path="__RbmImageHandler.rbm" type="RbmControls.RbmImageHandler" /> </httpHandlers>
<%@ Register Assembly="RbmControls" Namespace="RbmControls" TagPrefix="Rbm" %>
you could either bind the control directly in the ImageContent Property, Also specify whether to display the image as a thumbnail. and specify an image to display when the ImageContent is empty
an alternative is to do that by code
RbmBinaryImage1.ImageContent = FileUpload1.FileBytes;
Using the Code
The Imagecontent Property Retrieves and store the image bytes in the ViewState also if the DisplayThumbnail property is set to true then it retrieves the thumbnail of the image
public byte[] ImageContent
{
get
{
byte[] imageBytes = ViewState["ImageContent"] as byte[];
if (!DisplayThumbnail)
return (imageBytes == null) ? null : imageBytes;
else if (imageBytes != null)
{
byte[] bytes = CreateThumb();
return bytes;
}
else
return null;
}
set
{
ViewState["ImageContent"] = value;
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (DesignMode)
return;
if (ImageContent != null)
{
if(string.IsNullOrEmpty(CacheKey))
CacheKey = "Rbm" + System.DateTime.Now.Ticks;
ImageUrl = String.Format("~/__RbmImageHandler.rbm?MimeType={0}&EnableCaching={1}&ImageContent={2}",
MimeType, EnableCachinge ? "1" : "0", CacheKey);
if(this.Context.Cache[CacheKey] == null)
this.Context.Cache[CacheKey] = ImageContent;
}
else if (ImageUrl == "" || ImageUrl == null)
{
ImageUrl = EmptyImageUrl;
}
}
public void ProcessRequest(HttpContext context)
{
#region Caching Properties
string cacheKey = context.Request["ImageContent"];
if (String.IsNullOrEmpty(cacheKey))
return;
bool enableCaching = false;
if (!String.IsNullOrEmpty(context.Request["EnableCaching"]))
Boolean.TryParse(context.Request["EnableCaching"], out enableCaching);
#endregion
#region Image Properties
string mimeType = context.Request["MimeType"];
if (string.IsNullOrEmpty(mimeType))
mimeType = "image/jpeg";
byte []imageData = context.Cache[cacheKey] as byte[];
#endregion
if (!enableCaching)
context.Cache.Remove(cacheKey);
context.Response.ContentType = mimeType;
context.Response.OutputStream.Write(imageData, 0, imageData.Length);
}
Share your Thoughts
If you liked the control or have any comments on it or features you want to place in it kindly share your thoughts here
Building your own Mail Client using C#
Introduction
The code here is written under the common creativity license you could download the project from the link above or clicking on the next link IMailPlus.zip It has been enspired from Rodolfo Finochietti POP3 Project I have redesigned it and implement it and added to it SSL Support and optimized the design so that you could easily add other email clients below you will find a screen shot from the created demo application 
This post will go with you step by step towards building your own Mail Client using C#, First to start I’ll start you need to first know the protocol you will be retrieving emails with I will discuss here the POP3 Protocol. The POP3 Protocols an application-layer Internet standard protocol along with IMAP4 they are the two most prevalent Internet standard protocols for e-mail retrieval. To understand how the protocol works lets examine a (Server – Client) communication example. First the server is waiting for connection from any client
S: <wait for connection on TCP port 110> The Client opens a TCP Connection with the server C: <open connection> The Server then response with the +OK Ready State S: +OK POP3 server ready <1123.69123552@mail.ramymostafa.com> Then we authenticate using the username and password C: USER username_here S: +OK send PASS C: PASS password S: +OK Welcome. C: LIST S: +OK 2 messages (320 octets) S: 1 120 S: 2 200 S: . C: RETR 1 S: +OK 120 octets S: <the POP3 server sends message 1> S: . C: DELE 1 S: +OK message 1 deleted C: RETR 2 S: +OK 200 octets S: <the POP3 server sends message 2> The QUIT command will remove retrieved messages from the server and sign off. C: QUIT S: +OK dewey POP3 server signing off (maildrop empty) C: <close connection> S: <wait for next connection>
Designing the Mail Client
Now that we know how the POP3 protocol work we could start building our Mail Client. But before that let’s discuss the structure of an e-mail message.
![]() |
A mail message consists of
|
So, Basically the email client should first connect to the server and then authenticate itself with the server then start to exchange the protocol messages with the server and parse the replies to extract from it the message data or the reply status itself etc…, It should be able also to retrieve the emails from the server and parse the message retrieve to extract from it the MailMessage Information.
Implementing the Email Client
Connect the Client To The Server using the given username, password and server it takes as parameters the Mail Server Domain Reference, The Mail Account User Name and Password.
public override void Connect(string server, string UserName, string Password)
{
try
{
if (_isConnected)
{
return;
}
if (!UseSSL)
{
Connect(server, PortNumber);
string response = Response();
if (!response.Trim().StartsWith("+OK"))
{
//TODO: Raise Error Event
}
else
{
ExecuteCommand("USER", UserName);
ExecuteCommand("PASS", Password);
}
_isConnected = true;
}
else
{
byte[] bts;
int res;
string responseString = "";
ResponseList.Clear();
Connect(server, PortNumber);
inStream = new SslStream(this.GetStream(), false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
new LocalCertificateSelectionCallback(SelectLocalCertificate));
inStream.AuthenticateAsClient(server);
bts = new byte[1024];
res = inStream.Read(bts, 0, bts.Length);
ResponseList.Add(Encoding.ASCII.GetString(bts, 0, res));
responseString = ExecuteCommand("USER", UserName);
ResponseList.Add(responseString);
responseString = ExecuteCommand("PASS", Password);
ResponseList.Add(responseString);
if (!responseString.Trim().StartsWith("+OK"))
{
//TODO: Raise Error Event
}
else
_isConnected = true;
}
}
catch (Exception ex)
{
//TODO: Raise Error Event
}
}
The GetMailList Method first Execute the Command List then it Retrieves a MetaMessageInfo from the Response String here the response string is parsed to retrieve Meta Information of the emails on the server like Number of Messages, and Messages Length
List result = new List();
string responseString = ExecuteCommand("LIST");
MetaMessageInfo info = new MetaMessageInfo(MailClientType.POP3,responseString);
Here we make a loop to retrieve messages until we retrieve all messages using the number of messages in the POPMessage constructor it extracts all the message info from the string to fill its attributes
for (int i = 1; i <= info.NumberOfMessages; i++)
{
responseString = ExecuteCommand("RETR", i.ToString(), true);
POPMessage message = new POPMessage(responseString);
message.Number = i.ToString();
message.Retrieved = true;
if (message.MessageBoundaryId != null)
result.Add(message);
}
The Method that prase the response string to retrieve info from the Email is the LoadMethod
public override void Load(string messageString)
{
string message = messageString.Replace("+OK message follows", "");
Message = message;
string messageIdPure = MessageBoundaryId;
//the start of the message body starts from MessageBoundaryId ex --- ID --- Here I extract the Message body from the complete
//response string
int bodyIndex = message.IndexOf("--" + messageIdPure, StringComparison.CurrentCultureIgnoreCase);
int messageLength = message.Length - bodyIndex;
if (bodyIndex < 0)
return;
string bodyString = message.Substring(bodyIndex, messageLength);
string[] splitMessageOptions = new string[1];
splitMessageOptions[0] = "--" + messageIdPure;
//Here I Split with the message boundary Id to seperate the Text and HTML Messages
string[] messages = bodyString.Split(splitMessageOptions, StringSplitOptions.RemoveEmptyEntries);
//The Get Message Body Method retrieves the HTML, and Text Messages from the messages array
GetMessageBody(messages);
}
to extract a header property I use
_from = GetHeaderValue(EmailHeaders.From);
Where the EmailHeaders.From is an enumerator with the headers and the GetHeaderValue Method extracts the required header value from the complete message string.
IMailPlusLibrary Usage
to use the library it’s simple all you need to to do is to do the below code
POPEmailClient popClient = new POPEmailClient(); popClient.UseSSL = account.UseSSL; popClient.PortNumber = Convert.ToInt32(account.PortNumber); popClient.Connect(account.Server, account.UserName, account.Password); account.CurrentAccountMails = popClient.GetMailList();
Share Your Thoughts
Finally I hope that this project would be of a great help for you. Please feel free to contact me regarding anything you don’t understand in the code yo will find the library code fully XML documented. Also if you have any cool ideas or updates for it please share your thoughts here.
Parsing Markup to Represent it as Objects
An interesting problem is parsing a Markup Document to represent it as an Object This would be very helpful for ex. if you want to generate valid Markup Code ex: Placing quotes in HTML attribute values and placing the end tags also another helpful thing for it is to replace some element section traverse through the object model for making whatever needed logic would be much easier and usable in an Object Model Here I place a project I made that takes any markup and turn it in form of a MarkupDocument with elements and attributes,content etc. Below is a screenshot for a representation or a markup in a tree format in which I used the MarkupDocument to build the Tree
The Project could be downloaded from http://www.ramymostafa.com/wp-content/MarkuptoObject/SampleProjects.zip
Code Highlight
Here is the class Diagram for the Markup Representation
The MarkupDocument Class contains the whole document consisting of ChildElements and Content and Method for Parsing the Markup String Given to the object representation
The ToString Method is overrided in all classes to provide the Markup of the represented Element in a text format
Below is the Method I made for parsing the Markup its a Static Method that takes a MarkupDocument and a markup string and loads in the document the parsed string Here I use regular expressions for parsing the documents like retrieving the element name the attributes etc.
public static void ParseString(MarkupDocument document, string markup)
{
List result = new List();
document.ChildElements.Clear();
Regex r;
Match m;
string[] markups = markup.Split('<');
MarkupElement parentElement = null;
foreach (string str in markups)
{
string workingMarkup = str;
if (str.Trim().Length == 0)
continue;
#region Closing Tag
//Check if this is a closing element or not
if (workingMarkup.TrimStart().StartsWith("/"))
{
//Check if a parent element exists or not
if (parentElement != null)
{
//Navigate up one level
if (document.IsSpecial(workingMarkup,">",1))
{
document.InsertContent(parentElement, workingMarkup, ">", 1);
continue;
}
parentElement = parentElement.ParentElement;
//Insert Markup in the parentElement content
document.InsertContent(parentElement, workingMarkup, ">", 1);
}
else
{
if (document.IsSpecial(workingMarkup, ">", 1))
{
document.InsertContent(workingMarkup, ">", 1);
continue;
}
//Adding an Element in case a closing tag in the beginning o the document
#region Adding The Element
r = new Regex("^\\s*\\w*", RegexOptions.IgnoreCase
| RegexOptions.Compiled);
m = r.Match(workingMarkup);
if (m.Success && m.Groups[0].Value.Trim().Length > 0)
{
MarkupElement initElement = new MarkupElement();
initElement.ParentElement = parentElement;
initElement.Name = m.Groups[0].Value;
initElement.Document = document;
initElement.IsSelfClosed = true;
document.ChildElements.Add(initElement);
}
#endregion
//Insert Markup in the document content
document.InsertContent(workingMarkup, ">", 1);
}
continue;
}
#endregion
MarkupElement currentElement = new MarkupElement();
currentElement.Document = document;
#region Element Name
currentElement.ParentElement = parentElement;
//This regular expression will extract the element name from the tag.
r = new Regex("^\\s*\\w*", RegexOptions.IgnoreCase | RegexOptions.Compiled);
m = r.Match(workingMarkup);
if (m.Success && m.Groups[0].Value.Trim().Length > 0)
currentElement.Name = m.Groups[0].Value;
else
continue;
workingMarkup = workingMarkup.Replace(currentElement.Name, "");
#endregion
#region Retrieve Element Attributes
//This regular expression will extract an attribute with its value at a time
r = new Regex("\\S*\\s*=\\s*\\S*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
for (m = r.Match(workingMarkup); m.Success; m = m.NextMatch())
{
string tag = m.Groups[0].Value;
string[] tagSplit = tag.Split('=');
MarkupAttribute attribute = new MarkupAttribute();
attribute.Name = tagSplit[0];
attribute.Value = tagSplit[1];
currentElement.Attributes.Add(attribute);
}
#endregion
//Setting the element parent
currentElement.ParentElement = parentElement;
#region Add Element
if (parentElement == null)
document.ChildElements.Add(currentElement);
else
parentElement.ChildElements.Add(currentElement);
#endregion
#region Add Content
if (!str.Contains("/>"))
{
if (!document.SpecialElements.Contains(currentElement.Name))
{
parentElement = currentElement;
document.InsertContent(currentElement, workingMarkup, ">", 1);
}
else if (parentElement != null)
{
document.InsertContent(parentElement, workingMarkup, ">", 1);
}
else
{
document.InsertContent(workingMarkup, ">", 1);
}
}
else
{
currentElement.IsSelfClosed = true;
document.InsertContent(parentElement, workingMarkup, "/>", 2);
}
#endregion
}
}
Ok now lets assume you know that there are some special Markup Elements that are meant to be as single elements all you have to do is to add them to the SpecialElements List in the document object
MarkupLibrary.MarkupDocument document = new MarkupLibrary.MarkupDocument();
document.SpecialElements.Add("br");
document.SpecialElements.Add("hr");
document.SpecialElements.Add("img");
To Load the document with the Markup string call the Load Method
document.Load(markup);
Finally I hope That this would help you to create your Object Model from a Markup Representation
The Project could be downloaded from http://www.ramymostafa.com/wp-content/MarkuptoObject/SampleProjects.zip
Creating a Movie Database Application with ASP.NET MVC
Hi a nice demonstration that I liked so I thought of highlighting it here by Stephen Walther he builds an entire ASP.NET MVC application from start to finish.
Hope you enjoy it
Building your own Java Script Editor (Part 3 of 3)
In this last part I will discuss how to use the editor first you need to initalize an object from the editor class and give it the div id that you want to make it as an editor but to initialize it you need to put it this way
var editor;
RBM.AddListener(window,'load',RbmInit);
function RbmInit(){
editor = new RBMEditor.Editor('oDiv')
}
now to call a command simply type the following, you could change the BOLD Command with any of the commands listed in the EditorCommands which you could find it in the code or any other added command in it.
editor.ExecuteCommand(RBMEditor.EditorCommands.BOLD);
Finally hope that those post would help you to start your way in building your own editor. please feel free to ask me if you have any questions about more advanced techniques or more features like how to add a link , image etc.. I will try later to make seperate posts for how to enhance the editor with such commands.









