2025-07-26 03:13:48

用exchangelib发送邮件

exchangelib 是一个用于操作 Exchange 邮箱的第三方库,其接口设计简单易用,常用功能如下:

服务器自动发现( autodiscover )

对象搜索( searching )

对象创建( creating )

对象更新( updating )

对象发送( sending )

对象删除( deleting )

etc

抢先一览

下面这个例子仅用若干行代码便实现了打印输出收件箱前 100 封邮件:

1

2

3

4

5

6

7

from exchangelib import Credentials, Account

credentials = Credentials('john@example.com', 'topsecret')

account = Account('john@example.com', credentials=credentials, autodiscover=True)

for item in account.inbox.all().order_by('-datetime_received')[:100]:

print(item.subject, item.sender, item.datetime_received)

将邮箱账号和密码传给 exchangelib 之后,即可通过简单的函数调用完成各种不可以思议的操作!

安装

开始使用 exchangelib 之前,你需要先装好它。推荐从 PYPI 安装:

1

$ pip install exchangelib

默认的安装版本不支持 Kerberos 。 如果实在需要 Kerberos ,可以安装带 Kerberos 依赖的版本:

1

$ pip install exchangelib[kerberos]

想要安装最新的代码,则可以直接从 Github 安装:

$ pip install git+https://github.com/ecederstrand/exchangelib.git

最新的代码可能不太稳定,在生产中使用需要谨慎测试验证。

此外,由于 exchangelib 用到 lxml 包以及用以支持 Kerberos 认证的 pykerberos 包, 你可能需要装一些额外的系统包,具体方法因操作系统而异。

对于 Debian 系列系统:

1

2

3

4

$ apt-get install libxml2-dev libxslt1-dev

$ # For Kerberos support, also install these:

% apt-get install libkrb5-dev build-essential libssl-dev libffi-dev python-dev

对于 CentOS 系列系统:

1

2

$ # For Kerberos support, install these:

$ yum install gcc python-devel krb5-devel krb5-workstation python-devel

发送邮件

发送邮件只需初始化 Message 对象并调用 send 方法即可:

1

2

3

4

5

6

7

8

9

10

11

from exchangelib import Message

message = Message(

account=account,

subject='测试主题',

body='这是一封测试邮件',

to_recipients=(

'jim@example.com',

),

)

message.send()

其中, account 参数是账号授权信息,抢先一览小节已介绍过; subject 为邮件主题; body 为邮件体; to_recipients 指定收件人列表。

抄送、密送

抄送 收件人列表通过 cc_recipients 参数指定:

1

2

3

4

5

6

7

8

9

10

11

message = Message(

account=account,

subject='测试主题',

body='这是一封测试邮件',

to_recipients=(

'jim@example.com',

),

cc_recipients=(

'another-one@example.com',

),

)

类似地, 密送 收件人通过 bcc_recipients 参数指定:

1

2

3

4

5

6

7

8

9

10

11

message = Message(

account=account,

subject='测试主题',

body='这是一封测试邮件',

to_recipients=(

'jim@example.com',

),

bcc_recipients=(

'another-one@example.com',

),

)

HTML邮件

邮件一般不局限于纯文本,可以用 HTML 编写格式丰富的内容:

from exchangelib import HTMLBody

html = 'Hello happy OWA user!'

message = Message(

account=account,

subject='测试主题',

body=HTMLBody(html),

to_recipients=(

'jim@example.com',

),

)

发送附件

发送附件需要初始化 FileAttachment 对象,指定文件名以及文件内容, 并通过 Message 对象 attach 方法附着到邮件上:

1

2

3

4

5

6

7

8

9

10

from exchangelib import FileAttachment

logo_filename = 'logo.png'

with open(logo_filename, 'rb') as f:

logo = FileAttachment(

filename=logo_filename,

content=f.read(),

)

message.attach(logo)

message.send()

内嵌附件图片

附件图片可以嵌到 HTML 邮件体中进行展示。 此时,需要为附件指定一个 CID ,以便在 HTML 中引用:

1

2

3

4

5

6

7

8

9

10

logo_filename = 'logo.png'

with open(logo_filename, 'rb') as f:

logo = FileAttachment(

filename=logo_filename,

content=f.read(),

content_id=logo_filename,

)

message.attach(logo)

message.body = HTMLBody('Hello logo: ' % (logo_filename,))

message.send()

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注:

热闻|世预赛18强赛大结局:国足出局!日韩澳直通,沙特印尼将战附加赛
宜元贴效果如何?详解使用体验及效果评价(亲身体验分享,让你了解宜元贴的神奇效果)