Click here to Skip to main content
15,888,351 members
Articles / Web Development / IIS
Article

Easy SMTP Mail Using ASP.NET 2.0

Rate me:
Please Sign up or sign in to vote.
4.74/5 (38 votes)
4 Oct 200611 min read 511.4K   9.4K   188   80
The article addresses two topics: sending an email message to a standard email account, and sending an SMS message to a cell phone or pager.

Introduction

The article addresses two topics: sending an email message to a standard email account, and sending an SMS message to a cell phone or pager. The approach uses the SMTP client contained in System.Net to accomplish both types of message submittal, and all messages are sent from ASP.NET 2.0 ASPX pages.

The SMTP email portion application will demonstrate the following:

  • Using SMTP to configure and send email messages
  • Adding ‘CC’ addresses as message recipients
  • Adding attachments to a message

The SMS portion of the email application will demonstrate the following:

  • Passing standard email messages through the carrier to deliver SMS messages to the target.

In addition to discussing the small bit of code necessary to send these messages, the document will address the primary configuration requirements needed to successfully send messages through an ASP.NET 2.0 based website on an IIS server.

In order to use this demonstration, you should have an instance of IIS installed on your development machine, you should have Visual Studio 2005 installed, and you should have the optional SMTP mail server installed in your local IIS instance.

Image 1

Figure 1: The main page of the demonstration application

Getting Started

Unzip the attached file; in it, you will find a solution containing a web site project entitled, “RealMail”. Store the unzipped file onto your system, and create a virtual directory pointing to the web application from IIS. Then, open the solution in Visual Studio 2005. Looking at the Solution Explorer, you will see the files indicated in figure 2.

Image 2

Figure 2: RealMail web application in the Solution Explorer

There are two ASPX pages in the solution, the first (default.aspx) is used to send a standard message to a recipient using the .NET 2.0 SMTP class library; the second page is used to send an SMS message to a cellular telephone or messaging pager through SMTP.

IIS Configuration

Your local IIS instance has to be properly configured in order to successfully send an email message through its SMTP mail server. Even if you install IIS, the SMTP mail server installation is optional, and must be explicitly added to the installation. If you are not sure whether or not the SMTP mail server is installed, open up the IIS control panel and check for the installation; if it is installed, you will see a reference to the Default SMTP Virtual Server in the tree view (Figure 3):

Image 3

Figure 3: Default SMTP Virtual Server installed

If the server is not installed, you will need to use the “Add and Remove Windows Components” function in the “Add and Remove Programs” control panel to add the SMTP server to your IIS installation. If you need to do this additional installation, once you’ve opened “Add and Remove Windows Components”, click on “Internet Information Services (IIS)” to highlight it, and then click on the “Details” button (Figure 4). This will open an IIS dialog; examine this dialog to locate “SMTP Service”, and click on it to place a check mark on the box (Figure 5). Once this item has been checked, click on the “OK” button to install the SMTP server.

Image 4

Figure 4: Windows Components Wizard

Image 5

Figure 5: Adding the SMTP Service to IIS

Once the default SMTP server has been installed or verified, you can now configure it to send email. In order to configure the SMTP server, open the IIS control panel, locate the default SMTP server icon in the tree view, and select and right click the icon. Once the context menu has been displayed, locate “Properties”, and click on it to open the Properties menu. Once the Default SMTP Virtual Server Properties dialog is displayed, click on the “Access” tab (Figure 6):

Image 6

Figure 6: SMTP Properties dialog

Select the “Authentication” button to display the authentication options (Figure 7):

Image 7

Figure 7: Authentication options

Make sure that the Anonymous access option is checked, and that all other options are unchecked; in some instances, you may wish to use the other options, but in most cases involving a public website, this is the option you’d want. Once you have verified this setting, click “OK” to close this dialog.

Back to the “Access” tab, locate and click on the “Relay” button to display the relay options. Note that the radio button for “Only the list below” is selected, and that the local host IP address has been added to the list of computers permitted to relay through the SMTP server. Naturally, this is OK for a development machine, but in deployment, you would use the actual IP address of the web server. If no IP addresses are shown in the list, click on the “Add” button and add the IP address. Once finished, click on the “OK” button to accept the changes and to dismiss the dialog (Figure 8).

Image 8

Figure 8: Relay Restrictions dialog

Next, select the “Delivery” tab from the SMTP Server Properties dialog (Figure 9):

Image 9

Figure 9: Delivery Options dialog

From this dialog, select the “Advanced” button to reveal the advanced options dialog (Figure 10):

Image 10

Figure 10: Advanced Delivery dialog

From this dialog, there are two points to make: first, the “Fully qualified domain name” property should be pre-populated, you may click on the “Check DNS” button to validate the setting. The next option is probably the most critical item for the whole shooting match; the Smart Host property has to be set to point to a valid SMTP mail server that will permit you to relay mail. For most cases, you will key in the name of your internet provider’s default SMTP mail server; the address is likely to be in the format of “mail.something.com” where “something” is the internet provider’s domain name. There are two easy ways to get this: one is, if you are using Outlook, open up Outlook and pull up the information on your email account; the mail server will be listed there. The second option is to guess, and you can qualify your guess by pinging the server.

If your internet provider’s name is “foxtrox”, try pinging mail.foxtrot.com; if you get a response there, that is probably the one to use. If that does not work, contact your administrator and ask them for the information on the SMTP mail server; don’t try to plug in an Exchange server, there will likely be an SMTP mail server out there even if your company is using an Exchange server. The only other hurdle is to make sure that the SMTP mail server will allow you to relay, and again, you may need to talk to the administrator if the server bounces your mail. Once these settings are made, click on the “OK” button to save the settings and close the dialog.

The last thing to do is to check the security tab to make sure the accounts are properly configured; once done, your security settings should look something like this (Figure 11):

Image 11

Figure 11: Security settings for the SMTP server

Once everything is setup, click on the “OK” button to save the settings and to close the Default SMTP Virtual Server Properties dialog.

The Code: Sending an Email From an ASP.NET 2.0 Web Page

Open up the default.aspx code window from the included example project, and examine the code used to send an email.

Imports

