使用Outlook和Delphi从特定帐户发送电子邮件

问题描述:

当我使用Outlook自动发送来自Delphi的电子邮件时,我需要能够使用特定的发件人地址。 我有现在运行的代码,但它使用Outlook中的默认帐户,我需要能够指定另一个。 这怎么办?使用Outlook和Delphi从特定帐户发送电子邮件

我已经在VBA中完成了它,所以它在Delphi中也应该是可行的。

+3

如果你有它在VBA中工作,那么你知道你需要做什么,并离开了你的Delphi实现东西。可能使用您要使用的特定帐户的电子邮件/用户和/或密码登录到MAPI名称空间的位置。没有一些代码(最好是VBA和Delphi),我们都在这里黑暗中刺中。 – 2011-12-23 20:02:19

你的问题很可能是枚举/索引帐户集合,这从Delphi中稍稍不方便,那么你在VBA中习惯什么。

我会在下面发布一些示例代码。为了简洁和可读性,我使用了OleVariants,并在本地声明了olMailItem。在生产代码中,请确保使用早期绑定。

此外,当自动化它时,Outlook会抛出所有安全警告。

const 
    olMailItem = 0; 

var 
    application: OleVariant; 
    mailItem: OleVariant; 

begin 
    application := getActiveOleObject('Outlook.Application'); 

    mailItem := application.createItem(olMailItem); 

    mailItem.recipients.add('[email protected]'); 
    mailItem.subject := 'This is a subject'; 
    mailItem.body := '*... the best time to hang out at christmas.'; 

    // This line allows you to pick any account by name 
    mailItem.sendUsingAccount := application.session.accounts.item('some account'); 

    mailItem.send; 
end; 
+0

结果:='变异操作无效' – OZ8HP 2011-12-25 11:39:22

+1

在哪一行?调试器告诉你什么?您是否将帐户名称替换为实际存在的帐户名称? Outlook运行时是否开始?你正在运行Outlook 2007+吗?如果您需要帮助,请提供更多信息。我发布的代码是微不足道的,并且经过测试,所以请根据您没有告诉我们重要事项的假设开展工作。 – 2011-12-25 22:35:07

+0

由于一些奇怪的原因,代码 如果Outlook.Session.Accounts.Item(i)= aSender然后 是此错误的提供者 我将其更改为 AccountCurrent:= Outlook.Session.Accounts.Item(i); 如果AccountCurrent = aSender然后 其中AccountCurrent是一个字符串 我听起来很奇怪,但它是唯一我已经改变,现在的代码工作。 需要检查以确保选择了有效的帐户 - 否则我会得到另一个错误。 – OZ8HP 2011-12-26 14:11:40