email - 切换到office365后outlook发新邮件不起作用

标签 email delphi outlook ole

我们的应用程序中有以下功能,可以在 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.

it's all greek to me

自从几天前客户切换到 Office365 以来,这种方法多年来一直运行良好。 当从 Outlook 创建新消息时,它工作正常,当从我们的应用程序创建新消息时,它无法发送消息。

在 Outlook 2010 中,错误消息为: “无法完成操作。一个或多个参数值无效。”

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

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

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

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

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

有人有更好的主意吗?

最佳答案

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

所以解决方案是避免上述情况:

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

关于email - 切换到office365后outlook发新邮件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37131815/

相关文章:

java - 将电子邮件地址与 <...> 进行模式匹配

java - 写入文件不会写入

delphi - 在桌面上书写文字

database - 使用 delphi 的 Dll 中的数据模块?

python - 使用 Python 获取 Outlook 联系人

PHP 联系表单发送空电子邮件

java - 在遵循 Google App Engine Java 教程时,无法正常使用电子邮件

delphi - 如何从仅包含两个不同数字的数字中获取组合数?

c# - 如何以编程方式在 Outlook 邮件正文中创建表格

email - 从不在 session 帐户中的非默认帐户发送邮件