Я настраиваю Mandrill Api для наших внутренних систем.
Я могу заставить API работать нормально и получать от него электронные письма. У меня проблема в том, что когда я пытаюсь получить результат из запроса на отправку, система просто зависает на неопределенный срок.
Мой код выглядит следующим образом:
public async Task<bool> SendEmail(MandrillSendTemplateRequest request)
{
var result = await _mandrill.SendMessageTemplate(Map(request));
return result[0].Status.ToString() == "sent";
}
Если я запускаю приведенный выше код БЕЗ возврата, электронное письмо отправляется нормально. Если я запускаю приведенный выше код С возвратом, электронная почта отправляется нормально, но моя программа просто зависает.
Кто-нибудь может пролить свет на этот вопрос?
Изменить. Для справки: я использую Mandrill .Net Wrapper от Shawn Mclean из NuGet Packages. API Mandrill 2.2.7
Изменить. Событие нажатия кнопки, вызывающее метод SendEmail:
Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
Try
WaitCursor = True
Dim mgr As New CustomerCommunicationsManager()
Dim r As New MandrillSendTemplateRequest()
Dim m As New MandrillMessage()
m.FromEmail = "[email protected]"
m.FromName = "fromName"
m.Subject = "Test"
m.ForeName = "Software"
m.Surname = "Dept"
m.EmailAddress = "[email protected]"
r.Message = m
r.TemplateName = "WelcomeBasic"
Dim sent As Boolean = mgr.Mandrill.SendEmail(r).Result
Catch ex As Exception
Finally
WaitCursor = False
End Try
End Sub
Изменить. Код для карты(запрос) (метод SendEmail)
private SendMessageTemplateRequest Map(MandrillSendTemplateRequest obj)
{
if (obj == null) { return null; }
return new SendMessageTemplateRequest(Map(obj.Message), obj.TemplateName, Map(obj.TemplateContent));
}
private EmailMessage Map(MandrillMessage obj)
{
if (obj == null) { return null; }
return new EmailMessage
{
AutoHtml = obj.AutoHtml,
AutoText = obj.AutoText,
FromEmail = obj.FromEmail,
FromName = obj.FromName,
Important = obj.Important,
PreserveRecipients = obj.PreserveRecipients,
Subject = obj.Subject,
Tags = obj.tags,
To = new EmailAddress[] { new EmailAddress(obj.EmailAddress, obj.FullName) },
TrackOpens = obj.TrackOpens,
TrackClicks = obj.TrackClicks
};
}
private IEnumerable<TemplateContent> Map(IEnumerable<MandrillTemplateContent> obj)
{
if (obj == null) { return null; }
List<TemplateContent> content = new List<TemplateContent>();
foreach (MandrillTemplateContent c in obj)
{
content.Add(new TemplateContent{ Content = c.Content, Name = c.Name });
}
return content;
}
Wait
илиResult
для возвращаемой задачи? - person Daniel Kelley   schedule 16.11.2015SendMail
? Что это называет? - person Daniel Kelley   schedule 16.11.2015result
, либо метод доступаStatus
get, либо методToString()
зависают. Вы отлаживали с помощью шага в? попробуйте поставить точки останова в indexer/accessor/tostring - person Philippe Paré   schedule 16.11.2015SendEmail
- person i3arnon   schedule 16.11.2015