通过SQL连接到Outlook

时间:2018-04-09 20:39:01

标签: sql-server outlook

您可以打开与Outlook的连接并通过某些文件夹中的电子邮件进行查询吗?我试图连接到不在我本地计算机上的电子邮件帐户,因此我可以每天计算所有具有特定主题的电子邮件。最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

Python + SQLite。

您可以使用Python运行SQL over Outlook

您可以连接到特定文件夹并从中下载所有电子邮件。

然后您有几种选择:

  • 使用Python for循环计数电子邮件
  • 将所有电子邮件主题提取到SQLite表中并对其执行SQL

在此示例中

我正在寻找一封电子邮件中的特定信息(经过的时间):

Target: Snowflake - DY_Position_TD
Started On: 2019-07-24 12:00:20
Ended On: 2019-07-24 13:12:18
Records Added: 4,180,659

提取到SQLite表后,我使用了以下查询:

SELECT tname, asodt, max(  Cast ((  JulianDay(ended_on) - JulianDay(started_on)) * 24 * 60  As Integer)) diff 
from stats 
group by 1, 2 
order by 1 desc,2 desc

结果(每天生成):

C:\temp\Python37-32>python max_elapsed.py
DY_Position_TD,  2019-07-23      71
DY_Position_TD,  2019-07-22      67
DY_Position_TD,  2019-07-19      79
DY_Position_SD,  2019-07-23      6
DY_Position_SD,  2019-07-22      6
DY_Position_SD,  2019-07-19      6
DY_FinancingPosition,    2019-07-23      16
DY_FinancingPosition,    2019-07-22      15
DY_FinancingPosition,    2019-07-19      15

答案 1 :(得分:0)

可以通过在 Microsoft SQL Server 数据容器和正在运行的 Outlook 实例 (available tables) 之间进行读/写来使用 Invantive SQL。免责声明:我从事 Invantive SQL 的工作。

示例查询:

create or replace table contacts@sqlserver
as
select *
from   contacts@outlook

记得先启动 Outlook 并确保所需的商店在 Outlook 配置文件中可用。

对于邮件,使用类似:

select *
from   mails@outlook
where  subject like '%my hot topic%'

可以通过提供文件夹ID或商店ID作为表函数参数来优化查询:

select *
from   mails(folderEntryId => VALUE, storeEntryId => VALUE)@outlook

值可以在stores@outlook中找到,例如:

select mal.subject
from   stores@outlook ste
join   mails@outlook(storeEntryId => ste.storeid) mal
where  ste.displayname = 'Camera'

相反的方向也是可能的,例如使用 insertupdate 在 Outlook 中插入或更新邮件。