private void SendMailCallback(IAsyncResult result)
{
if (NetEventSource.IsEnabled) NetEventSource.Enter(this);
try
{
_writer = _transport.EndSendMail(result);
// If some recipients failed but not others, send the e-mail anyways, but then return the
// "Non-fatal" exception reporting the failures. The sync code path does it this way.
// Fatal exceptions would have thrown above at transport.EndSendMail(...)
SendMailAsyncResult sendResult = (SendMailAsyncResult)result;
// Save these and throw them later in SendMessageCallback, after the message has sent.
_failedRecipientException = sendResult.GetFailedRecipientException();
}
catch (Exception e)
{
Complete(e, result);
if (NetEventSource.IsEnabled) NetEventSource.Exit(this);
return;
}
try
{
if (_cancelled)
{
Complete(null, result);
}
else
{
_message.BeginSend(_writer, DeliveryMethod != SmtpDeliveryMethod.Network,
ServerSupportsEai, new AsyncCallback(SendMessageCallback), result.AsyncState);
}
}
catch (Exception e)
{
Complete(e, result);
}
finally
{
if (NetEventSource.IsEnabled) NetEventSource.Exit(this);
}
}