使用Delphi进行Outlook自动化 - Queue

时间:2011-10-05 14:51:16

标签: delphi email automation outlook

我目前有以下代码:

  while not (sqlMailMergeData.Eof) do
  begin

  if sqlMailMergeData.FieldByName('Email').AsString <> '' then
  begin
  Inc(Count);
  {Connect to Outlook}
  MailItem := OpOutlook1.CreateMailItem;
  MailItem.MsgTo := sqlMailMergeData.FieldByName('Email').AsString;
  MailItem.Body := Form48.Memo1.Text;
  MailItem.Subject := Form48.Edit3.Text;
  MailItem.Send;
  end;

  Form34.sqlMailMergeData.next;
  end;

但是,Outlook会提示您允许永久性电子邮件延迟5秒。在循环之后发送,覆盖相同的MailItem。

  MailItem.Save;

将所有项目保存到草稿而不提示。这不是一个糟糕的解决方案,可能是一个额外的功能,但需要更多的用户输入才能将项目移动到发件箱。

是否有将每个邮件发送到发件箱的功能?或者我应该考虑创建所有电子邮件地址的字符串,例如

MailItem.MsgTo := "example@email.com; example2@email.com"

由于

3 个答案:

答案 0 :(得分:3)

使用Outlook时,您可以考虑使用Outlook兑换1,这样您就可以绕过安全提示并直接从您的代码发送邮件。

答案 1 :(得分:1)

然后你唯一的选择就是Redemption在幕后做的事情 - 使用扩展MAPI。

答案 2 :(得分:0)

这是适用于我的代码:

Outlook := CreateOleObject ('Outlook.Application');

    // Repet the code below for each mail:
    OutlookMail := Outlook.CreateItem (olMailItem);  // olMailItem = 0;
    OutlookMail.Recipients.Add ('example@email.com').Resolve;
    OutlookMail.Recipients.Add ('example2@email.com').Resolve;
    OutlookMail.Subject := Form48.Edit3.Text;
    OutlookMail.Body := Form48.Memo1.Text;
    OutlookMail.BodyFormat := olFormatHTML;
    // OutlookMail.SendUsingAccount := OutlookAccount;  // If you need to select the acount
    OutlookMail.Send;