我在python中使用exchangelib时遇到问题.我试试这个示例代码:
from exchangelib import DELEGATE, Account, Credentials
creds = Credentials(
username='xxxx\\username',
password="mypassword"
)
account = Account(
primary_smtp_address='surname.name@xxxx.fr',
credentials=creds,
autodiscover=True,
access_type=DELEGATE
)
# Print first 10 inbox messages in reverse order
for item in account.inbox.all().order_by('-datetime_received')[:10]:
print(item.subject, item.body, item.attachments)
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的用户名但没有任何作用,我总是有相同的错误消息:
AutoDiscoverFailed: All steps in the autodiscover protocol failed
顺便说一句,以防万一它可以提供帮助,我试图使用为C#编码的Exchange Web服务,它可以完美地使用这些信用卡,我可以发送邮件:
static void Main(string[] args)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
// The last parameter is the domain name
service.Credentials = new WebCredentials("username", "password", "xxxx.lan");
service.AutodiscoverUrl("surname.name@xxxx.fr", RedirectionUrlValidationCallback);
EmailMessage email = new EmailMessage(service);
email.ToRecipients.Add("surname.name@xxxx.fr"); …Run Code Online (Sandbox Code Playgroud) python exchange-server exchangewebservices office365 exchangelib
我正在使用Pythons exchangelib包.如何使用exchangelib将电子邮件标记为已读?
我查看了我的查询的官方GitHub exchangelib页面,但没有找到答案.
我对exchangelib有问题。这是我的代码:
creds = Credentials(
username="domain_name\\username",
password="password")
config = Configuration(server='mail.solutec.fr', credentials=creds)
account = Account(
primary_smtp_address="surname.name@lab-solutec.fr",
autodiscover=False,
config = config,
access_type=DELEGATE)
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
SSLError: HTTPSConnectionPool(host='mail.solutec.fr', port=443): Max retries exceeded with url: /EWS/Exchange.asmx (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
Run Code Online (Sandbox Code Playgroud)
我可以通过添加以下内容使其起作用:
from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter
Run Code Online (Sandbox Code Playgroud)
但这只是绕过安全性,所以这不是我们想要的。如果我使用手机的共享连接,则没有错误,因此看来我的企业代理存在问题。我看到了有关传输适配器的信息,但并不太了解如何使其工作。
因此,如果没有此绕过解决方案,如何使它正常工作?
谢谢 !
我尝试使用exchangelib提取组邮箱进行分析,我想在一个日期范围内提取。
尝试使用过滤器功能,但似乎只适用于日历,请问您是否有电子邮件示例?谢谢大家。
我正在尝试使用 Python 的 exchangelib 模块在我的邮箱中完成一项任务 - 如果某个电子邮件包含特定主题并且具有“未读”状态,如何将其移动到文件夹。
while True:
print("Checking inbox...")
for msg in acc.inbox.filter(subject="Kontrol fra EVT...", is_read=False):
if "SOS" in msg.text_body:
pass
else:
msg.is_read = True
print("Moving to EVT folder...")
msg.move(archive)
time.sleep(0.5)
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
除了msg.is_read = True部分,一切似乎都在工作。尽管已成功移动到所需的文件夹,但消息仍未读。
我相信我在这里遗漏了一些简单的东西。我尝试使用谷歌搜索并使用官方模块的文档,但在这方面却是空的。只能找到一个和我有同样问题的人:用 exchangelib 将电子邮件标记为已读
谢谢!
我想接收非收件箱文件夹的邮件 - 我该怎么做?
我可以像这样获取收件箱文件夹的电子邮件:
from exchangelib import DELEGATE, Account, Credentials, EWSDateTime
creds = Credentials(
username='xxx.test.com\test',
password='123456')
account = Account(
primary_smtp_address='test@test.com',
credentials=creds,
autodiscover=True,
access_type=DELEGATE)
# Print first 100 inbox messages in reverse order
for item in account.inbox.all().order_by('-datetime_received')[:100]:
# print(item.subject, item.body, item.attachments)
print(item.subject)
Run Code Online (Sandbox Code Playgroud)
给予:
hahaha
heiheihei
pupupu
bibibib
........
Run Code Online (Sandbox Code Playgroud)
当我拿到我的文件夹时:
from exchangelib.folders import Messages
for f in account.folders[Messages]:
print f
Messages (aaa)
Messages (bbb)
Messages (ccc)
Run Code Online (Sandbox Code Playgroud)
如何ccc使用 Python从文件夹中取出电子邮件?
我正在尝试使用呈现 html 的 Exchangelib 发送电子邮件。
下面是我的电子邮件功能和正文
def send_email(account, subject, body, recipients):
"""
>>> send_email(account, 'Subject line', 'Hello!', ['info@example.com'])
"""
to_recipients = []
for recipient in recipients:
to_recipients.append(Mailbox(email_address=recipient))
# Create message
m = Message(account=account,
folder=account.sent,
subject=subject,
body=body,
to_recipients=to_recipients)
m.send_and_save()
"""
<hr>
<table class=3D"x_data_table" style=3D"margin:0px auto;border-collapse:coll=
apse;width:800px;display:inline">
<thead>
<tr>
<th style=3D"border-bottom:2px solid rgb(17, 29, 51)">Item</th>
<th style=3D"border-bottom:2px solid rgb(17, 29, 51)">Created</th>
<th style=3D"border-bottom:2px solid rgb(17, 29, 51)">Created By</th>
</tr>
</thead>
<tbody>
<tr class=3D"x_odd" style=3D"background-color:rgb(245, 245, 245)">
<td class=3D"x_table_long_text" style=3D"border:1px solid rgb(191, 194, …Run Code Online (Sandbox Code Playgroud) 我想在收件箱中读出最新的电子邮件,从中选择附件并将电子邮件移动到一个文件夹中。我已经有了保存附件的代码:
from exchangelib import Credentials, Account
import os
credentials = Credentials('test.name@mail.com', 'password')
account = Account('test.name@mail.com', credentials=credentials, autodiscover=True)
for item in account.inbox.all().order_by('-datetime_received')[:1]:
for attachment in item.attachments:
fpath = os.path.join("C:/destination/path", attachment.name)
with open(fpath, 'wb') as f:
f.write(attachment.content)
Run Code Online (Sandbox Code Playgroud)
但是我在将电子邮件移动到收件箱以外的另一个文件夹时遇到了问题。到目前为止,我只找到了这个选项:
item.move(to_folder)
Run Code Online (Sandbox Code Playgroud)
但是不知道文件夹名应该怎么写。任何人都可以给我一个例子吗?
提前致谢。
我想将一封电子邮件标记为从我的 python 代码中读取的。我在用着
from exchangelib import Credentials, Account
my_account = Account(...)
credentials = Credentials(...)
Run Code Online (Sandbox Code Playgroud)
访问该帐户。这部分效果很好。然后我使用这个进入我想要的文件夹
var1 = my_account.root / 'branch1' / 'desiredFolder'
Run Code Online (Sandbox Code Playgroud)
再说一次,这效果很好。这就是将其标记为已读似乎不起作用的地方。
item = var1.filter(is_read=False).values('body')
for i, body in enumerate(item):
#Code doing stuff
var1.filter(is_read=False)[i].is_read = True
var1.filter(is_read=False)[i].save(updated_fields=['is_read'])
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这篇文章Mark email as read with Exchangelib中的提示和答案,但电子邮件仍然显示为未读。我究竟做错了什么?
exchangelib ×9
python ×8
email ×3
enterprise ×1
office365 ×1
outlook ×1
proxy ×1
python-2.7 ×1
python-3.x ×1