0
我使用下面的代碼來發送使用Outlook 2010郵件得到正確的返回值,但該行不從Outlook
Result := MailItem.Sent;
返回一個錯誤
該項目已經被移動或刪除
我該如何解決這個問題,這個函數給了我一個可用的返回值?
function olSendMail(aFrom, aSubject, aBody, aTo, aCC, aBcc: string; aMailFiles: TStringList; aReceipt: boolean = False; aPreview: boolean = True): boolean;
var
Outlook: OleVariant;
MailItem: OleVariant;
i: integer;
MailInspector: variant;
const
olMailItem = $00000000;
begin
try
try
Outlook := GetActiveOleObject('Outlook.Application');
except
Outlook := CreateOleObject('Outlook.Application');
end;
MailItem := Outlook.CreateItem(olMailItem);
if olAccountValid(aFrom) then
MailItem.SendUsingAccount := Outlook.Session.Accounts.Item(aFrom);
MailItem.To := aTo;
MailItem.Cc := aCc;
MailItem.Bcc := aBcc;
MailItem.Subject := aSubject;
MailItem.Body := aBody;
for i := 0 to aMailFiles.Count - 1 do
MailItem.Attachments.Add(aMailFiles.Strings[i]);
MailItem.ReadReceiptRequested := aReceipt;
MailItem.OriginatorDeliveryReportRequested := aReceipt;
if aPreview = True then
begin
MailInspector := MailItem.GetInspector;
MailInspector.Display(True);
end
else
MailItem.Send;
Result := MailItem.Sent;
except
on E:Exception do
begin
Logfile.Error('U_Mailing.Outlook.SendMailOutlook: ' + E.Message);
Result := False;
end;
end;
end;
行 - 所以你說的是,這是不可能的,檢查郵件是否發送正確使用這種方法。在'我的世界'中有一點奇怪,因爲MAPI方式可以讓你選擇檢查SUCCESS_SUCCESS - 但它是微軟,所以任何事情都是可能的。 – OZ8HP
這是正確的。在低級別上,調用IMessage :: SubmitMessage可以返回S_OK,但這僅僅意味着消息具有收件人,並且它們都已解析。可能會發生這種情況,網絡電纜被拔出或者您的SMTP密碼不正確。由於該操作是異步的,因此您只能獲得一個NDR。 –