Send Email Using jQuery and Web.API (Part 2)
Written by David Bauernschmidt Friday, 22 March 2013
As promised here is Part 2 of Sending Email using jquery and web.api (including some validation). If you missed Part 1 then get it here. It is important to realize that if you are going to use web.api for web forms then you need to add the following to the global.asax.
Imports System.Web.SessionState
Imports System.Web.Routing
Imports System.Web.Http
Public Class Global_asax
Inherits System.Web.HttpApplication
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RegisterRoutes(RouteTable.Routes)
End Sub
Sub RegisterRoutes(routes As routecollection)
routes.MapHttpRoute"ActionApi", "api/{controller}/{action}/{id}", New With {.id = System.Web.Http.RouteParameter.Optional})
routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", New With {.id = System.Web.Http.RouteParameter.Optional})
End Sub
End Class
Then create a new web.api file and add the following;
Imports System.Net
Imports System.Web.Http
Imports System.Net.Http
Imports System.Collections.Generic
Imports System.ComponentModel.DataAnnotations
Imports System.Web
Imports System.Net.Mail
Imports System.IO
Public Class SendEmailController
Inherits ApiController
' POST api/
Public Function PostValue(ByVal EmailMessage As EmailClass) As HttpResponseMessage
If Not ModelState.IsValid Then
Dim errors = ModelState.Where(Function(s) s.Value.Errors.Count > 0).[Select](Function(s) New KeyValuePair(Of String, String)(s.Key, s.Value.Errors.First().ErrorMessage)).ToArray()
Dim responser = Request.CreateResponse(HttpStatusCode.BadRequest, errors)
Return responser
End If
Try
Dim mail As New MailMessage(EmailMessage.EmailFrom, EmailMessage.EmailTo)
Dim sendtoBCC As String = "[email protected]"
If sendtoBCC <> "" Then
mail.Bcc.Add(sendtoBCC)
End If
mail.Subject = EmailMessage.Subject
mail.IsBodyHtml = True
mail.Body = GetEmailBody()
&#039;// Replace placeholders in template.
mail.Body = mail.Body.Replace("<%FromName%>", EmailMessage.Name)
mail.Body = mail.Body.Replace("<%FromCompany%>", EmailMessage.CompanyName)
mail.Body = mail.Body.Replace("<%FromAddress%>", EmailMessage.Address)
mail.Body = mail.Body.Replace("<%FromCity%>", EmailMessage.City)
mail.Body = mail.Body.Replace("<%FromStateZip%>", EmailMessage.State)
mail.Body = mail.Body.Replace("<%FromPhone%>", EmailMessage.PhoneNumber)
mail.Body = mail.Body.Replace("<%ToName%>", EmailMessage.EmailToName)
mail.Body = mail.Body.Replace("<%MessageBody%>", EmailMessage.Message)
mail.Body = mail.Body.Replace("<%Information%>", EmailMessage.Information)
mail.Body = mail.Body.Replace("<%Comment%>", EmailMessage.Comment)
&#039;send the message
Dim smtp As New SmtpClient()
smtp.Send(mail)
Catch ex As Exception
If IsNothing(ex.InnerException) = True Then
Dim responser = Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message.ToString)
Return responser
Else
Dim responser = Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message.ToString)
Return responser
End If
End Try
EmailMessage.RtnID = 1
Dim response = Request.CreateResponse(HttpStatusCode.Created, EmailMessage)
response.Headers.Location = New Uri(Request.RequestUri, String.Format("customer/{0}", EmailMessage.RtnID))
Return response
End Function
Public Function GetEmailBody() As String
Dim templatePath As String = System.Web.HttpContext.Current.Server.MapPath("~/ContactForm.txt")
Dim sr As New StreamReader(templatePath)
Return sr.ReadToEnd()
End Function
End Class
Public Class EmailClass
<Required(ErrorMessage:="Name is required!")>
Public Property Name As String
<Required(ErrorMessage:="Email is Required!")> _
<RegularExpression("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*", ErrorMessage:="Invalid email address")> _
Public Property EmailFrom As String
Public Property CompanyName As String
Public Property Address As String
Public Property City As String
Public Property State As String
Public Property PhoneNumber As String
Public Property Subject As String
Public Property Message As String
Public Property Information As String
Public Property Comment As String
Public Property EmailTo As String
Public Property EmailToName As String
Public Property RtnID As Integer
End Class
A few things to keep in mind and to take notice of in this web.api. First, I am using a class “container” to hold the email variables. I have also placed Required attributes to the Emailclass. When ModelState is validated then any requirements will trigger an error response back to the client. You can actually expand this to do a multitude of different validations as necessary. I am also using an email template and replace the variables with the content from the forms. The ContactForm.txt is here. It is a just a text file.
Looking for quality web hosting? Look no further than Arvixe Web Hosting!
