日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言outl函数,Outlook MAPI开发指南

發(fā)布時(shí)間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言outl函数,Outlook MAPI开发指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0x00 前言

Outlook MAPI提供了一組訪問(wèn)Outlook的接口,用來(lái)擴(kuò)展Outlook應(yīng)用程序的開(kāi)發(fā),本文將會(huì)介紹Outlook MAPI的基本用法,開(kāi)源一份Outlook MAPI的實(shí)現(xiàn)代碼mapi_tool,便于后續(xù)的二次開(kāi)發(fā)。

0x01 簡(jiǎn)介

本文將要介紹以下內(nèi)容:

·基本知識(shí)

·使用Outlook MAPI訪問(wèn)Outlook資源

·開(kāi)源代碼mapi_tool

·mapi_tool功能介紹

·多種環(huán)境下的利用思路

0x02 基本知識(shí)

參考資料:

https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/outlook-mapi-reference

Outlook MAPI的使用前提:需要安裝Outlook客戶端。

Outlook MAPI同EWS的區(qū)別:

·Outlook MAPI用來(lái)訪問(wèn)Outlook客戶端中的資源

·EWS用來(lái)訪問(wèn)Exchange服務(wù)器中的資源

關(guān)于EWS的使用可以參考之前的文章《Exchange Web Service(EWS)開(kāi)發(fā)指南》。

Outlook客戶端中的用戶郵件存儲(chǔ)在后綴名為ost的文件中,和Exchange服務(wù)器中的數(shù)據(jù)庫(kù)保持一致

ost文件的默認(rèn)保存位置:%LOCALAPPDATA%\Microsoft\Outlook\

MAPI主要包括以下三個(gè)功能:

·Address Books,設(shè)置E-mail type、protocol等參數(shù)

·Transport,文件的發(fā)送和接收

·Message Store,發(fā)送接收等信息的處理

0x03 使用Outlook MAPI訪問(wèn)Outlook資源

1.安裝Outlook客戶端并配置參數(shù)

2.啟動(dòng)Outlook客戶端進(jìn)行用戶登錄

3.使用C Sharp開(kāi)發(fā)程序,實(shí)現(xiàn)讀取收件箱郵件的功能

參考資料:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook?view=outlook-pia

https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace

開(kāi)發(fā)環(huán)境:VS2015

新建工程,選擇控制臺(tái)應(yīng)用程序,引用文件:Microsoft.Office.Interop.Outlook.dll

注:

安裝Outlook客戶端后,可在C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Outlook\下獲得Microsoft.Office.Interop.Outlook.dll。

Microsoft.Office.Interop.Outlook.dll要同Outlook的版本保持一致。

Microsoft.Office.Interop.Outlook.dll的文件屬性-Details-Product name對(duì)應(yīng)支持Outlook的版本,Product version對(duì)應(yīng)具體的Outlook版本,如下圖:

Product version對(duì)應(yīng)具體的Outlook版本可參考:

https://docs.microsoft.com/en-us/Exchange/new-features/build-numbers-and-release-dates?redirectedfrom=MSDN&view=exchserver-2019

C Sharp代碼示例:

using System;

using Microsoft.Office.Interop.Outlook;

namespace ConsoleApplication3

{

class Program

{

static void Main(string[] args)

{

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();

Microsoft.Office.Interop.Outlook.NameSpace ns = app.GetNamespace("MAPI");

Microsoft.Office.Interop.Outlook.MAPIFolder inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

Microsoft.Office.Interop.Outlook.Items items = inbox.Items;

Console.WriteLine("Size:" + inbox.Items.Count);

foreach (var item in items)

{

var mail = item as Microsoft.Office.Interop.Outlook.MailItem;

if (mail != null)

{

if(mail.UnRead==true)

Console.WriteLine("[+] UnRead Mail");

else

Console.WriteLine("[+] Mail");

Console.WriteLine("[*] Subject:" + mail.Subject);

Console.WriteLine("[*] From:" + mail.SenderName);

Console.WriteLine("[*] To:" + mail.To);

Console.WriteLine("[*] CC:" + mail.CC);

Console.WriteLine("[*] ReceivedTime:" + mail.ReceivedTime);

if(mail.Attachments.Count>0)

{

Console.WriteLine("[>] Attachments:" + mail.Attachments.Count);

Microsoft.Office.Interop.Outlook.Attachments attachments = mail.Attachments;

foreach (Microsoft.Office.Interop.Outlook.Attachment att in attachments)

{

Console.WriteLine(" Name:" + att.FileName);

}

}

Console.WriteLine("[*] Body:\r\n" + mail.Body);

Console.WriteLine("[*] OutlookVersion:" + mail.OutlookVersion);

Console.WriteLine("[*] EntryID:" + mail.EntryID);

}

}

}

}

}

代碼執(zhí)行后將會(huì)列舉收件箱中的郵件,輸出以下內(nèi)容:

·收件箱郵件個(gè)數(shù)

·是否已讀

·主題

·發(fā)件人

·收件人

·抄送

·接收時(shí)間

·附件名稱

·正文內(nèi)容

·Outlook版本

·EntryID

代碼執(zhí)行后,Outlook客戶端會(huì)彈出警告,如下圖:

選擇允許后,成功獲得收件箱信息,如下圖:

彈出警告的原因:當(dāng)前系統(tǒng)的防病毒軟件處于非活動(dòng)狀態(tài)或過(guò)期。

參考資料:

https://support.microsoft.com/en-us/help/3189806/a-program-is-trying-to-send-an-e-mail-message-on-your-behalf-warning-i