Note that the project includes only three imports:

VB
Imports System
Imports System.Net
Imports System.Net.Mail

The application uses the System.NET.Mail libraries to format and send SMTP based email messages; these imports are required to run the project, and to send the email messages. This is also new to ASP.NET 2.0 and Visual Studio 2005.

Declarations

Within the declarations section at the beginning of the project, you will note a standard class declaration followed by a region called “Declarations”; within the Declarations region is a collection of variables used to contain information used in sending the mail:

VB
Partial Class _Default_
        Inherits System.Web.UI.Page

#Region "Declarations"
     ' message elements
    Private mMailServer As String
    Private mTo As String
    Private mFrom As String
    Private mMsg As String
    Private mSubject As String
    Private mCC As String
    Private mPort As Integer

#End Region

The Code

The first bit of code is a subroutine used to generate alerts; it has no bearing on the topic of sending messages, but I frequently use this code block whenever I want to generate an alert from a web page. The code is pretty simple. It merely places the JavaScript code necessary to define and display an alert box into the text field of a Label control, and then adds the control to the current page; since the Label will fire any JavaScript passed to it, as soon as the control is added to the page, the alert box will fire.

VB
Private Sub MessageBox(ByVal strMsg As String)

    ' generate a popup message using javascript alert function
    ' dumped into a label with the string argument passed in
    ' to supply the alert box text
    Dim lbl As New Label
    lbl.Text = "<script language="'javascript'">" & Environment.NewLine _
                & "window.alert(" & "'" & strMsg & "'" & ")</script>"

    ' add the label to the page to display the alert
    Page.Controls.Add(lbl)

End Sub

The only other bit of code in the application is the Send button’s Click event handler; this handler captures the user’s inputs from the page, uses those inputs to populate the message related variables, and then formats a message using the variable content. You may note that the server and port settings are extracted from the AppSettings contained in the web.config file.

When examining the code, note how the file attachment and the CC list is handled by the code contained in the Try-Catch block. If you wanted to add blind carbon copies (BCC recipients), you could add them in a manner similar to that applied to processing the standard CC list.

Here is the entire block of code:

VB
Protected Sub btnSend_Click(ByVal sender As Object, _
          ByVal e As System.EventArgs) Handles btnSend.Click

    'send message

    Dim strMsg As String
    strMsg = txtMessage.Text

    mTo = Trim(txtTo.Text)
    mFrom = Trim(txtFrom.Text)
    mSubject = Trim(txtSubject.Text)
    mMsg = Trim(txtMessage.Text)
    mMailServer = ConfigurationManager.AppSettings.Get("MyMailServer")
    mPort = ConfigurationManager.AppSettings.Get("MyMailServerPort")
    mCC = Trim(txtCC.Text)

    Try

        Dim message As New MailMessage(mFrom, mTo, mSubject, mMsg)

        If fileAttachments.HasFile Then
            Dim attached As New 
            Attachment(Trim(fileAttachments.PostedFile.FileName.ToString()))
            message.Attachments.Add(attached)
        End If

        If mCC <> "" Or mCC <> String.Empty Then
            Dim strCC() As String = Split(mCC, ";")
            Dim strThisCC As String
            For Each strThisCC In strCC
                message.CC.Add(Trim(strThisCC))
            Next
        End If


        Dim mySmtpClient As New SmtpClient(mMailServer, mPort)
        mySmtpClient.UseDefaultCredentials = True
        mySmtpClient.Send(message)

        MessageBox("The mail message has been sent to " & message.To.ToString())

    Catch ex As FormatException

        MessageBox("Format Exception: " & ex.Message)

    Catch ex As SmtpException

        MessageBox("SMTP Exception:  " & ex.Message)

    Catch ex As Exception

        MessageBox("General Exception:  " & ex.Message)

    End Try

End Sub

Within the Try-Catch block, note that format, SMTP, and general exceptions are trapped, and displayed to the user using the MessageBox subroutine at the beginning of the code block.

The Code: Sending an SMS Message Through ASP.NET 2.0

Open up the sendSmsMsg.aspx code window from the included example project, and examine the code used to send an SMS message as email.

Imports

Note that the project includes only three imports:

VB
Imports System
Imports System.Net
Imports System.Net.Mail

The application uses the System.NET.Mail libraries to format and send SMTP based email messages; these imports are required to run the project and to send the email based SMS messages.

Declarations

Within the declaration section at the beginning of the project, you will note a standard class declaration followed by a region called “Declarations”; within the Declarations region, is a collection of variables used to contain information used in sending the email based SMS messages:

VB
Partial Class sendSmsMsg _
        Inherits System.Web.UI.Page

#Region "Declarations"
     ' message elements
    Private mMailServer As String
    Private mTo As String
    Private mFrom As String
    Private mMsg As String
    Private mSubject As String
    Private mPort As Integer

#End Region

The Code

So far, you may have noticed that everything is the same up to this point; from this point on, things will continue to be similar, but there are a few interface and variable differences that make it possible to send SMS messages via the SMTP server.

The most interesting thing to note with regards to sending an SMS message is that you don’t have to do anything special. The carriers expose an interface through which you can send an email message (with some restrictions) to the cell phone subscriber, and the carrier will transmit that message as SMS to the subscriber.

In general, the important things to know are that the address of the subscriber is their ten digit cell number (area code and number) coupled with the carrier's specified address. This application includes a list of most of the US carriers and some off shore carriers as well. If you are located outside of the US, you may need to do a little research to find the proper address for your targeted carriers, and I should point out that some carriers do not support this interface.

In the page load event handler, I have populated a drop down list with the list of carriers:

