我們的應用程序中有以下功能,可在Outlook中打開新郵件,以便用戶可以通過Outlook發送電子郵件。Outlook切換到office後無法使用新郵件
program SO_37131815;
{$APPTYPE CONSOLE}
uses
Classes, ActiveX, ComObj, Variants, SysUtils;
procedure OutlookMail(ToAddress, Subject: string);
var
OutlookProgram: OLEVariant;
MailItem: Variant;
begin
try
OutlookProgram := GetActiveOleObject('Outlook.Application');
except
OutlookProgram := CreateOleObject('Outlook.Application');
end;
MailItem := OutlookProgram.CreateItem(0);
if ToAddress = '' then begin
ToAddress := ' ';
end;
MailItem.Recipients.Add(ToAddress);
MailItem.Subject := Subject;
try
MailItem.Display(False); //.Display(Modal)
except
//don't worry...
end;
OutlookProgram := Unassigned;
end;
begin
CoInitialize(nil);
OutlookMail('', 'blah');
end.
這工作得很好了多年......因爲前兩天當客戶端切換到Office365。 當從Outlook創建新消息時它工作正常,當它從我們的應用程序創建時,它不能發送消息。
在Outlook 2010中,錯誤消息是: 「無法完成操作,一個或多個參數值無效。」
在展望2016年的錯誤消息是: 「對不起,出了問題你可能想再試一次。」。
我也注意到,當我們的應用程序創建新消息時,它不能保存到草稿,並且會引發相同的錯誤。
該過程打開新的消息窗口,但是當按下發送郵件時,Outlook無法發送它。 我能做些什麼來解決這個問題?我需要在Display被調用之前設置一些屬性嗎?
更新:感謝David的堅持,我縮小了範圍。 ToAddress參數爲空(或空格)時,Outlook會產生錯誤。 因此,添加下面的代碼似乎解決了這個問題。
if Trim(ToAddress) <> '' then begin
MailItem.Recipients.Add(ToAddress);
end;
有沒有人有更好的主意?
你能生產出[MCVE] –
任何與Outlook(設置與office365工作)可以複製粘貼到按鈕的程序並調用它。我不明白還有什麼要做。 – georstef
如果我們有一個完整的程序,這將是較少的工作。我們必須確保我們指定了必要的使用條款。我們可以粘貼一個完整的控制檯應用程序對我們來說會少一些工作,並且我們確信我們正在運行與您相同的代碼。想必你自己有Office 365?你有沒有做過任何調試?哪一行代碼導致錯誤? –