我一直在研究如何使用EWS从交换中获取邮件跟踪报告,似乎无法确定任何内容。我打算构建一个擦除日志文件的应用程序,但如果我可以通过EWS实现它,那么我正在做的更好。有任何想法吗?
答案 0 :(得分:2)
我终于能够为我的问题创建一个解决方案。我在C#中使用Powershell发送命令以通过消息跟踪日志进行交换和解析。为此,您需要确保您用于连接到Exchange的用户具有MessageTrackingLog的权限。我使用的用户可以访问RecordsManagement Role。这是允许我连接并获取邮件跟踪日志的代码。
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Management.Automation;
using System.Collections.ObjectModel;
using System.Management.Automation.Runspaces;
using System.Security;
using System.Management.Automation.Remoting;
namespace ExchangeConnection
{
class ExchangeShell
{
//Credentials
const string userName = "username";
const string password = "password";
private PowerShell InitializePS()
{
PSCredential credential = new PSCredential(userName, SecurePassword());
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri("exchange server url/Powershell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos;
connectionInfo.MaximumConnectionRedirectionCount = 5;
connectionInfo.SkipCNCheck = true;
connectionInfo.OpenTimeout = 999999;
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
PowerShell powershell = PowerShell.Create();
powershell.Runspace = runspace;
return powershell;
}
private SecureString SecurePassword()
{
System.Security.SecureString securePassword = new System.Security.SecureString();
foreach (char c in password)
{
securePassword.AppendChar(c);
}
return securePassword;
}
public void GetMessageTrackingLog(string sender)
{
PowerShell ps = InitializePS();
ps.AddCommand("Get-MessageTrackingLog");
ps.AddParameter("Start", DateTime.Now.AddHours(-24).ToString());
ps.AddParameter("ResultSize", "Unlimited");
ps.AddParameter("Sender", sender);
ps.AddParameter("EventId", "SEND");
Collection<PSObject> results = ps.Invoke();
Console.WriteLine("|----Sender----|----Recipients----|----DateTime----|----Subject----|");
foreach (var r in results)
{
string senders = r.Properties["Sender"].Value.ToString();
string recipients = r.Properties["Recipients"].Value.ToString();
string timestamp = r.Properties["Timestamp"].Value.ToString();
string subject = r.Properties["MessageSubject"].Value.ToString();
string eventID = r.Properties["EventID"].Value.ToString();
string messageInfo = r.Properties["MessageInfo"].Value.ToString();
Console.WriteLine("{0}|{1}|{2}|{3}", sender, recipients, timestamp, subject);
}
ps.Dispose();
ps.Runspace.Dispose();
}
}
}
答案 1 :(得分:0)
我认为Office 365报表Web服务是一个比EWS更好的解决方案,因为它提供了许多适合您需求的邮件流量报告。此处提供了更多信息:Office 365 Reporting web service,此处列出了所有Exchange特定报告:Exchange reports available in Office 365 Reporting web service。 MailTraffic *报告有关进出组织的消息的所有报告,因此您不必自己编写该逻辑代码。