using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
using Microsoft.Office.Interop.Outlook;
using Microsoft.Office.Interop.Excel;
using System.Diagnostics;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace Outlook_建立聯絡人
{
internal class Program
{
static void Main(string[] args)
{
var groupName = "TEST3";
var outlookApp = new Microsoft.Office.Interop.Outlook.Application();
var processes = System.Diagnostics.Process.GetProcessesByName("OUTLOOK");
if (processes.Length > 0)
{
// Outlook 已經在運行
// 獲取 Outlook 物件
outlookApp = (Microsoft.Office.Interop.Outlook.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");
}
else
{
// Outlook 沒有在運行
// 創建 Outlook 物件
outlookApp = new Microsoft.Office.Interop.Outlook.Application();
}
// 獲取通訊錄
var addressBook = outlookApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
// 創建聯繫人群組
var group = outlookApp.CreateItem(OlItemType.olDistributionListItem);
group.Subject = groupName;
// // 添加聯繫人
group.AddMember("john.smith2@example.com");
//group.AddMember("john.smith3@example.com");
//// //group.AddMember(member3);
// 保存群組
group.Save();
System.Runtime.InteropServices.Marshal.ReleaseComObject(group);
System.Runtime.InteropServices.Marshal.ReleaseComObject(outlookApp);
}
}
}
這串代碼目前一直卡在 "添加聯繫人"那段,它一直跳出以下例外狀況
System.ArgumentException: '無法將呼叫的引數 0 轉換成 AddMember。'
這MAIL是範例,我有嘗試使用真正存在的MAIL也是失敗,把MAIL先建立在我的聯絡人裡也是失敗,不知道問題到底是卡在哪?
PS 我的OFFICE是 2010
綜合上述兩點,感覺你應該這樣用:
// 添加聯繫人:
Outlook.Recipient recip = Application.Session.CreateRecipient("john.smith2@example.com");
recip.Resolve(); //Resolve the Recipient before calling AddMember
group.AddMember(recip);
請先加到服務參考
using Outlook = Microsoft.Office.Interop.Outlook;
private static void 新增連絡人(string 工號, string 部門, string 姓名, string 郵箱)
{
Outlook.Application outlookApp = new Outlook.Application();
Outlook.NameSpace outlookNS = outlookApp.GetNamespace("MAPI");
try
{
Outlook.ContactItem newContact = (Outlook.ContactItem)
outlookApp.CreateItem(Outlook.OlItemType.olContactItem);
newContact.LastName = $"{姓名}";
newContact.FirstName = $"{工號}";
newContact.Email1Address = $"{姓名}{工號} ({郵箱})";
newContact.Email1DisplayName = $"{姓名}{工號} {郵箱}";
newContact.CompanyName = "XX公司";
newContact.Department = 部門;
newContact.FileAs = $"{姓名}{工號}@XX公司";
newContact.Account = $"{姓名}{工號}@XX公司";
newContact.Save();
}
catch
{
Console.WriteLine("錯誤: 這個連絡人[{0}]無法新增(可能存在)", 姓名);
}
}
我把上段程式跟資料庫(用API下載資料所以沒1433的問題)綁在一起,寫成CONSOLE,安裝後自動掛在所有人Windows上的工作排程裡,每天中午自動執行(沒人閒到午休關機)
用好幾年也沒在凸槌
怎麼API?簡單到爆...
系統排程();
WebClient wc = new WebClient();
string emailstr = Uri.UnescapeDataString((wc.DownloadString(new Uri("http://api.yourcompany.com.tw/allcontacts.aspx"))));
if (emailstr != "")
{
JArray emp = JArray.Parse(emailstr); // Newtonsoft json
foreach(var e in emp){
新增連絡人(e["uid"],e["dept"],e["name"],e["mail"]);
}
}
就醬
我嘗試用我的方法創建群組,
增加聯絡人用你的方法,但聯絡人卻加不進去群組,
變成分別建立了群組、聯絡人
是哪一段錯誤了嗎?再麻煩指教了,謝謝。
static void Main(string[] args)
{
新增聯絡人("", "", "TEST", "TEST@gmail.com.tw");
}
private static void 新增聯絡人(string 工號, string 部門, string 姓名, string 郵箱)
{
Outlook.Application outlookApp = new Outlook.Application();
var groupName = "TEST3";
outlookApp = new Microsoft.Office.Interop.Outlook.Application();
var processes = System.Diagnostics.Process.GetProcessesByName("OUTLOOK");
if (processes.Length > 0)
{
// Outlook 已經在運行
// 獲取 Outlook 物件
outlookApp = (Microsoft.Office.Interop.Outlook.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");
}
else
{
// Outlook 沒有在運行
// 創建 Outlook 物件
outlookApp = new Microsoft.Office.Interop.Outlook.Application();
}
// 獲取通訊錄
var addressBook = outlookApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
// 創建聯繫人群組
var group = outlookApp.CreateItem(OlItemType.olDistributionListItem);
group.Subject = groupName;
group.Save();
try
{
Outlook.ContactItem newContact = (Outlook.ContactItem)
outlookApp.CreateItem(Outlook.OlItemType.olContactItem);
newContact.LastName = $"{姓名}";
newContact.FirstName = $"{工號}";
newContact.Email1Address = $"{姓名}{工號} ({郵箱})";
newContact.Email1DisplayName = $"{姓名}{工號} {郵箱}";
newContact.CompanyName = "XX公司";
newContact.Department = 部門;
newContact.FileAs = $"{姓名}{工號}@XX公司";
newContact.Account = $"{姓名}{工號}@XX公司";
newContact.Save();
group.AddMember(newContact);
group.Save();
}
catch
{
Console.WriteLine("錯誤: 這個連絡人[{0}]無法新增(可能存在)", 姓名);
}
}
catch一下是出現了什麼錯誤,如果沒猜錯的話,應該是在參考裡沒有加入.interop
可是他沒有報錯誤,確實完成執行,就是變成聯絡人、群組都各別成功創立了,但聯絡人卻不會存入群組裡
以下是我問 CHATGPT 如何使用python讀寫outlook通訊錄的方法
喵的,超無腦,我要用python改寫了
可以使用 Python 的 win32com 模組來操作 Outlook 通訊錄。
首先,確保你已經安裝了 win32com 模組。然後,可以使用以下程式碼來新增 Outlook 通訊錄:
import win32com.client
# 建立 Outlook 應用程式物件
outlook = win32com.client.Dispatch("Outlook.Application")
# 建立新的通訊錄
contact = outlook.CreateItem(10)
# 設定通訊錄的資訊
contact.FullName = "John Smith"
contact.Email1Address = "john@example.com"
contact.HomeTelephoneNumber = "123-456-7890"
# 儲存通訊錄
contact.Save()
# 關閉 Outlook 應用程式
outlook.Quit()
在上面的程式碼中,我們使用 win32com.client.Dispatch 函數建立 Outlook 應用程式物件,然後使用 CreateItem 函數建立新的通訊錄。接著,我們可以使用通訊錄物件的屬性(例如 FullName、Email1Address 和 HomeTelephoneNumber)來設定通訊錄的資訊。最後,使用 Save 函數儲存通訊錄,然後使用 Quit 函數關閉 Outlook 應用程式。
希望這些資訊能幫到你!如果你有任何疑問,歡迎再詢問。
單純聯絡人可以,但是聯絡人群組裡面放入聯絡人就會失敗
可以對GROUP操作耶~這也是AI的答覆
import win32com.client
# 建立 Outlook 應用程式物件
outlook = win32com.client.Dispatch("Outlook.Application")
# 建立新的通訊錄群組
group = outlook.CreateItem(10)
# 設定通訊錄群組的資訊
group.FullName = "My Group"
# 建立新的通訊錄
contact1 = outlook.CreateItem(10)
# 設定通訊錄的資訊
contact1.FullName = "John Smith"
contact1.Email1Address = "john@example.com"
contact1.HomeTelephoneNumber = "123-456-7890"
# 將通訊錄加入群組
group.AddMembers(contact1)
# 建立另一個通訊錄
contact2 = outlook.CreateItem(10)
# 設定通訊錄的資訊
contact2.FullName = "Jane Doe"
contact2.Email1Address = "jane@example.com"
contact2.HomeTelephoneNumber = "098-765-4321"
# 將通訊錄加入群組
group.AddMembers(contact2)
# 儲存群組
group.Save()
# 關閉 Outlook 應用程式
outlook.Quit()
Traceback (most recent call last):
File "D:\Python\TEST_2.py", line 7, in
group = outlook.CreateItem(10)
^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in CreateItem
pywintypes.com_error: (-2147024809, '參數錯誤。', None, None)
會出現這個錯誤