2 回答
TA贡献1773条经验 获得超3个赞
如果您存档的电子邮件地址无效,则 SendAndSaveCopy() 应该抛出一个异常说明。你可以实现一个 try/catch 语句来检测任何失败,并将失败发送到一个记录器,它会给你一个文本列表来处理:
public void Send(EmailRequest emailRequest)
{
try
{
// Creates the message itselft
EmailMessage message = new EmailMessage(ServiceExchange);
message.Body = new MessageBody(emailRequest.Message);
message.Subject = emailRequest.Subject;
message.ToRecipients.Add(emailRequest.To);
// Create a custom extended property and add it to the message.
Guid myPropertySetId = Guid.NewGuid();
ExtendedPropertyDefinition myExtendedPropertyDefinition = new ExtendedPropertyDefinition(myPropertySetId, "MyExtendedPropertyName", MapiPropertyType.String);
message.SetExtendedProperty(myExtendedPropertyDefinition, "MyExtendedPropertyValue");
// Asynchronously, call
message.SendAndSaveCopy();
// Wait one second (while EWS sends and saves the message).
System.Threading.Thread.Sleep(1000);
}
catch (Exception x)
{
logger.LogError(x.Message);
}
}
您可以在此处找到其他示例。
TA贡献1817条经验 获得超6个赞
我试图检测我的应用程序发送的电子邮件是否发送失败。这意味着我不是要验证电子邮件,而实际上只是验证它是否到达了目标邮箱。
一旦您将消息交给 Exchange,它甚至可能不会立即发出。一旦 Exchange 尝试发送它,它可能会发现远程服务器不可用并稍后重试。
最终,Exchange 要么让远程服务器接受消息,要么放弃。
如果远程服务器接受该消息,并且您在消息中配置了该标志,则您可以获得发送回执。然而这并不能意味着该邮件确实送达收件人或收件人阅读; 这仅意味着 Exchange 能够将其提供给目标服务器。
许多服务器只是简单地接受和丢弃发送给不存在的用户的邮件。其他人将它们扔到全局“垃圾邮件”文件夹中。
如果您在邮件中设置了正确的“回复”地址,并且在 Exchange 管理员设置的超时时间内无法将邮件传送到远程服务器,您将收到来自 Exchange 的电子邮件。这通常是几天。
但是,即使您设置了“已读回执”标志,收件人也完全有可能阅读邮件而不发送邮件。遵守是自愿的。
真正非常简短的回答是“您可以检测到即时故障,但实际上无法确定消息是否已被读取或传送”,并且无论如何都不会在您的代码中发生。
如果有帮助,有一些错误可以立即检测到,这些错误会显示在您的 try/catch 块中,但这些是例外而不是规则。
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报