http://documentation.mailgun.net/quickstart.html contains some example code for a http handler in Django:
# Handler for HTTP POST to http://myhost.com/messages for the route defined above
def on_incoming_message(request):
if request.method == 'POST':
sender = request.POST.get('sender')
recipient = request.POST.get('recipient')
subject = request.POST.get('subject', '')
body_plain = request.POST.get('body-plain', '')
body_without_quotes = request.POST.get('stripped-text', '')
# note: other MIME headers are also posted here...
# attachments:
for key in request.FILES:
file = request.FILES[key]
# do something with the file
# Returned text is ignored but HTTP status code matters:
# Mailgun wants to see 2xx, otherwise it will make another attempt in 5 minutes
return HttpResponse('OK')
What is the equivalent in ASP.NET C#?
I have tried Request.Form["sender"] for example, but the Mailgun log records a HTTP 500 error code.
Thanks for your help.
I needed to set ValidateRequest to false in the page directive.
Sample Code-
sms.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="sms.aspx.cs" EnableEventValidation="false" ValidateRequest="false" Inherits="sms" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<p>SMS</p>
</form>
</body>
</html>
sms.aspx.cs
public partial class sms : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string subject = Request.Params["subject"];
string message = Request.Params["body-plain"];
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["YOURCONNECTIONSTRING"].ConnectionString))
{
cn.Open();
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.Text;
cm.CommandText = "INSERT INTO SMS (subject, message, DateTime) VALUES (@Subject, @Message, @Dateandtime);";
cm.Parameters.Add("@Subject", SqlDbType.NVarChar).Value = subject;
cm.Parameters.Add("@Message", SqlDbType.NVarChar).Value = message;
cm.Parameters.Add("@Dateandtime", SqlDbType.DateTime).Value = DateTime.Now.ToString();
SqlDataReader dr = cm.ExecuteReader();
dr.Dispose();
cm.Dispose();
}
}
}
}
Hope this helps someone else using Mailgun and C#.
Main I wish i would have found this about 6 hours ago ...
Here is what you need to do if you are using mvc and the razor view engine
[HttpPost]
[ValidateInput(false)]
public ActionResult GoTruckGo(FormCollection oColl)
{
try
{
string sender = Request.Unvalidated().Form["sender"];
string body = Request.Unvalidated().Form["body-plain"];
sendLog(body);
// do something with data
}
catch (Exception ex)
{
sendLog("entered catch = "+ ex.Message);
}
return Content("ok");
}
My VB.Net Version
' Get form data?
Dim message As String = String.Empty
Dim mailgun As NameValueCollection = Request.Form
Dim key As String
Dim values() As String
For Each key In mailgun.Keys
values = mailgun.GetValues(key)
For Each value As String In values
' create a new string
message &= key & "-" & value & "|"
' MsgBox(key & " - " & value)
Next value
Next key
' save message