Ton*_*yer 22 python email connection exchange-server pywin32
我需要在Python脚本中连接到Exchange邮箱,而不使用本地计算机上的任何配置文件设置(包括使用Outlook).如果我使用win32com创建MAPI.Session,我可以使用现有的配置文件登录(使用Logon()方法),但我想提供用户名和密码.
这可能吗?如果是这样,有人可以提供示例代码吗?我更喜欢它只使用标准库和pywin32包.遗憾的是,无法为Exchange服务器启用IMAP访问(然后使用imaplib).
如果有必要:所有脚本将执行的操作是连接到邮箱,并运行收件箱中的邮件,检索内容.如果我能在第一时间获得连接,我可以为此编写代码!
有关Outlook的说明:Outlook将安装在本地计算机上,但它没有任何帐户设置(即所有相应的库都可用,但我需要独立于Outlook内部的任何设置运行).
Eri*_*and 101
我知道这是一个老线程,但......
如果您使用的是Exchange 2007或更高版本或Office365,请查看Exchange Web服务.它是一个非常全面的基于SOAP的Exchange界面,您可以做任何Outlook能够做的事情,包括委托或模拟访问其他用户帐户.
http://msdn.microsoft.com/en-us/library/bb204119.aspx
更新:我在PyPI上发布了一个支持自动发现,日历,收件箱,任务,联系人等的Python EWS客户端:
from exchangelib import DELEGATE, Account, Credentials
credentials = Credentials(
username='MYWINDOMAIN\\myusername', # Or myusername@example.com for O365
password='topsecret'
)
account = Account(
primary_smtp_address='john@example.com',
credentials=credentials,
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)
Run Code Online (Sandbox Code Playgroud)
小智 27
我有它,连接到出站交换,你需要像这样连接:
import smtplib
url = YOUR_EXCHANGE_SERVER
conn = smtplib.SMTP(url,587)
conn.starttls()
user,password = (EXCHANGE_USER,EXCHANGE_PASSWORD)
conn.login(user,password)
Run Code Online (Sandbox Code Playgroud)
现在您可以像普通连接一样发送
message = 'From: FROMADDR\nTo: TOADDRLIST\nSubject: Your subject\n\n{}'
from, to = fromaddr,toaddrs
txt = 'This is my message'
conn.sendmail(fromaddr,toaddrs,msg.format(txt))
Run Code Online (Sandbox Code Playgroud)
从收件箱中获取邮件有点不同
import imaplib
url = YOUR_EXCHANGE_URL
conn = imaplib.IMAP4_SSL(url,993)
user,password = (EXCHANGE_USER,EXCHANGE_PASSWORD)
conn.login(user,password)
conn.select('INBOX')
results,data = conn.search(None,'ALL')
msg_ids = data[0]
msg_id_list = msg_ids.split()
Run Code Online (Sandbox Code Playgroud)
这会为您提供一个消息ID列表,您可以使用它来获取电子邮件
latest_email_id = msg_id_list[-1]
result,data = conn.fetch(latest_email_id,"(RFC822)")
raw_email = data[0][1]
Run Code Online (Sandbox Code Playgroud)
现在raw_email是你的电子邮件消息,但它不是很漂亮,如果你想解析它做这样的事情
from email.parser import Parser
p = Parser()
msg = p.parsestr(raw_email)
Run Code Online (Sandbox Code Playgroud)
现在你可以做到
msg.get('From')
msg.get('Subject')
Run Code Online (Sandbox Code Playgroud)
或者内容
msg.get_payload()
Run Code Online (Sandbox Code Playgroud)
但如果它是一个多部分消息,你需要做更多的处理,幸运的是递归解决方案是完美的这种情况
def process_multipart_message(message):
rtn = ''
if message.is_multipart():
for m in message.get_payload():
rtn += process_multipart_message(m)
else:
rtn += message.get_payload()
return rtn
Run Code Online (Sandbox Code Playgroud)
现在
msg_contant = process_multipart_message(msg)
Run Code Online (Sandbox Code Playgroud)
每次都会给你全部的信息.
我非常确定,如果不使用 Outlook 和 MAPI 配置文件,这是不可能的。如果您能甜言蜜语地说服您的邮件管理员在 Exchange 服务器上启用 IMAP,那么您的生活会轻松很多。
| 归档时间: |
|
| 查看次数: |
76899 次 |
| 最近记录: |