Exchange服务调用实现邮件自动发送

前言

我上篇搞了个自动抓取sap日志表的操作,然后通过webhook发给企业微信。
SAP霸道的内置函数RFC_READ_TABLE | Haha not only a lot
但是实际有些问题:

  • 脚本执行的环境是我自己电脑,那我电脑关机的情况下,作业就无法执行了。
  • 使用外部server,无法连接到公司的sap系统。
  • 使用内部server,无法访问internet,无法触发消息发送。

因为作业是抓取当天的日志,所以如果差了一天,可能就会漏掉监控……
实际也确实发生过了……

今天偶尔想了下,是否有邮件发送的方式,一搜,还真的有。
使用内部邮箱的话,将监控信息发给自己。同时也因为都是公司内部应用,可以将脚本放在内部server上,这样上面的问题就都解决了。

非常nice~🤪🤪🤪🤪🤪🤪

技术实现

使用exchangelib三方库。
这个库整体用起来非常的简单。但是安装的时候会发现它需要安装很多依赖库。同时不同的功能需要import不同的模块进来。
整体不难用。
大致发送邮件的代码如下,即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from exchangelib import Credentials, Account, Message, Mailbox

# 邮件标题
subject = "测试"
# 邮件正文
text = """
测试!
"""
def send():
user = params_connection['user']
passwd = params_connection['passwd']
from_addr = params_connection['from']

credentials = Credentials(user, passwd)
account = Account(from_addr, credentials=credentials, autodiscover=True)

m = Message(
account = account, # 之前申明的账户
subject = subject,
body = text,
to_recipients = [
Mailbox(email_address = '802@macn'),
# Mailbox(email_address = '695@ma.cn'),
],
cc_recipients=['carl@c', 'denic@e'],
bcc_recipients=[Mailbox(email_address='erik@m'),]
)

m.send()

我干了点啥

抓取的东西还是之前的东西,
做了一定程度调整,然后就可以用邮件发送了。

这样每天定时发送到自己邮箱,就可以了。