VB
Protected Sub Page_Load(ByVal sender As Object, _
          ByVal e As System.EventArgs) Handles Me.Load

    ' Load the names of the common carriers 
    cboCarrier.Items.Add("@itelemigcelular.com.br")
    cboCarrier.Items.Add("@message.alltel.com")
    cboCarrier.Items.Add("@message.pioneerenidcellular.com")
    cboCarrier.Items.Add("@messaging.cellone-sf.com")
    cboCarrier.Items.Add("@messaging.centurytel.net")
    cboCarrier.Items.Add("@messaging.sprintpcs.com")
    cboCarrier.Items.Add("@mobile.att.net")
    cboCarrier.Items.Add("@mobile.cell1se.com")
    cboCarrier.Items.Add("@mobile.celloneusa.com")
    cboCarrier.Items.Add("@mobile.dobson.net")
    cboCarrier.Items.Add("@mobile.mycingular.com")
    cboCarrier.Items.Add("@mobile.mycingular.net")
    cboCarrier.Items.Add("@mobile.surewest.com")
    cboCarrier.Items.Add("@msg.acsalaska.com")
    cboCarrier.Items.Add("@msg.clearnet.com")
    cboCarrier.Items.Add("@msg.mactel.com")
    cboCarrier.Items.Add("@msg.myvzw.com")
    cboCarrier.Items.Add("@msg.telus.com")
    cboCarrier.Items.Add("@mycellular.com")
    cboCarrier.Items.Add("@mycingular.com")
    cboCarrier.Items.Add("@mycingular.net")
    cboCarrier.Items.Add("@mycingular.textmsg.com")
    cboCarrier.Items.Add("@o2.net.br")
    cboCarrier.Items.Add("@ondefor.com")
    cboCarrier.Items.Add("@pcs.rogers.com")
    cboCarrier.Items.Add("@personal-net.com.ar")
    cboCarrier.Items.Add("@personal.net.py")
    cboCarrier.Items.Add("@portafree.com")
    cboCarrier.Items.Add("@qwest.com")
    cboCarrier.Items.Add("@qwestmp.com")
    cboCarrier.Items.Add("@sbcemail.com")
    cboCarrier.Items.Add("@sms.bluecell.com")
    cboCarrier.Items.Add("@sms.cwjamaica.com")
    cboCarrier.Items.Add("@sms.edgewireless.com")
    cboCarrier.Items.Add("@sms.hickorytech.com")
    cboCarrier.Items.Add("@sms.net.nz")
    cboCarrier.Items.Add("@sms.pscel.com")
    cboCarrier.Items.Add("@smsc.vzpacifica.net")
    cboCarrier.Items.Add("@speedmemo.com")
    cboCarrier.Items.Add("@suncom1.com")
    cboCarrier.Items.Add("@sungram.com")
    cboCarrier.Items.Add("@telesurf.com.py")
    cboCarrier.Items.Add("@teletexto.rcp.net.pe")
    cboCarrier.Items.Add("@text.houstoncellular.net")
    cboCarrier.Items.Add("@text.telus.com")
    cboCarrier.Items.Add("@timnet.com")
    cboCarrier.Items.Add("@timnet.com.br")
    cboCarrier.Items.Add("@tms.suncom.com")
    cboCarrier.Items.Add("@tmomail.net")
    cboCarrier.Items.Add("@tsttmobile.co.tt")
    cboCarrier.Items.Add("@txt.bellmobility.ca")
    cboCarrier.Items.Add("@typetalk.ruralcellular.com")
    cboCarrier.Items.Add("@unistar.unifon.com.ar")
    cboCarrier.Items.Add("@uscc.textmsg.com")
    cboCarrier.Items.Add("@voicestream.net")
    cboCarrier.Items.Add("@vtext.com")
    cboCarrier.Items.Add("@wireless.bellsouth.com")

End Sub

When using the application, you will see this list of carriers in the area used to define the recipient’s address (see Figure 12):

Image 12

Figure 12: List of carriers used to address SMS recipients

The message contains the ‘To’ address, a ‘From’ address, a subject line, and the message body itself (which is limited to 140 characters in length).

Clicking the Send button will start the ball rolling by executing the following Click event handler:

VB
Protected Sub Button2_Click(ByVal sender As Object, _
          ByVal e As System.EventArgs) Handles Button2.Click

    'send message

    Dim strMsg As String
    strMsg = txtMessage.Text

    If strMsg.Length >= 140 Then
        strMsg = strMsg.Substring(1, 140)
    End If

    mTo = Trim(txtToNumber.Text) & _
          Trim(cboCarrier.SelectedItem.ToString())
    mFrom = Trim(txtFrom.Text)
    mSubject = Trim(txtSubject.Text)
    mMsg = Trim(txtMessage.Text)
    mMailServer = ConfigurationManager.AppSettings.Get("MyMailServer")
    mPort = ConfigurationManager.AppSettings.Get("MyMailServerPort")

    Try

        Dim message As New MailMessage(mFrom, mTo, mSubject, mmsg)
        Dim mySmtpClient As New SmtpClient(mMailServer, mPort)
        mySmtpClient.UseDefaultCredentials = True
        mySmtpClient.Send(message)

        MessageBox("The mail message has been sent to " & _
                    message.To.ToString())

    Catch ex As FormatException

        MessageBox("Format Exception: " & ex.Message)

    Catch ex As SmtpException

        MessageBox("SMTP Exception:  " & ex.Message)

    Catch ex As Exception

        MessageBox("General Exception:  " & ex.Message)

    End Try


End Sub

As you will quickly see, the code is the same with a couple of minor exceptions; one pertains to validating the size of the message to be less than 140 characters, and the other major exception is in how the address of the recipient is constructed.

Of course, it should go without saying that the recipient of the message is charged a fee for the transactions, and as tempting as it might be to set this up to loop a couple of thousand times and send “Happy Birthday” greetings to your ex-wife’s divorce attorney, don’t do it.

The rest of the code in this page is identical to the default page described earlier; that includes the code to generate the alerts; there is also a hyperlink on both pages that allows you to traverse back and forth between the pages.

Summary

