通过exchangelib库连接到公司exchange邮箱

公司内网用exchange邮箱,通过exchangelib库来连接内网邮箱,根据exchangelib文档连接遇到些坑,现将几个关键部分记录如下:

先确认通过foxmail或outlook可以登录,然后再测试程序

1、BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter,这句是处理exchangelib上的SSLError:无法连接到问题的,如果报错出现类似
exchangelib.errors.TransportError: HTTPSConnectionPool(host='**********', port=443): Max retries exceeded with url: /EWS/Exchange.asmx (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1124)'))),请使用这句

2、credentials = Credentials(‘域名\用户名’, ‘密码’),这里主要是设置“域名\用户名“和密码,这里的"域名\用户名“就是foxmail中的账号。
在这里插入图片描述
3、config = Configuration(server=‘ydmail.xxxx.com.cn’, credentials=credentials, auth_type=“NTLM”)
这个部分是设置服务器,成功的关键就是服务器的设置。
server:服务器地址,注意:这个是代理服务器地址,和foxmail收件服务器是不一样的(因为foxmail的收件服务器在设置一次后再查看会自动加密处理),这个地址应该问管理员或看outlook中的代理服务器设置中的连接设置
auth_type: 这个可选 # [‘CBA’, ‘NTLM’, ‘OAuth 2.0’, ‘basic’, ‘digest’, ‘no authentication’] 其中之一,这个要根据服务器情况设置,我测试我公司必须使用“NTLM",否则报错。 【特别提示】坑:如果你选错这个auth_type,exchangelib报错通常为401 或者 Certificate(证书)之类的错误,还会友好提示参考网址,然后网址上提示你这是什么certificate问题(其实说的都是第1点的内容,和这无关),千万别被带坑里去,我就是按照坑提示折腾,结果花了两天发现就是这简单问题。

在这里插入图片描述
4、account = Account(primary_smtp_address=‘xxxx@xxx.com’, config=config,
autodiscover=False, access_type=DELEGATE)
primary_smtp_address:就是你的邮箱地址。
autodiscover:自动发现,一般如果使用了特定服务器,这个应该设置为False,我公司有特定服务器,所以这个地方就是False
access_type:DELEGATE委托方式, IMPERSONATION模拟方式,不了解的话可以测试一下

5、以上几部处理好了,基本上就应该连接成功了!

from exchangelib import DELEGATE, IMPERSONATION, Account, Credentials, Configuration, BaseProtocol, NoVerifyHTTPAdapter

username = "域名\用户名"
password = "密码"
email = "XXX@XXx.com"

BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter
credentials = Credentials(username=username, password=password, auth_type="NTLM")
config = Configuration(server='XXX.XXX.com.cn', credentials=credentials)   
account = Account(primary_smtp_address='xxx@xxx.com', config=config,
                  autodiscover=False, access_type=DELEGATE)
print('1.邮箱连接成功')

for item in account.inbox.all().order_by('-datetime_received')[:10]:
    print(item.subject, item.sender, item.datetime_received)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值