首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Delphi发送Outlook电子邮件

用Delphi发送Outlook电子邮件
EN

Stack Overflow用户
提问于 2020-10-05 17:23:59
回答 1查看 1.8K关注 0票数 1

我可以通过OLE在Delphi 10.4和Outlook 365之间成功地发送电子邮件。

代码语言:javascript
运行
复制
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;

一切都很顺利。但是我更喜欢直接发送电子邮件而不显示电子邮件编辑器。

当我用这个的时候

代码语言:javascript
运行
复制
MailItem.Send;

我明白了

代码语言:javascript
运行
复制
EOleSysError: The parameter is incorrect

怎么了?我怎样才能跳过编辑而只发送电子邮件呢?有什么建议吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-10-15 19:26:28

今天可能是你的幸运日,鲍勃!

我维护一个使用Outlook对象模型发送电子邮件的应用程序。发送电子邮件的代码几年来一直没有变化,成千上万的用户已经成功地使用了它。

在过去几周中,其中一些用户升级到了Office 365的最新版本,并开始在调用MailItem.Send时遇到完全相同的“参数不正确”错误。所有这些用户都有相同的共同点:

  1. 他们做了而不是升级了我们的应用程序(他们仍然在运行相同的版本,多年来运行得很好)
  2. 他们做了升级Office 365.

鉴于以上两点,不需要火箭科学家就可以得出结论,微软在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里测试过。

代码语言:javascript
运行
复制
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是否为您修复了错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64213396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档