The article and sample project were intended to demonstrate the approach used to send email messages using SMTP through .NET; the examples also attempted to describe the ease with which this approach could be used to send SMS messages to cell phone subscribers using the same techniques applied to sending standard email messages.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralAbout send mail without mail server User and password Pin
sanjay3010-Aug-09 0:59
sanjay3010-Aug-09 0:59 
GeneralFailure sending mail -Unable to connect to remote server Pin
saifkhan58323-Jul-09 4:59
saifkhan58323-Jul-09 4:59 
GeneralEmail haven't sent at all Pin
saifkhan58323-Jul-09 3:24
saifkhan58323-Jul-09 3:24 
GeneralRe: Email haven't sent at all Pin
vivek090822-Sep-10 20:00
vivek090822-Sep-10 20:00 
Generalfriend Pin
sasikalasengottaiyan18-Jun-09 21:03
sasikalasengottaiyan18-Jun-09 21:03 
Generalnot proper working Pin
amitmittal152197827-Apr-09 0:08
amitmittal152197827-Apr-09 0:08 
QuestionHow to receive mail from smtp to asp.net Pin
Valiyamattom5-Nov-08 19:41
Valiyamattom5-Nov-08 19:41 
Questioni want send a mail at the time of clickevent when we save the data. Pin
prateekfgiet19-Oct-08 22:28
prateekfgiet19-Oct-08 22:28 
'Using Statements @1-05405DBB
Imports System
Imports System.Collections
Imports System.Collections.Specialized
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Diagnostics
Imports System.Web
Imports System.IO
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Imports System.Web.Security
Imports System.Text.RegularExpressions
Imports System.Globalization
Imports Proactive2006
Imports Proactive2006.Data
Imports Proactive2006.Security
Imports Proactive2006.Configuration
Imports Proactive2006.Controls
'End Using Statements

Namespace [SupportRequests_maint] 'Namespace @1-B139F60F

'Forms Definition @1-F98992C3
Public Class [SupportRequests_maintPage]
Inherits System.Web.UI.Page
'End Forms Definition

'Forms Objects @1-4C6043DE
Protected Header As System.Web.UI.UserControl
Protected SupportRequestsData As SupportRequestsDataProvider
Protected SupportRequestsError As System.Web.UI.WebControls.PlaceHolder
Protected SupportRequestsHolder As System.Web.UI.HtmlControls.HtmlControl
Protected SupportRequestsErrorLabel As System.Web.UI.WebControls.Label
Protected SupportRequestsErrors As NameValueCollection = New NameValueCollection()
Protected SupportRequestsOperations As FormSupportedOperations
Protected SupportRequestsRequestDate As System.Web.UI.WebControls.TextBox
Protected SupportRequestsStatus As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsAutoUserID As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsLogin As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsFullName As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsLocation As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsDepartment As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsEmailAddr As System.Web.UI.WebControls.TextBox
Protected SupportRequestsPhone As System.Web.UI.WebControls.TextBox
Protected SupportRequestsCompanyID As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsRequestType As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsRequestCategory As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsSubject As System.Web.UI.WebControls.TextBox
Protected SupportRequestsDetails As System.Web.UI.WebControls.TextBox
Protected SupportRequestsSeverity As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsNeedByDate As System.Web.UI.WebControls.TextBox
Protected SupportRequestsDatePicker_NeedByDate As System.Web.UI.WebControls.PlaceHolder
Protected SupportRequestsDatePicker_NeedByDateName As String
Protected SupportRequestsDatePicker_NeedByDateDateControl As String
Protected SupportRequestsTakenBy As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsAssignedTo As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsCompletedBy As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsActionTaken As System.Web.UI.WebControls.TextBox
Protected SupportRequestsTimeToSolve As System.Web.UI.WebControls.TextBox
Protected SupportRequestsSolutionType As System.Web.UI.HtmlControls.HtmlSelect
Protected SupportRequestsDateCompleted As System.Web.UI.WebControls.TextBox
Protected SupportRequestsDatePicker_DateCompleted As System.Web.UI.WebControls.PlaceHolder
Protected SupportRequestsDatePicker_DateCompletedName As String
Protected SupportRequestsDatePicker_DateCompletedDateControl As String
Protected SupportRequestsIssueCost As System.Web.UI.WebControls.TextBox
Protected SupportRequestsButton_Insert As System.Web.UI.HtmlControls.HtmlInputImage
Protected SupportRequestsButton_Update As System.Web.UI.HtmlControls.HtmlInputImage
Protected SupportRequestsButton_Delete As System.Web.UI.HtmlControls.HtmlInputImage
Protected SupportRequestsButton_Cancel As System.Web.UI.HtmlControls.HtmlInputImage
Protected Footer As System.Web.UI.UserControl
Protected rm As System.Resources.ResourceManager
Protected HtmlFormClientId As String
Protected PageStyleName As String
Protected SupportRequests_maintContentMeta As String
Protected PageVariables As New NameValueCollection()
'End Forms Objects

'Page_Load Event @1-A2D2CF1E
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
'End Page_Load Event

'Page_Load Event BeforeIsPostBack @1-F01EBA72
Dim item As PageItem = PageItem.CreateFromHttpRequest()
If Not IsPostBack Then
Dim PageData As PageDataProvider = New PageDataProvider()
PageData.FillItem(item)
SupportRequestsShow()
End If
'End Page_Load Event BeforeIsPostBack

End Sub 'Page_Load Event tail @1-E31F8E2A

Protected Overrides Sub OnUnload(ByVal e As System.EventArgs) 'Page_Unload Event @1-D998A98F

End Sub 'Page_Unload Event tail @1-E31F8E2A

'Record Form SupportRequests Parameters @37-C37A6A12

Protected Sub SupportRequestsParameters()
Dim item As new SupportRequestsItem
Try
SupportRequestsData.UrlAutoReqID = IntegerParameter.GetParam(Request.QueryString("AutoReqID"))
Catch e As Exception
SupportRequestsErrors.Add("Parameters","Form Parameters: " + e.Message)
End Try
End Sub
'End Record Form SupportRequests Parameters

'Record Form SupportRequests Show method @37-D2389F24
Protected Sub SupportRequestsShow()
If SupportRequestsOperations.None Then
SupportRequestsHolder.Visible = False
Return
End If
Dim item As SupportRequestsItem = SupportRequestsItem.CreateFromHttpRequest()
Dim IsInsertMode As Boolean = Not SupportRequestsOperations.AllowRead
SupportRequestsErrors.Add(item.errors)
If SupportRequestsErrors.Count > 0 Then
SupportRequestsShowErrors()
Return
End If
'End Record Form SupportRequests Show method

