我可以通过OLE在Delphi 10.4和Outlook 365之间成功地发送电子邮件。
try
Outlook:=GetActiveOleObject('Outlook.Application');
except
Outlook:=CreateOleObject('Outlook.Application');
end;
try
MailItem:= Outlook.CreateItem(olMailItem) ;
SubjectLine:= 'Whatver';
MailItem.Subject:= SubjectLine;
EmailTo:= 'somebody@somewhere.com';
MailItem.Recipients.Add(EmailTo);
MailItem.BodyFormat := olFormatPlain;
MailItem.GetInspector;
Attachment:= 'C:\File.doc';
MailItem.Attachments.Add(Attachment);
MessageBodyStr:= 'Dear Friend';
MailItem.Body:= MessageBodyStr;
MailItem.Display(False);
finally
Outlook := Unassigned;
end;
一切都很顺利。但是我更喜欢直接发送电子邮件而不显示电子邮件编辑器。
当我用这个的时候
MailItem.Send;
我明白了
EOleSysError: The parameter is incorrect
怎么了?我怎样才能跳过编辑而只发送电子邮件呢?有什么建议吗?
谢谢
发布于 2020-10-15 19:26:28
今天可能是你的幸运日,鲍勃!
我维护一个使用Outlook对象模型发送电子邮件的应用程序。发送电子邮件的代码几年来一直没有变化,成千上万的用户已经成功地使用了它。
在过去几周中,其中一些用户升级到了Office 365的最新版本,并开始在调用MailItem.Send时遇到完全相同的“参数不正确”错误。所有这些用户都有相同的共同点:
鉴于以上两点,不需要火箭科学家就可以得出结论,微软在Office 365的最新版本中一定发生了一些变化,而这种变化正是导致这一错误的原因。
我与微软的Office 365支持团队一起打开了一个案例,正如所预料的那样,这个案子在没有微软提供任何解决方案的情况下,就在原地打转。
错误消息“参数不正确”的愚蠢之处在于,MailItem.Send不接受任何参数!
总之,我放弃了微软的Office 365支持团队,开始修改代码,多年来没有改变过。
经过多次修改后,我发现,由于一些未知和无文档的原因,对MailItem.GetInspector的调用似乎导致了随后对MailItem.Send的调用来引发错误。当我注释掉MailItem.GetInspector时,MailItem.Send工作得很好,没有引起错误。
但是对我来说,注释掉MailItem.GetInspector并不是一个长期的选择,因为我使用检查器对电子邮件体做了几次操作。
因此,我读取了检查对象的文档,并找到了Close方法。在电子邮件体操作之后和调用MailItem.Send之前,我向MailItem.Send添加了一个调用。对啰!修正了错误!
下面是一些工作的VBA示例代码。我在Excel里测试过。
Sub TestSendEmail()
Dim app As Outlook.Application
Dim nameSpace As Outlook.nameSpace
Dim folder As Outlook.MAPIFolder
Dim mailItem As Outlook.mailItem
Dim insp As Outlook.Inspector
Dim wordDocumentEditor As Word.Document
On Error GoTo errorHandler
Set app = New Outlook.Application
Set nameSpace = app.GetNameSpace("MAPI")
Set folder = nameSpace.GetDefaultFolder(Outlook.olFolderOutbox)
Set mailItem = app.CreateItem(Outlook.olMailItem)
mailItem.Subject = "Test Subject"
mailItem.To = "joe.kelly@binarystream.com"
Set insp = mailItem.GetInspector
Set wordDocumentEditor = insp.WordEditor
wordDocumentEditor.Range(0, 0).InsertBefore ("Test Body")
insp.Close (olSave)
MsgBox "Calling Send"
mailItem.Send
MsgBox "Send Complete"
Done:
Exit Sub
errorHandler:
MsgBox "The following error occurred: " & Err.Number & ": " & Err.Description
End Sub
鲍勃,请回复,让我知道Inspector.Close是否为您修复了错误。
https://stackoverflow.com/questions/64213396
复制相似问题