【问题标题】:Outlook new message does not work after switching to office365切换到office365后Outlook新邮件不起作用
【发布时间】:2016-09-05 00:51:04
【问题描述】:

我们的应用程序中有以下功能,可以在 Outlook 中打开一条新消息,以便用户可以通过 Outlook 发送电子邮件。

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 中,错误消息是: “无法完成操作。一个或多个参数值无效。”

在 Outlook 2016 中,错误消息是: “抱歉,出了点问题。您可能想再试一次”

我还注意到,当从我们的应用程序创建新消息时,它无法保存到草稿中,并且会引发相同的错误。

该过程会打开新的邮件窗口,但是当按下发送邮件时,Outlook 无法发送它。 我能做些什么来解决这个问题?我需要在调用 Display 之前设置一些属性吗?

更新:感谢 David 的坚持,我缩小了范围。当 ToAddress 参数为空(或空格)时,Outlook 会产生错误。 所以添加以下代码似乎可以解决问题。

if Trim(ToAddress) <> '' then begin
  MailItem.Recipients.Add(ToAddress);
end;

有人有更好的主意吗?

【问题讨论】:

  • 你能不能提供一个minimal reproducible example
  • 任何拥有 Outlook(设置为使用 office365)的人都可以将程序复制粘贴到按钮中并调用它。我不明白还能做什么。
  • 如果我们有一个完整的程序,工作量就会减少。我们必须确保我们指定了必要的使用条款。我们可以粘贴的完整控制台应用程序对我们来说工作量会减少,而且我们会确保我们运行的代码与您相同。大概您自己拥有 Office 365?你有没有做过任何调试?哪一行代码导致错误?
  • 感谢您的编辑。我将其进一步发展为一个完整的程序。我们现在可以粘贴它并直接运行它,而不会造成混淆。如果我是你,我会去掉代码,看看你是否能找出一条不会发生错误的行。
  • 我不确定您是否解决了问题。如果ToAddress 为空,为什么要添加MailItem.Recipients.Add(ToAddress);

标签: email delphi outlook ole


【解决方案1】:

ToAddress 参数为空时,不应将空格(或空字符串)参数传递给MailItem.Recipients.Add 方法。

所以解决办法是避免上述情况:

if Trim(ToAddress) <> '' then
  MailItem.Recipients.Add(ToAddress);

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 2012-09-18
    • 2019-10-09
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2021-07-14
    相关资源
    最近更新 更多