'Record Form SupportRequests BeforeShow tail @37-BB16E624
SupportRequestsParameters()
SupportRequestsData.FillItem(item, IsInsertMode)
SupportRequestsHolder.DataBind()
SupportRequestsButton_Insert.Visible=IsInsertMode AndAlso SupportRequestsOperations.AllowInsert
SupportRequestsButton_Update.Visible=Not (IsInsertMode) AndAlso SupportRequestsOperations.AllowUpdate
SupportRequestsButton_Delete.Visible=Not (IsInsertMode) AndAlso SupportRequestsOperations.AllowDelete
SupportRequestsRequestDate.Text=item.RequestDate.GetFormattedValue()
SupportRequestsStatus.Items.Add(new ListItem("Select Value",""))
SupportRequestsStatus.Items(0).Selected = True
item.StatusItems.SetSelection(item.Status.GetFormattedValue())
If Not item.StatusItems.GetSelectedItem() Is Nothing Then
SupportRequestsStatus.SelectedIndex = -1
End If
item.StatusItems.CopyTo(SupportRequestsStatus.Items)
SupportRequestsAutoUserID.Items.Add(new ListItem("Select Value",""))
SupportRequestsAutoUserID.Items(0).Selected = True
item.AutoUserIDItems.SetSelection(item.AutoUserID.GetFormattedValue())
If Not item.AutoUserIDItems.GetSelectedItem() Is Nothing Then
SupportRequestsAutoUserID.SelectedIndex = -1
End If
item.AutoUserIDItems.CopyTo(SupportRequestsAutoUserID.Items)
SupportRequestsLogin.Items.Add(new ListItem("Select Value",""))
SupportRequestsLogin.Items(0).Selected = True
item.LoginItems.SetSelection(item.Login.GetFormattedValue())
If Not item.LoginItems.GetSelectedItem() Is Nothing Then
SupportRequestsLogin.SelectedIndex = -1
End If
item.LoginItems.CopyTo(SupportRequestsLogin.Items)
SupportRequestsFullName.Items.Add(new ListItem("Select Value",""))
SupportRequestsFullName.Items(0).Selected = True
item.FullNameItems.SetSelection(item.FullName.GetFormattedValue())
If Not item.FullNameItems.GetSelectedItem() Is Nothing Then
SupportRequestsFullName.SelectedIndex = -1
End If
item.FullNameItems.CopyTo(SupportRequestsFullName.Items)
SupportRequestsLocation.Items.Add(new ListItem("Select Value",""))
SupportRequestsLocation.Items(0).Selected = True
item.LocationItems.SetSelection(item.Location.GetFormattedValue())
If Not item.LocationItems.GetSelectedItem() Is Nothing Then
SupportRequestsLocation.SelectedIndex = -1
End If
item.LocationItems.CopyTo(SupportRequestsLocation.Items)
SupportRequestsDepartment.Items.Add(new ListItem("Select Value",""))
SupportRequestsDepartment.Items(0).Selected = True
item.DepartmentItems.SetSelection(item.Department.GetFormattedValue())
If Not item.DepartmentItems.GetSelectedItem() Is Nothing Then
SupportRequestsDepartment.SelectedIndex = -1
End If
item.DepartmentItems.CopyTo(SupportRequestsDepartment.Items)
SupportRequestsEmailAddr.Text=item.EmailAddr.GetFormattedValue()
SupportRequestsPhone.Text=item.Phone.GetFormattedValue()
SupportRequestsCompanyID.Items.Add(new ListItem("Select Value",""))
SupportRequestsCompanyID.Items(0).Selected = True
item.CompanyIDItems.SetSelection(item.CompanyID.GetFormattedValue())
If Not item.CompanyIDItems.GetSelectedItem() Is Nothing Then
SupportRequestsCompanyID.SelectedIndex = -1
End If
item.CompanyIDItems.CopyTo(SupportRequestsCompanyID.Items)
SupportRequestsRequestType.Items.Add(new ListItem("Select Value",""))
SupportRequestsRequestType.Items(0).Selected = True
item.RequestTypeItems.SetSelection(item.RequestType.GetFormattedValue())
If Not item.RequestTypeItems.GetSelectedItem() Is Nothing Then
SupportRequestsRequestType.SelectedIndex = -1
End If
item.RequestTypeItems.CopyTo(SupportRequestsRequestType.Items)
SupportRequestsRequestCategory.Items.Add(new ListItem("Select Value",""))
SupportRequestsRequestCategory.Items(0).Selected = True
item.RequestCategoryItems.SetSelection(item.RequestCategory.GetFormattedValue())
If Not item.RequestCategoryItems.GetSelectedItem() Is Nothing Then
SupportRequestsRequestCategory.SelectedIndex = -1
End If
item.RequestCategoryItems.CopyTo(SupportRequestsRequestCategory.Items)
SupportRequestsSubject.Text=item.Subject.GetFormattedValue()
SupportRequestsDetails.Text=item.Details.GetFormattedValue()
SupportRequestsSeverity.Items.Add(new ListItem("Select Value",""))
SupportRequestsSeverity.Items(0).Selected = True
item.SeverityItems.SetSelection(item.Severity.GetFormattedValue())
If Not item.SeverityItems.GetSelectedItem() Is Nothing Then
SupportRequestsSeverity.SelectedIndex = -1
End If
item.SeverityItems.CopyTo(SupportRequestsSeverity.Items)
SupportRequestsNeedByDate.Text=item.NeedByDate.GetFormattedValue()
SupportRequestsDatePicker_NeedByDateName = "SupportRequestsDatePicker_NeedByDate"
SupportRequestsDatePicker_NeedByDateDateControl = SupportRequestsNeedByDate.ClientID
SupportRequestsDatePicker_NeedByDate.DataBind()
SupportRequestsTakenBy.Items.Add(new ListItem("Select Value",""))
SupportRequestsTakenBy.Items(0).Selected = True
item.TakenByItems.SetSelection(item.TakenBy.GetFormattedValue())
If Not item.TakenByItems.GetSelectedItem() Is Nothing Then
SupportRequestsTakenBy.SelectedIndex = -1
End If
item.TakenByItems.CopyTo(SupportRequestsTakenBy.Items)
SupportRequestsAssignedTo.Items.Add(new ListItem("Select Value",""))
SupportRequestsAssignedTo.Items(0).Selected = True
item.AssignedToItems.SetSelection(item.AssignedTo.GetFormattedValue())
If Not item.AssignedToItems.GetSelectedItem() Is Nothing Then
SupportRequestsAssignedTo.SelectedIndex = -1
End If
item.AssignedToItems.CopyTo(SupportRequestsAssignedTo.Items)
SupportRequestsCompletedBy.Items.Add(new ListItem("Select Value",""))
SupportRequestsCompletedBy.Items(0).Selected = True
item.CompletedByItems.SetSelection(item.CompletedBy.GetFormattedValue())
If Not item.CompletedByItems.GetSelectedItem() Is Nothing Then
SupportRequestsCompletedBy.SelectedIndex = -1
End If
item.CompletedByItems.CopyTo(SupportRequestsCompletedBy.Items)
SupportRequestsActionTaken.Text=item.ActionTaken.GetFormattedValue()
SupportRequestsTimeToSolve.Text=item.TimeToSolve.GetFormattedValue()
SupportRequestsSolutionType.Items.Add(new ListItem("Select Value",""))
SupportRequestsSolutionType.Items(0).Selected = True
item.SolutionTypeItems.SetSelection(item.SolutionType.GetFormattedValue())
If Not item.SolutionTypeItems.GetSelectedItem() Is Nothing Then
SupportRequestsSolutionType.SelectedIndex = -1
End If
item.SolutionTypeItems.CopyTo(SupportRequestsSolutionType.Items)
SupportRequestsDateCompleted.Text=item.DateCompleted.GetFormattedValue()
SupportRequestsDatePicker_DateCompletedName = "SupportRequestsDatePicker_DateCompleted"
SupportRequestsDatePicker_DateCompletedDateControl = SupportRequestsDateCompleted.ClientID
SupportRequestsDatePicker_DateCompleted.DataBind()
SupportRequestsIssueCost.Text=item.IssueCost.GetFormattedValue()
'End Record Form SupportRequests BeforeShow tail

