Я пытаюсь заставить мое веб-приложение MVC отправлять электронную почту, используя подписку с API Mandrill, безрезультатно. Этот API Mandrill работает путем POSTing объекта JSON
для конкретной конечной точки. Это выглядит довольно просто и прямолинейно, и поэтому это так расстраивает, что каждый раз, когда я пытался отправить сообщение электронной почты, я получаю ответ от Mandrill с не более чем «внутренней внутренней ошибкой сервера» без дополнительной информации или чего-либо еще.Ответ API-сервера Mandrill с HTTP-статусом 500
Интересно, что API Mandrill имеет public test tool, который вы можете использовать для тестирования своего API. Итак, я вошел и передал точно тот же объект JSON
, которое мое приложение отправляет при получении этой досадной ошибки Http, и сообщение электронной почты отправляется без каких-либо проблем. Таким образом, в основном у меня нет проблем с отправкой одного и того же письма через их Test Tool, но он не работает, когда мое приложение пытается его отправить.
Подпишитесь, чтобы отправить сообщение электронной почты. Это еще не повторно учтены ... извините ...
public bool Send(string to, string toDisplayName, string subject, string body)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://mandrillapp.com/api/1.0/messages/send.json");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
try
{
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = string.Format(@"{{""key"": ""{0}"",""message"": {{""html"": ""{1}"",""subject"": ""{2}"",""from_email"": ""{3}"",""from_name"": ""AppCompear"",""to"": [{{""email"": ""{4}"",""name"": ""{5}"",""type"": ""to""}}],""important"": false}},""async"": false,""ip_pool"": ""Main Pool""}}"
, _setting.Password, body.Replace(@"""", @"\"""), subject, _setting.UserName, to, toDisplayName);
LogManager.Current.LogError(to, "", "", "", null, json);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
}
catch (WebException wex)
{
LogManager.Current.LogError(to, "", "", "", wex, wex.Message);
}
catch (Exception ex)
{
LogManager.Current.LogError(to, "", "", "", ex, ex.Message);
}
return true;
}
И, конечно, она не при попытке получить ответ
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Любая помощь будет принята с благодарностью
я добавил Mandrill.API из NuGet, но не может найти Mandrill.EmailMessage .. пожалуйста, сообщите? – user384080
@ user384080 Вы добавили ссылку на пространство имен Mandrill? 'using Madrill;' – Leo
Возможно ли создать шаблон с мандриллами по электронной почте. –