Send Email with VB.NET windows application
Send email with attachment using windows app by posting to ASP.net application
Download WindowsMailer.zip - 50.72 KB
Download EmailSender.zip - 4.4 KB
Send email with attachment using windows app by posting to ASP.net App
Normally a windows app needs SMTP server to send email. But to setup SMTP server in every client machine is not feasible. With this setup, the emailing will be handled by the web application (as most asp.net servers give smtp access) and the windows app will POST email details including attachment to a ASP.NET page and the page can get the values from the controls and send the mail.
Background
Applications cant trust outlook to send email as most people may not configure it, In those case they can use this solution
Using the code
Set up the web app and give its URL in the windows app. I have created a folder named D:\Emailer\ to save the attachment. You might need to change the value for view state if the webserver is returning error. Check the correct value by updoading a file with browser to the web app and logging the request. (Code commented)
"Content-Disposition: form-data; name=""__VIEWSTATE""")"")"/wEPDwULLTIwMjIyMzkxMzQPZBYCAgMPZBYCAgkPFgIeCWlubmVyaHRtbAUBc2RkYtx2BkFJ2ZWs9JmppGZpGmQ0NFY=")
As the web app is using multipart/form-data to receive form values and a file as attachment, the windows app is simulating such a communication to post the data (rfc1867). It will put begin end marking and send the form variables along with the attachement. The asp.net app gets the values form the controls in the Load event handler and can use them to send the mail. Find the form variables in asp.net page. Please create a folder in D:\Emailer so that the attachment can be saved. The email sending code is omitted as it is very popular.
Dim sURL As String = txtURL.Text Dim request As WebRequest = WebRequest.Create(sURL) Dim response As WebResponse Dim writeStream As Stream Dim bytes(0) As Byte request.Method = "POST" request.Timeout = 20000 request.ContentType = "multipart/form-data; boundary=---------------------------7d823238a027a" Try GetContent(bytes) request.ContentLength = bytes.Length writeStream = request.GetRequestStream() writeStream.Write(bytes, 0, bytes.Length) writeStream.Close() Catch ex As Exception If Not writeStream Is Nothing Then writeStream.Close() MessageBox.Show(ex.Message + " : " + ex.StackTrace) Return End Try Try response = request.GetResponse() Catch ex As Exception MessageBox.Show(ex.Message + " : " + ex.StackTrace) Return End Try Dim sr As StreamReader = New StreamReader(response.GetResponseStream()) txtResponse.Text = sr.ReadToEnd()
You can see the actual communication if you could log the request in Asp.net page
Points of Interest
The annoying thing is to post correct data so that the asp.net page can receive it
History
Keep a running update of any changes or improvements you've made here.