Pythonスクリプトで、Exchangeのメールボックスに接続する必要があります。Outlookの使用を含め、ローカルマシンのプロファイル設定を使用しません。win32comを使用してMAPI.Sessionを作成すると、ログオンできます。 (Logon()メソッドで)既存のプロファイルを使用しますが、ユーザー名とパスワードを指定するだけです。
これは可能ですか?もしそうなら、誰かがサンプルコードを提供できますか?標準ライブラリとpywin32パッケージのみを使用したいのですが。残念ながら、ExchangeサーバーのIMAPアクセスを有効にする(そして、imaplibを使用する)ことはできません。
必要な場合:スクリプトが実行するのは、メールボックスに接続し、受信トレイのメッセージを実行して、内容を取得することだけです。そもそも接続を確立できれば、そのためのコードを書くことができます。
Outlookについて明確にするために:Outlookはローカルマシンにインストールされますが、アカウントはセットアップされていません(つまり、適切なライブラリはすべて利用可能ですが、Outlook内のセットアップとは別に操作する必要があります)。
OutlookとMAPIプロファイルを使用しないと、これは不可能だと確信しています。メール管理者にExchangeサーバーでIMAPを有効にしてもらえると、生活がずっと楽になります。
これは古いスレッドだと知っていますが...
Exchange 2007以降、またはOffice365を使用している場合は、Exchange Webサービスをご覧ください。これはExchange向けの非常に包括的なSOAPベースのインターフェイスであり、他のユーザーアカウントへの委任または偽装アクセスを含め、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 [email protected] for O365
password='topsecret'
)
account = Account(
primary_smtp_address='[email protected]',
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)
私はそれを得ました、あなたがこのように接続する必要があるアウトバウンド交換に接続するために:
import smtplib
url = YOUR_EXCHANGE_SERVER
conn = smtplib.SMTP(url,587)
conn.starttls()
user,password = (EXCHANGE_USER,EXCHANGE_PASSWORD)
conn.login(user,password)
これで通常の接続のように送信できます
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))
受信トレイからメールを取得するには、少し異なります
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()
これにより、メールの取得に使用できるメッセージIDのリストが表示されます
latest_email_id = msg_id_list[-1]
result,data = conn.fetch(latest_email_id,"(RFC822)")
raw_email = data[0][1]
今raw_emailはあなたの電子メールメッセージですが、それを解析したい場合は次のようにしてください
from email.parser import Parser
p = Parser()
msg = p.parsestr(raw_email)
今あなたはできる
msg.get('From')
msg.get('Subject')
またはコンテンツ
msg.get_payload()
しかし、マルチパートメッセージでもう少し処理が必要な場合は、幸運なことに再帰的なソリューションがこの状況に最適です。
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
今
msg_contant = process_multipart_message(msg)
毎回メッセージ全体が表示されます。
その特定のユーザーとしてプロセスを実行する方法を見つける必要があります。
pywin32.CreateProcessAsUser は、下に行く必要があるパスの始まりだと思います。最後の編集。ログオンしたユーザーハンドルは win32security.LogonUser メソッドを使用して取得されます