如何在 C# 中使用(Outlook.Application 应用程序)作为参数调用方法? [英] How to invoke a method with (Outlook.Application application) as parameter in C#?

查看:59
本文介绍了如何在 C# 中使用(Outlook.Application 应用程序)作为参数调用方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用this解决方案,其中方法DisplayAccountInformation() 正在被调用.

I am trying to use this solution in which method DisplayAccountInformation() is being called.

public partial class OutlookContacts : Form
{
    public OutlookContacts()
    {
        InitializeComponent();
        //DisplayAccountInformation(??);
    }

    public static void DisplayAccountInformation(Outlook.Application application)
    {
        // The Namespace Object (Session) has a collection of accounts.
        Outlook.Accounts accounts = application.Session.Accounts;

        // Concatenate a message with information about all accounts.
        var builder = new StringBuilder();

        // .....
        // [more code]
        // .....

        // Display the account information.
        System.Windows.Forms.MessageBox.Show(builder.ToString());
    }


}

我正在尝试获取联系人列表,包括用户名和电子邮件地址.

I am trying to get the list of contacts including user name and email address.

这是一个 C# Windows 窗体应用程序.

It's a C# Windows Forms application.

如何调用DisplayAccountInformation()方法?

推荐答案

经过一些研究和微软关于 Outlook 的文档,我找到了一个解决方案 这里 做我想要的工作.现在我很清楚会话"的错误是什么.@Dmitry Streblechenko ,@ Yacoub Massad 您使用 Application.Session.AddressLists 是对的.所以下面是我的代码:

After some research and going through Microsoft's documentations on Outlook, I found a solution here which does just the job I want. And now I am clear what the mistake was with the "Session". @Dmitry Streblechenko , @ Yacoub Massad you were right about using Application.Session.AddressLists. So below is my code :

    public partial class OutlookContacts : Form
        {
            private BindingSource supplierDataBindingSource = new BindingSource();

            public static IEnumerable<Employees> displayListOfOutLookUsers = new List<Employees>();
            public OutlookContacts()
            {
                InitializeComponent();
                dataGridView1.DataSource = supplierDataBindingSource;
                displayListOfOutLookUsers = EnumerateGAL();

            }
            private IEnumerable<Employees> EnumerateGAL()
            {
                Outlook.Application ol = new Outlook.ApplicationClass();
/*Outlook.AddressList gal = Application.Session.GetGlobalAddressList(); won't work because '_Application' needs to be instantiated using an object before using. */
                Outlook.AddressList gal = ol.Session.GetGlobalAddressList();
/*Declaring a list emp of type Employees.*/
            List<Employees> emp = new List<Employees>();
            if (gal != null)
            {
                for (int i = 1;
                    i <= Math.Min(100, gal.AddressEntries.Count - 1); i++)
                {
                    Outlook.AddressEntry addrEntry = gal.AddressEntries[i];
                    if (addrEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry
                        || addrEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
                    {
                        Outlook.ExchangeUser exchUser =addrEntry.GetExchangeUser();

/*Storing fetched records in the list.*/
                        emp.Add(new Employees {EmployeeName = exchUser.Name,EmployeeEmail = exchUser.PrimarySmtpAddress});

                    }
                    if (addrEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeDistributionListAddressEntry)
                    {
                        Outlook.ExchangeDistributionList exchDL = addrEntry.GetExchangeDistributionList();

                    }
                }
            }
            displayListOfOutLookUsers = emp;
            supplierDataBindingSource.DataSource = displayListOfOutLookUsers.Select(l => new { l.EmployeeName, l.EmployeeEmail });
            dataGridView1.AutoResizeColumns(
                    DataGridViewAutoSizeColumnsMode.DisplayedCells);
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            int j = 0;
            foreach (DataGridViewColumn c in dataGridView1.Columns)
            {
                c.SortMode = DataGridViewColumnSortMode.Automatic;
                j += c.Width;
            }
            dataGridView1.Width = j + dataGridView1.RowHeadersWidth + 232;
            this.Width = dataGridView1.Width + 40;
            return displayListOfOutLookUsers;
        }

在 OutlookContacts 表单中,我有一个 datagridview,我想用所有 Exchange 用户名和电子邮件地址填充它.

In the form OutlookContacts I have one datagridview, and I wanted to fill it with all the Exchange User's Name and Email Addresses.

这篇关于如何在 C# 中使用(Outlook.Application 应用程序)作为参数调用方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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