兩種關(guān)閉方法:

1.開(kāi)啟并更新防病毒軟件

2.修改注冊(cè)表關(guān)閉警告

注冊(cè)表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\

64位操作系統(tǒng)安裝32位Office的注冊(cè)表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\

注冊(cè)表項(xiàng):ObjectModelGuard,類型:REG_DWORD,值為2。

在使用時(shí)需要注意的細(xì)節(jié)如下:

1.引用的Microsoft.Exchange.WebServices.dll要與Outlook客戶端的版本保持一致

2.默認(rèn)配置下,部分操作不會(huì)彈出警告

例如:

·列出收件箱郵件個(gè)數(shù)

·列出郵件主題

·列出郵件接收時(shí)間

·列出郵件附件名稱

3.如果后臺(tái)沒(méi)有運(yùn)行Outlook客戶端

通過(guò)程序可讀取當(dāng)前Outlook客戶端中的資源,但是獲取資源后還會(huì)彈框提示要求輸入憑據(jù),如下圖:

如果選擇了記住憑據(jù),那么后續(xù)操作不會(huì)要求輸入憑據(jù),關(guān)于憑據(jù)的使用可以參考之前的文章。

0x04 開(kāi)源實(shí)現(xiàn)代碼mapi_tool

代碼地址:https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/mapi_tool.cs

在編譯上面,為了增加通用性,代碼支持使用csc.exe進(jìn)行編譯,

支持.Net 3.5或更高版本,編譯命令:

C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe mapi_tool.cs /r:Microsoft.Office.Interop.Outlook.dll

or

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe mapi_tool.cs /r:Microsoft.Office.Interop.Outlook.dll

為了便于測(cè)試,我上傳了Office2010下的Microsoft.Office.Interop.Outlook.dll和Office2013下的Microsoft.Office.Interop.Outlook.dll

在功能實(shí)現(xiàn)上,對(duì)是否彈出安全提示做了區(qū)分,

不會(huì)彈出安全提示的功能:

·獲得所有文件夾中的郵件長(zhǎng)度

·獲得配置信息,包括CurrentProfileName、ExchangeMailboxServerName、ExchangeMailboxServerVersion

·列出指定位置的郵件,包括郵件主題、接收時(shí)間、附件中的文件名稱和EntryID

·列出指定位置的未讀郵件,包括郵件主題、接收時(shí)間、附件中的文件名稱和EntryID

會(huì)彈出安全提示的功能:

·獲得配置信息,包括Account-DisplayName、Account-SmtpAddress、Account-AutoDiscoverXml、Account-AccountType

·獲得聯(lián)系人信息

·獲得GlobalAddress

·列出指定位置的郵件,包括郵件主題、發(fā)件人、收件人、抄送、接收時(shí)間、附件中的文件名稱、正文內(nèi)容、Outlook版本和EntryID

·列出指定位置的未讀郵件,包括郵件主題、發(fā)件人、收件人、抄送、接收時(shí)間、附件中的文件名稱、正文內(nèi)容、Outlook版本和EntryID

·保存指定郵件中的附件

在代碼開(kāi)發(fā)上,需要注意以下細(xì)節(jié):

1.保存附件時(shí)需要使用絕對(duì)路徑

2.獲得聯(lián)系人列表時(shí),數(shù)組開(kāi)始的位置為1,而不是0

3.獲得配置信息時(shí),數(shù)組開(kāi)始的位置為1,而不是0

0x05 多種環(huán)境下的利用思路

1.正在運(yùn)行Outlook客戶端

通過(guò)mapi_tool可以對(duì)Outlook客戶端的資源進(jìn)行訪問(wèn),某些操作有可能會(huì)彈出安全提示。

關(guān)閉安全提示的兩種方法:

·開(kāi)啟并更新防病毒軟件

·修改注冊(cè)表關(guān)閉警告

導(dǎo)出Outlook客戶端所有郵件信息的方法:

(1)獲得ost文件

ost文件的默認(rèn)保存位置:%LOCALAPPDATA%\Microsoft\Outlook\

無(wú)法直接復(fù)制,提示文件被占用。

可以使用Joe Bialek的NinjaCopy復(fù)制被占用的文件。

(2)將ost文件轉(zhuǎn)換成pst文件

工具有很多,這個(gè)提供一種:Advanced Exchange Recovery

(3)將pst文件導(dǎo)入Outlook客戶端

2.沒(méi)有啟動(dòng)Outlook客戶端

通過(guò)mapi_tool可以對(duì)Outlook客戶端的資源進(jìn)行訪問(wèn),某些操作有可能會(huì)彈出安全提示。

如果執(zhí)行需要同服務(wù)器進(jìn)行交互的操作,例如獲取配置信息,會(huì)彈框提示要求輸入憑據(jù),如果憑據(jù)管理器已經(jīng)存儲(chǔ)了對(duì)應(yīng)的憑據(jù),就不會(huì)彈框提示。

查看已保存憑據(jù)的命令:

cmdkey /list

導(dǎo)出Outlook客戶端所有郵件信息的方法:

(1)獲得ost文件

可直接復(fù)制ost文件。

(2)將ost文件轉(zhuǎn)換成pst文件

方法同上。

(3)將pst文件導(dǎo)入Outlook客戶端

方法同上。

0x06 小結(jié)

本文介紹了使用Outlook MAPI訪問(wèn)Outlook資源的方法,開(kāi)源代碼mapi_tool,便于后續(xù)的二次開(kāi)發(fā)。

總結(jié)

以上是生活随笔為你收集整理的c语言outl函数,Outlook MAPI开发指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。