'Record Form SupportRequests Show method tail @37-1A8036CA
If SupportRequestsErrors.Count > 0 Then
SupportRequestsShowErrors()
End If
End Sub
'End Record Form SupportRequests Show method tail

'Record Form SupportRequests LoadItemFromRequest method @37-7A78D77B

Protected Sub SupportRequestsLoadItemFromRequest(item As SupportRequestsItem, ByVal EnableValidation As Boolean)
Try
item.RequestDate.SetValue(SupportRequestsRequestDate.Text)
Catch ae As ArgumentException
SupportRequestsErrors.Add("RequestDate",String.Format(rm.GetString("CCS_IncorrectFormat"),"Request Date","mm/dd/yyyy h:nn AM/PM"))
End Try
item.Status.SetValue(SupportRequestsStatus.Value)
item.StatusItems.CopyFrom(SupportRequestsStatus.Items)
Try
item.AutoUserID.SetValue(SupportRequestsAutoUserID.Value)
item.AutoUserIDItems.CopyFrom(SupportRequestsAutoUserID.Items)
Catch ae As ArgumentException
SupportRequestsErrors.Add("AutoUserID",String.Format(rm.GetString("CCS_IncorrectValue"),"Auto User ID"))
End Try
item.Login.SetValue(SupportRequestsLogin.Value)
item.LoginItems.CopyFrom(SupportRequestsLogin.Items)
item.FullName.SetValue(SupportRequestsFullName.Value)
item.FullNameItems.CopyFrom(SupportRequestsFullName.Items)
item.Location.SetValue(SupportRequestsLocation.Value)
item.LocationItems.CopyFrom(SupportRequestsLocation.Items)
item.Department.SetValue(SupportRequestsDepartment.Value)
item.DepartmentItems.CopyFrom(SupportRequestsDepartment.Items)
item.EmailAddr.SetValue(SupportRequestsEmailAddr.Text)
item.Phone.SetValue(SupportRequestsPhone.Text)
Try
item.CompanyID.SetValue(SupportRequestsCompanyID.Value)
item.CompanyIDItems.CopyFrom(SupportRequestsCompanyID.Items)
Catch ae As ArgumentException
SupportRequestsErrors.Add("CompanyID",String.Format(rm.GetString("CCS_IncorrectValue"),"Company ID"))
End Try
item.RequestType.SetValue(SupportRequestsRequestType.Value)
item.RequestTypeItems.CopyFrom(SupportRequestsRequestType.Items)
item.RequestCategory.SetValue(SupportRequestsRequestCategory.Value)
item.RequestCategoryItems.CopyFrom(SupportRequestsRequestCategory.Items)
item.Subject.SetValue(SupportRequestsSubject.Text)
item.Details.SetValue(SupportRequestsDetails.Text)
item.Severity.SetValue(SupportRequestsSeverity.Value)
item.SeverityItems.CopyFrom(SupportRequestsSeverity.Items)
Try
item.NeedByDate.SetValue(SupportRequestsNeedByDate.Text)
Catch ae As ArgumentException
SupportRequestsErrors.Add("NeedByDate",String.Format(rm.GetString("CCS_IncorrectFormat"),"Need By Date","mm/dd/yyyy h:nn AM/PM"))
End Try
item.TakenBy.SetValue(SupportRequestsTakenBy.Value)
item.TakenByItems.CopyFrom(SupportRequestsTakenBy.Items)
item.AssignedTo.SetValue(SupportRequestsAssignedTo.Value)
item.AssignedToItems.CopyFrom(SupportRequestsAssignedTo.Items)
item.CompletedBy.SetValue(SupportRequestsCompletedBy.Value)
item.CompletedByItems.CopyFrom(SupportRequestsCompletedBy.Items)
item.ActionTaken.SetValue(SupportRequestsActionTaken.Text)
Try
item.TimeToSolve.SetValue(SupportRequestsTimeToSolve.Text)
Catch ae As ArgumentException
SupportRequestsErrors.Add("TimeToSolve",String.Format(rm.GetString("CCS_IncorrectValue"),"Time To Solve"))
End Try
item.SolutionType.SetValue(SupportRequestsSolutionType.Value)
item.SolutionTypeItems.CopyFrom(SupportRequestsSolutionType.Items)
Try
item.DateCompleted.SetValue(SupportRequestsDateCompleted.Text)
Catch ae As ArgumentException
SupportRequestsErrors.Add("DateCompleted",String.Format(rm.GetString("CCS_IncorrectFormat"),"Date Completed","mm/dd/yyyy h:nn AM/PM"))
End Try
Try
item.IssueCost.SetValue(SupportRequestsIssueCost.Text)
Catch ae As ArgumentException
SupportRequestsErrors.Add("IssueCost",String.Format(rm.GetString("CCS_IncorrectValue"),"Issue Cost"))
End Try
If EnableValidation Then
item.Validate(SupportRequestsData)
End If
SupportRequestsErrors.Add(item.errors)
End Sub
'End Record Form SupportRequests LoadItemFromRequest method

