Lotus Notes
Up one levelLotus Notesのメールをgmailに転送してiPodで見るためのpythonスクリプト
Lotus Notesのメールをgmailに転送して、iPodで読めるようにしてみました。 ただ、メールによってはiPodで見ると文字化けします。gmailをブラウザで見ると問題ありません。 ただでさえ難しい漢字のコードですが、メールが絡んでくるとますます分かりませんね。
# -*- coding: utf-8 -*-
"""
Lotus Notesに届いたメールをgmailに転送する
ボディは140文字で切る
Version 0.90
2009/12/18
"""
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
import win32com.client ## COM モジュールをインポート
import datetime
import time
def get_forward_mail_list(DBServer,DBFile,base_time):
"""
base_time以後のメールリスト返す
"""
mail_lst=[]
nSs=win32com.client.Dispatch("Notes.NotesSession") ## NOTES COM オブジェクトを開く
nDb = nSs.GetDataBase(DBServer, DBFile) ## DBのオブジェクト
view = nDb.GetView("$Inbox")
doc = view.GetLastDocument ## Viewの一番下の文書を設定
date_t = doc.GetItemValue('DeliveredDate')
while doc:
date_t = doc.GetItemValue('DeliveredDate')
#DeliveredDateの型がうまく処理できないので、原始的に処理する
DeliveredDate = datetime.datetime(date_t[0].year,date_t[0].month,date_t[0].day,
date_t[0].hour,date_t[0].minute,date_t[0].second)
if DeliveredDate > base_time:
subject = doc.GetItemValue('Subject') ##題目を取る
body = doc.GetItemValue('Body')
#id = doc.GetItemValue('$MessageID')
send_to = doc.GetItemValue('SendTo') #タプルになっている
mail_from = doc.GetItemValue('From')
mail_dic ={} # メールの内容をディクショナリにする
mail_dic['subject'] = subject[0]
mail_dic['DeliveredDate'] = DeliveredDate
mail_dic['body'] = body[0][:140]
mail_dic['from'] = mail_from[0]
mail_lst.append(mail_dic)
doc = view.GetPrevdocument(doc)
else:
print "break"
break
return mail_lst
def send(from_addr, to_addr, msg):
# 認証のないSMTPから送る
# SMTPの引数を省略した場合はlocalhost:25
s = smtplib.SMTP('xxx.xxx.xxx.xxx')
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
def send_via_gmail(from_addr, to_addr, msg):
# gmail から送る
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('xxxx@gmail.com', 'password')
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
def create_message2(from_addr, to_addr, subject, body, encoding):
# 'text/plain; charset="encoding"'というMIME文書を作ります
msg = MIMEText(body, 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def get_from_addr(mail_from,from_addr):
"""
転送するメールアドレスがインターネットメールなら、送り主の名前を送信者にする
"""
if '@' in mail_from:
addr = mail_from
else:
addr = from_addr
return addr
if __name__ == '__main__':
DBServer = "CN=xxx/O=xxx" # notes サーバ名
DBFile = "mail\xxxx.nsf" #メールのファイル指定
from_addr_def = 'Lotus Notes <xxx@xxx.com>' # 転送時に表示されるメールアドレス
to_addr = 'xxxxx@gmail.com' # 転送先のアドレス
start_time = datetime.datetime.now() # プログラムを起動した時間
#プログラム起動時には指定時間前までのメールを転送
base_time = start_time - datetime.timedelta(hours = 2) # 2時間前
interval = 2 * 60 # チェックの感覚を秒で指定
while 1:
print start_time,base_time
mail_lst = get_forward_mail_list(DBServer,DBFile,base_time)
# 最後のメールの時間を基準時間にしてそれ以降のメールを転送する
try:
base_time = mail_lst[0]['DeliveredDate']
except:
base_time = base_time
# 古いものから先に送るために並び替える
mail_lst.reverse()
print base_time
for line in mail_lst:
subject = "FW:" + line['subject'] + ' : ' + line['from']
body = line ['body']
mail_from = line['from']
from_addr = get_from_addr(mail_from,from_addr_def)
print line['DeliveredDate']
print from_addr
print subject
print body
print
msg = create_message2(from_addr, to_addr, subject, body, 'utf-8')
send(from_addr, to_addr, msg)
time.sleep(interval)
- Category(s)
- python
- Lotus Notes
- tools
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2155/tbping
できる Groove 2007 Windows Vista対応
できる Groove 2007 Windows Vista対応
Grooveとは、クライアント同士がP2P(ピアツーピア)方式で通信を行なう、サーバ不要のグループウェアです。グループウェアの草分けである「Lotus Notes」(ロータス・ノーツ)を作ったRay Ozzie氏が設立したGroove Networks社によって開発され、現在はマイクロソフトから提供されています。
サーバや管理者がいらないので、小人数のプロジェクトにはちょうどいいなと思って見ていたのですが、2001年ごろちょっと話題になったり、本も出たりしたのですが、その後噂を聞くこともありませんでした。
昨日、秋葉原のヨドバシカメラでマイクロソフトのコーナで売っているのを見つけました。
でも25000円もするし、相手がいないと成り立たないソフトなので、最低50000円の出費となります。
そこでまずは、本を買って読んでみることにしました。
結果、このソフトでなければダメだという業務がほとんどないため、話題にならないのも当然という気がしました。
ロータスノーツが全盛だったころとは、回りの環境が大きく変わってしまったんですね。
今なら、Grooveの機能のほとんどはWEBアプリケーションでも快適に利用できます。
P2Pでファイルを共有するという機能は、今でも特徴的ですが、便利に使えるのは、個人事業者が他者とファイルの共有をするという場面くらいしか思い付きません。
このソフトは、グループウエアであり、相手にもソフトをインストールしてもらう必要があります。仮りに私がこのソフトをどんなに気にいっても、他人に25000円を出させるのは難しいです。グループウエアとして使うためには、たくさんの人にインストールしてもらわなければなりません。不可能です。
マイクロソフトもこんなソフトを売るくらいなら、サービスの一貫として無料で提供した方がトータルとしては有利ではないかと思います。
でも、考えてみると、多くの人が使うであろうカレンダーの共有やチャットは他のサービスの方が便利です。ロータスノーツから受け継いだ文書データベースの機能は、作り込みが必要ですし、いずれにしろGrooveをいれている人しか利用できないのですから、わざわざそんなツールを選ぶ人がいるとは思えません。
ソフト自体を買わなくて良かったです。
興味のあるかたは、60日期限つきの試用版がありますので、それを利用しましょう。
- Category(s)
- Lotus Notes
- books2008
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/1534/tbping
マインドマップ図解術 マインドマップ練習帳 マインドマップ仕事術
マインドマップ図解術 マインドマップ練習帳 マインドマップ仕事術
昨日、秋葉原の書泉にいったら三冊まとめて売っていました。
図解術は多くの例が載っていていいですね。
仕事術も実際の仕事にどんな感じで使えるのかがわかります。
練習帳は、小学校のドリルのような感じです。
それぞれ、1000円ですのでとてもお買い得だと思います。
仕事術には、
- W-Zero3で動くポケットマインドマップ(Pocket Mindmap)というのがあること
- マインドマネージャとリザルトマネージャの連携
- ロータスノーツのマップ化
などの情報がありました。
- Category(s)
- Lotus Notes
- tools
- books07-01
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/1128/tbping
Lotus NotesのデータをEXCELで取る
pythonからNotesのデータが取れるのであれば、EXCELからも当然取れるということにふと気づく。次の例はsheet1に取りたいフィールド名を書いておくと、sheet2にデータが取れるというものである。
実際に使う場合は、EXCELの範囲に名前を付けておき、一行目にフィールド名を書くようにして、列の追加や削除が合った場合でもプログラムの変更が必要ないようにしておくと良い。そうしておけば、ユーザがEXCELの機能だけを使って、フィールドの追加、削除をすれば、ほしいデータが取れるようになる。また、NOTESへのリンクをお尻につけているので、EXCEL上のリンクをダブルクリックするとNOTESに飛ぶこともできる。
Sub getSubject()
Dim nSs As Object, nDb As Object
Dim nDocs As Object, nDoc As Object
Application.Visible = True
DBServer = "CN=hoge/O=hoge" 'Server name
DBFile = "hoge.nsf" 'Database name
Set nSs = CreateObject("Notes.NotesSession")
Set nDb = nSs.GetDataBase(DBServer, DBFile)
Set nDocs = nDb.GetView("hoge") 'select View
N = nDocs.EntryCount
Set nDoc = nDocs.GetFirstDocument
For i = 1 To N
For j = 1 To 5
field = Sheet1.Cells(1, j)
Sheet2.Cells(i, j).Value = nDoc.GetItemValue(field)(0)
Next
Sheet2.Cells(i, 6).Value = nDoc.NotesURL
Set nDoc = nDocs.GetNextDocument(nDoc) ' select next Document
Next
End Sub
- Category(s)
- Lotus Notes
- EXCEL
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/14/tbping
Lotus Notesのデータをpythonで取る
LotusNOTESを使っている企業も多いのではないだろうか?導入時点では、その選択は正しかったが、その後インターネットやWEBが主流になって肩身が狭い。特に問題なのは、データが他のシステムに渡しにくいところだ。もちろん、そうしたソフトはあるが高いし、一般ユーザが使うのは困難だろう。そこで、NOTESのデータをデータベースに取り込んでZopeで見せたいなどというときは、次のようなプログラムでpythonからNotesのクライアント経由でデータをテキストファイルに落とすことができる。RubyでNotesにアクセスする方法を参考にさせていただいた。注意点としては、ビューで選択されば文書を全部落とすので、適切なビューを選ぶこと。競合文書も落としてしまう。
必要なもの:
- Windowsの動くPC
- NOTESクライアント
- Windows用python
- python Win32Extention
import string,win32com.client ## COM モジュールをインポート
nSs=win32com.client.Dispatch("Notes.NotesSession") ## NOTES COM オブジェクトを開く
DBServer = "CN=hoge/O=hoge" ## replace server name
DBFile = "hoge.nsf" ##replace DB name
nDb = nSs.GetDataBase(DBServer, DBFile) ## DBのオブジェクト
view = nDb.GetView("hoge") ## select view
doc = view.GetFirstDocument ## Viewの一番上の文書を設定
o=open('c:/temp/output.txt','w') ## opent output file
fieldlist=('hoge1','hoge2','hoge3','hoge4') ## 取りたいデータのNOTES上のフィールド名をリストに
i=1
while doc: ## 行がなくなるまで実行
outline=[]
for j in fieldlist:
fieldvalue=doc.GetItemValue(j)[0] ##listになっているのでデータのある一つ目だけを取り出す
fieldvalue=string.replace(fieldvalue,'\r\n',' ') ##改行をスペースに変換
fieldvalue=string.replace(fieldvalue,'\\','\\ ') ##\を\+spaceに変換
fieldvalue=string.replace(fieldvalue,'\t',' ') ##TABをspace二つに変換
outline.append(fieldvalue)
oline=string.join([str(x) for x in outline],'\t')+ '\t'+doc.NotesURL+'\n' ##Join with tab and add URL
print i,oline
o.write(oline.encode('cp932')) ##shift-jisで書き込む
i=i+1
doc=view.GetNextDocument(doc)
o.close()
- Category(s)
- python
- Lotus Notes