Mandrill API响应,HTTP状态为500



我一直试图让我的MVC web应用程序使用Mandrill API订阅发送电子邮件,但没有成功。此Mandrill API通过将JSON对象发布到特定端点来工作。它看起来非常简单和直接,这就是为什么每次我试图发送电子邮件时,我都会收到Mandrill的回复,只不过是"500内部服务器错误",没有额外信息或其他任何信息,这让我非常沮丧。

有趣的是,Mandrill API有一个公共测试工具,可以用来测试他们的API。因此,当我收到那个烦人的Http错误时,我进入并传递了与我的应用程序正在发送的JSON对象完全相同的对象,并且发送的电子邮件没有任何问题。所以基本上,我通过他们的测试工具发送相同的电子邮件没有问题,但当我的应用程序尝试发送它时,它失败了

请在下面找到授权发送电子邮件的信息。它还没有被重新考虑。。。很抱歉

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文档以寻找进行API调用所需考虑的因素的线索后(似乎不是那么直接),我决定安装一个NuGet包,它实际上是Mandrill API的.NET包装。

经过一些调整后,代码看起来类似于以下内容。。。

Mandrill.EmailMessage message = new Mandrill.EmailMessage();
message.from_email = _setting.UserName;
message.from_name = "Whatever";
message.html = body;
message.subject = subject;
message.to = new List<Mandrill.EmailAddress>()
{
new Mandrill.EmailAddress(to, toDisplayName)
};
Mandrill.MandrillApi mandrillApi = new Mandrill.MandrillApi(_setting.Password, false);
var results = mandrillApi.SendMessage(message);
foreach (var result in results)
{
if (result.Status != Mandrill.EmailResultStatus.Sent)
LogManager.Current.LogError(result.Email, "", "", "", null, string.Format("Email failed to send: {0}", result.RejectReason));
}

相关内容

最新更新