'Record Form SupportRequests GetRedirectUrl method @37-67A082AE

Protected Function GetSupportRequestsRedirectUrl(ByVal redirect As String, ByVal removeList As String) As String
Dim parameters As New LinkParameterCollection()
If redirect = "" Then redirect = "SupportRequests_list.aspx"
Dim p As String = parameters.ToString("GET",removeList,ViewState)
If p = "" Then p = "?"
Return redirect + p
End Function
'End Record Form SupportRequests GetRedirectUrl method

'Record Form SupportRequests ShowErrors method @37-87B4EDF0

Protected Sub SupportRequestsShowErrors()
Dim DefaultMessage As String = ""
Dim i As Integer
For i = 0 To SupportRequestsErrors.Count - 1
Select Case SupportRequestsErrors.AllKeys(i)
Case Else
If DefaultMessage <> "" Then DefaultMessage &= "<br>"
DefaultMessage = DefaultMessage & SupportRequestsErrors(i)
End Select
Next i
SupportRequestsError.Visible = True
SupportRequestsErrorLabel.Text = DefaultMessage
End Sub
'End Record Form SupportRequests ShowErrors method

'Record Form SupportRequests Insert Operation @37-F5C30A43

Protected Sub SupportRequests_Insert(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim item As SupportRequestsItem = New SupportRequestsItem()
Dim ExecuteFlag As Boolean = True
Dim ErrorFlag As Boolean = False
Dim RedirectUrl As String = ""
Dim EnableValidation As Boolean = False
'End Record Form SupportRequests Insert Operation

'Button Button_Insert OnClick. @38-2829397F
If CType(sender,Control).ID = "SupportRequestsButton_Insert" Then
RedirectUrl = GetSupportRequestsRedirectUrl("", "")
EnableValidation = True
'End Button Button_Insert OnClick.

'Button Button_Insert OnClick tail. @38-477CF3C9
End If
'End Button Button_Insert OnClick tail.

'Record Form SupportRequests BeforeInsert tail @37-0FC7B1FC
SupportRequestsParameters()
SupportRequestsLoadItemFromRequest(item, EnableValidation)
If SupportRequestsOperations.AllowInsert Then
ErrorFlag=(SupportRequestsErrors.Count > 0)
If ExecuteFlag And (Not ErrorFlag) Then
Try
SupportRequestsData.InsertItem(item)
Catch ex As Exception
SupportRequestsErrors.Add("DataProvider",ex.Message)
ErrorFlag = True
End Try
End If
'End Record Form SupportRequests BeforeInsert tail

'Record Form SupportRequests AfterInsert tail @37-7A4BD8C3
End If
ErrorFlag=(SupportRequestsErrors.Count > 0)
If ErrorFlag Then
SupportRequestsShowErrors()
Else
Response.Redirect(RedirectUrl)
End If
End Sub
'End Record Form SupportRequests AfterInsert tail

'Record Form SupportRequests Update Operation @37-47704411

Protected Sub SupportRequests_Update(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim item As SupportRequestsItem = New SupportRequestsItem()
item.IsNew = False
Dim ExecuteFlag As Boolean = True
Dim ErrorFlag As Boolean = False
Dim RedirectUrl As String = ""
Dim EnableValidation As Boolean = False
'End Record Form SupportRequests Update Operation

'Button Button_Update OnClick. @39-C9479521
If CType(sender,Control).ID = "SupportRequestsButton_Update" Then
RedirectUrl = GetSupportRequestsRedirectUrl("", "")
EnableValidation = True
'End Button Button_Update OnClick.


'Button Button_Update OnClick tail. @39-477CF3C9
End If

'End Button Button_Update OnClick tail.

'Record Form SupportRequests Before Update tail @37-06E78D90
SupportRequestsParameters()
SupportRequestsLoadItemFromRequest(item, EnableValidation)
If SupportRequestsOperations.AllowUpdate Then
ErrorFlag = (SupportRequestsErrors.Count > 0)
If ExecuteFlag And (Not ErrorFlag) Then
Try
SupportRequestsData.UpdateItem(item)
Catch ex As Exception
SupportRequestsErrors.Add("DataProvider",ex.Message)
ErrorFlag = True
End Try
End If
'End Record Form SupportRequests Before Update tail

'Record Form SupportRequests Update Operation tail @37-7A4BD8C3
End If
ErrorFlag=(SupportRequestsErrors.Count > 0)
If ErrorFlag Then
SupportRequestsShowErrors()
Else
Response.Redirect(RedirectUrl)
End If
End Sub
'End Record Form SupportRequests Update Operation tail

'Record Form SupportRequests Delete Operation @37-2F130330
Protected Sub SupportRequests_Delete(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim ExecuteFlag As Boolean = True
Dim ErrorFlag As Boolean = False
Dim RedirectUrl As String = ""
Dim EnableValidation As Boolean = False
Dim item As SupportRequestsItem = New SupportRequestsItem()
item.IsNew = False
item.IsDeleted = True
'End Record Form SupportRequests Delete Operation

'Button Button_Delete OnClick. @40-F4764C21
If CType(sender,Control).ID = "SupportRequestsButton_Delete" Then
RedirectUrl = GetSupportRequestsRedirectUrl("", "")
EnableValidation = False
'End Button Button_Delete OnClick.

'Button Button_Delete OnClick tail. @40-477CF3C9
End If
'End Button Button_Delete OnClick tail.

'Record Form BeforeDelete tail @37-B587A598
SupportRequestsParameters()
SupportRequestsLoadItemFromRequest(item, EnableValidation)
If SupportRequestsOperations.AllowDelete Then
ErrorFlag = (SupportRequestsErrors.Count > 0)
If ExecuteFlag And (Not ErrorFlag) Then
Try
SupportRequestsData.DeleteItem(item)
Catch ex As Exception
SupportRequestsErrors.Add("DataProvider",ex.Message)
ErrorFlag = True
End Try
End If
'End Record Form BeforeDelete tail

'Record Form AfterDelete tail @37-D79FA1C3
End If
If ErrorFlag Then
SupportRequestsShowErrors()
Else
Response.Redirect(RedirectUrl)
End If
End Sub
'End Record Form AfterDelete tail

'Record Form SupportRequests Cancel Operation @37-B90A37EC

Protected Sub SupportRequests_Cancel(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim item As SupportRequestsItem = New SupportRequestsItem()
Dim RedirectUrl As String = ""
SupportRequestsLoadItemFromRequest(item, False)
'End Record Form SupportRequests Cancel Operation

'Button Button_Cancel OnClick. @42-4F6F6E57
If CType(sender,Control).ID = "SupportRequestsButton_Cancel" Then
RedirectUrl = GetSupportRequestsRedirectUrl("", "")
'End Button Button_Cancel OnClick.

'Button Button_Cancel OnClick tail. @42-477CF3C9
End If
'End Button Button_Cancel OnClick tail.

'Record Form SupportRequests Cancel Operation tail @37-EA2B0FFB
Response.Redirect(RedirectUrl)
End Sub
'End Record Form SupportRequests Cancel Operation tail

'OnInit Event @1-BC24AB68
#Region " Web Form Designer Generated Code "
Protected Overrides Sub OnInit(ByVal e As EventArgs)
Dim i As Integer
For i = 0 To Page.Controls.Count - 1
If TypeOf Page.Controls(i) Is HtmlForm Then HtmlFormClientId = Page.Controls(i).ClientID
Next
rm = CType(Application("rm"),System.Resources.ResourceManager)
Utility.SetThreadCulture()
PageStyleName = Utility.GetPageStyle()
SupportRequests_maintContentMeta = "text/html; charset=" + CType(System.Threading.Thread.CurrentThread.CurrentCulture,CCSCultureInfo).Encoding
If Application(Request.PhysicalPath) Is Nothing Then
Application.Add(Request.PhysicalPath,Response.ContentEncoding.WebName)
End If
InitializeComponent()
MyBase.OnInit(e)
SupportRequestsData = New SupportRequestsDataProvider()
SupportRequestsOperations = New FormSupportedOperations(False, True, True, True, True)
If Not(DBUtility.AuthorizeUser(New String(){"1"})) Then
Response.Redirect(Settings.AccessDeniedUrl & "?ret_link=" & Server.UrlEncode(Request("SCRIPT_NAME") & "?" & Request("QUERY_STRING")))
End If
'End OnInit Event

'OnInit Event tail @1-BB95D25C
PageStyleName = Server.UrlEncode(PageStyleName)
End Sub
'End OnInit Event tail

'InitializeComponent Event @1-EA5E2628
' <summary>
' Required method for Designer support - do not modify
' the contents of this method with the code editor.
' </summary>
Private Sub InitializeComponent()
End Sub
#End Region
'End InitializeComponent Event

'Page class tail @1-DD082417
End Class
End Namespace
'End Page class tail

prateek srivastava
Generalsmart host Pin
Ramyavairamani18-Sep-08 0:54
Ramyavairamani18-Sep-08 0:54 
GeneralSMTP FORMAT EXCEPTION Pin
bhargav31261-Sep-08 3:22
bhargav31261-Sep-08 3:22 
GeneralRe: SMTP FORMAT EXCEPTION Pin
vivek090822-Sep-10 20:02
vivek090822-Sep-10 20:02 
QuestionHow to get carriers In India----Please Help Pin
sehajpal20-Jun-08 23:36
sehajpal20-Jun-08 23:36 
GeneralSMTP Exception: Falure sending mail Pin
Shah Noman2-Apr-08 19:28
professionalShah Noman2-Apr-08 19:28 
Generalits not working Pin
Krishna Varadharajan12-Feb-08 19:33
Krishna Varadharajan12-Feb-08 19:33 
AnswerRe:inform Pin
katarmal vicky s23-Feb-11 17:22
katarmal vicky s23-Feb-11 17:22 
GeneralGreat Job Pin
King Coffee26-Jan-08 16:10
King Coffee26-Jan-08 16:10 
GeneralRe: Great Job Pin
Shah Noman2-Apr-08 19:37
professionalShah Noman2-Apr-08 19:37 
GeneralRe: Great Job Pin
Member 21044063-Sep-08 10:46
Member 21044063-Sep-08 10:46 
GeneralRe: Great Job Pin
satish0076-Jan-10 17:42
satish0076-Jan-10 17:42 
GeneralRe: Great Job Pin
King Coffee6-Jan-10 18:41
King Coffee6-Jan-10 18:41 
GeneralHi mam..... Pin
swetha_asp.net5-Dec-07 20:02
swetha_asp.net5-Dec-07 20:02 
GeneralPlease help me its not working for yahoo , gmail etc., even sms Pin
swetha_asp.net5-Dec-07 19:55
swetha_asp.net5-Dec-07 19:55 
GeneralRe: Please help me its not working for yahoo , gmail etc., even sms Pin
pvamsik24-Apr-09 9:50
pvamsik24-Apr-09 9:50 
Generalquestion about email server Pin
jr90347-Nov-07 6:18
jr90347-Nov-07 6:18 
Questionmessage cannot be sent to internal mail Pin
Sugi Lee5-Nov-07 16:28
Sugi Lee5-Nov-07 16:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.