EWS邮件跟踪报告 [英] EWS Message Tracking Report

查看:105
本文介绍了EWS邮件跟踪报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在进行大量研究,研究如何使用EWS从交换中获取消息跟踪报告,而且似乎无法查明任何内容.我本来打算构建一个可抓取日志文件的应用程序,但是如果我可以通过EWS进行操作,那么它对我的工作会更好.有任何想法吗?

I've been doing a bunch of research on how to get a message tracking report from exchange using EWS and can't seem to pinpoint anything. I was going to build an application that scrapes the log files but if I can do it through EWS it be better for what I'm doing. Any ideas?

推荐答案

我终于能够为我的问题创建解决方案.我在C#中使用Powershell发送命令以通过消息跟踪日志进行交换和解析.为此,您需要确保用于交换的用户具有Exchange中的MessageTrackingLog的权限.作为交换,我使用的用户可以访问RecordsManagement角色.这是允许我连接并获取邮件跟踪日志的代码.

I was finally able to create a solution to my issue. I am using Powershell in C# to send commands to exchange and parse through the Message Tracking Log. In order to this you need to make sure the user you are using to connect to exchange has rights to MessageTrackingLog in exchange. The user I used has access to the RecordsManagement Role in exchange. Here is the code that allowed me to connect and get the message tracking log.

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();

    }
}
}

这篇关于EWS邮件跟踪报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