〜2012年12月下旬〜
gmailでsubscribeしてるユーザーは全部退会させられた。
Recently Gmail has been throwing Ruby Weekly into the 'spam' folder more and more despite it passing all of the spam checks I can find. One thing that can cause this problem is when there are too many 'disengaged' subscribers on a list because they think we are sending e-mail to people who no longer want it.
For this reason, we have performed an analysis of all subscribers who haven't opened any recent issues or clicked any links in those issues. This should remove most of the genuinely disengaged subscribers but there are a few cases where you may be a genuine, active subscriber getting caught up in this.
ああ、クリックしてないようなやつはどうせ見てないんだからってことか。
確かにほとんど見てないので、@rubyinsideを見るようにしよう。
Outlookだと\\servername\share\file.txtで勝手にリンクになるのでクリックできるが、
Thunderbirdでは単なるテキストになってしまう。どうすればリンクになるか調べたら、
Links to local pages do not work - MozillaZine Knowledge Baseが見つかった。
つまりfile://///servername/share/file.extとすればいいらしい。
たしかにリンクになった。Outlookでもいけた。
しかしこれがUNCとは思えなくてどこに飛ばされるんだかわからず逆にクリックしづらい。
なんで5個も/が必要なのかとか。さてどうしたもんか。
ちゃんとアップロードできることもあるし、なにか制限があるのかと調べてみた。
Photo Upload Troubleshootingによるとやはりサイズ制限があった。
If you are using animated GIF, make sure it is no larger than 1MB and no more than 500 pixels wide.
ああ、1MBはちょっときついな。
会社のメールサーバはspoolに置いとけるサイズが制限されてるので、
別のimapサーバ立てて適宜メッセージを移動させているが、
長期休暇があるとそれもできず、あふれてしまいそうなのでなんとかしたい。
どうでもいい通知メールだけでも自動で移動させられればいいんだが。
いやさせないといけない。この通知メールが諸悪の根源でしかも休日とか関係なくやってくるので。
まあ、それもおれが送るようにしてるので自業自得なんだけど。
それはそれとして適当にaptitude search imapするとimapfilterってのが見つかった。
luaで書かれているらしい。設定ファイルもluaだ。
だったらrubyで書いてもいいような気がするが、まあ、すでにあるので試してみた。
参考ページ:
linux task: sorting mail with imapfilter - sigmoid
やりたいのはSubjectに特定の文字列があったら別のサーバへ移動なので、ちょっといじって試した。
1回目はうまくいったように見えたが、送り先のフォルダを見ても新たなメールがない。
どこ行っちゃったんだ?
-vつきで実行してみたらmailbox名が不正なようで。
C (5): 1011 APPEND "9:Backups/2012/Log" () "25-Dec-2012 13:43:28 +0900" {1437} S (5): 1011 NO [CANNOT] Invalid mailbox name imapfilter: IMAP (5): 1011 NO [CANNOT] Invalid mailbox name
サブフォルダはだめか。いやでも参考にしたページでは使っているよな。
ひょっとしてdovecotは違う区切りになるのかとMaildirの下を見たら"."区切りになっていた。
というわけで"9:Backups/2012/Log"から"9:Backups.2012.Log"にしたらうまくいった。
いや、options.namespace = falseのせいだった。コメントアウトしたら"/"を区切りにできた。
man imapfilter_configを見てfalseにしちゃったけど余計なお世話だったようで。
ついでにmark_seen()を追加して既読になるようした。
---------------------- -- Global Options -- ---------------------- options.timeout = 120 options.subscribe = true -- options.namespace = false ---------------- -- Accounts -- ---------------- -- For every account create an account entry and check() its status acc1 = IMAP { server = 'imap-server', username = 'username', password = 'password', ssl = 'ssl3', } acc1.INBOX:check_status() ---------------- acc2 = IMAP { server = 'localhost', username = 'eban', password = 'password', ssl = 'ssl3', } -- acc2.INBOX:check_status() ---------------- -- select all messages from all INBOXes and construct a single table of messages results = acc1.INBOX:select_all() -- results = acc1.INBOX:is_unseen() ----------------- -- Functions -- ----------------- -- parseRules is used to filter message results using a table of rules (see below) -- @param res the table of messages to filter -- @param ruleTable the table of rules to match messages against parseRules = function ( res, ruleTable ) local subresults = {} for _,entry in pairs(ruleTable) do -- don't use match_field, it downloads part of the msg (slow) subresults = res:contain_field(entry["header"], entry["p"]) subresults:mark_seen() if subresults:move_messages( entry["moveto"] ) == false then print("Cannot move messages!") end end end --------------- -- Filters -- --------------- pre_filters = { -- Banned IPs typically sending me spam -- { header = "Received" , p = "85.31.186.26", moveto = acc1['Trash'] }, -- { header = "Received" , p = "176.251.35.146", moveto = acc1['Trash'] }, } log = acc2['9:Backups.2012.Log'] inbox = acc2['INBOX'] filters = { -- Job log { header = "Subject", p = "AnalizeJob ", moveto = log }, { header = "Subject", p = "SyncJob ", moveto = log }, { header = "Subject", p = "find /backups", moveto = log }, } post_filters = { -- Any remaining mail having in the subject SPAM? goes in Junk -- { header = "Subject" , p = "[SPAM?] ", moveto = acc1['Junk'] }, } --------------------- -- Parse messages -- --------------------- -- pre filter messages parseRules(results, pre_filters) -- sort messages parseRules(results, filters) -- post filter messages parseRules(results, post_filters) ----------------
preとpostは結局なんで分かれてんのかよくわからないよねえ。
あと2012って数字が埋まっているところも来週にはもうまずいわけで、なんとかしないと。
imapfilterはいいかんじで動いてるが、spamが残ってしまう問題が残った。
まあ、しょうがないか。
subjectとか考えてると切りがないので、10000バイトより大きければ移動することにした。
もうこうなったら全部移動してもいい気もするが。
large = acc1.INBOX:is_larger(10000)
でフィルタリングできる。あと年はos.date("%Y")で取れる。
あらかじめoptions.subscribe = trueしておけばmailboxが存在しなければ自動的に作成されるので、
新春を迎えてもいけるはず。
year = os.date("%Y") log = acc2['9:Backups/' .. year .. '/Log']
spamは大抵でかいので勝手に移動されるだろう。
買って忘れてた。
数が50冊と多いし全部入りきるかなと思ったら、画像ではなかった。
予想外でうれしい。
馬場のShakey'sでピザとパスタの毎年恒例の忘年会。
ふと気づくと16時で遅刻していた。
なひさんが体調悪く残念ながら不参加。
これで皆勤はゆぞさんとおれだけになった。
というわけで恒例の公開内緒話はなかった模様。
SFDCは意外にもドットコムだったとか、地図アプリとか、
メールはあふれるものとか、Felicaとか、パネットーネありがとうとか、
氷点下7℃にならないと水道は凍らないとか。
直接クリックすると
「拡張機能、アプリケーション、ユーザースクリプトはChromeウェブストア以外から追加できません。」
と文句言われるが、横の詳しく見るをクリックすると追加する方法が書かれている。
他のウェブサイトからの拡張機能の追加
要するにダウンロードして[拡張機能]へD&Dしろってことで。
ちょっと面倒だけど
邪魔なTracking Query Stringを削除するユーザースクリプトもあっさりと入った。
fitbit買ってから休みの日の散歩が増えた。
それはいいんだが、通っていた小学校に行ってみようと思ったらたどりつけなかった。
道がもうないんだよな。ないというか整備されて舗装されてるもんだから、風景がまるで違う。
元々方向音痴な上なぜか確信を持ってどんどん進むもんだから、全然見当違いな場所行きつく。
夕陽を頼りに泣きながら帰ったよ。
で次の日にリベンジしたが、普通に歩いて往復で軽く1時間以上かかった。
途中でちょっと買い物したが、遠すぎるだろ。
たしかに小学生の頃もなんか早起きして学校行ってた気がするが、そんなに遠かったのか。
Goolge Mapで見たら、2,3kmはあるような。
なんだろう。この頃から通学時間とか通勤時間は1時間ぐらいはあたりまえ的に感じていたのかもしれない。