Archive for 7月, 2009
自作したイベントをFlex Builderで開発しているときにコードアシスト(設定できる対象がでてくるやつ)できるようにしたい場合のメモ。
こんな感じに、設定できるイベントの一覧が出てくれば、楽になる。
そのためには、メタデータタグを書く必要がある。
たとえば、こんな感じ。
[Event(name="smtpConnectionFailed",type="com.coltware.fxmail.smtp.SMTPEvent")]
public class SMTPClient extends SocketJobSync
{
// 途中省略
}
ってな具合に記述すれば、コードアシストがきくようになります。
でも、ここで注意!!
の部分を SMTP_CONNECTION_FAILED に変換します。
したがって、実際の変数名もそのようにしなければいけないというわけです。
じゃないと、せっかくコードアシストしても、その結果がコンパイルエラーになってしまうというわけです。
この記事を書いていて初めて気がつきました。
あれ!?、図で出てるアシスト部分と正常な記述が違う!?って。
この辺り、どこかマニュアルに書いてあるのかも知れませんが、私には見つかりませんでした。
でもって、asdocに記述されるようにするには、
/** * SMTPレベルで接続ができなかったときのイベント. * * メモ:Socketベースではありません。HELOもしくはEHLOを投げてエラーとなったときに発行されます * ただし、EHLOでESMTPをサポートしていないエラーはここに含まれません。 * * @eventType com.coltware.fxmail.smtp.SMTPEvent.SMTP_CONNECTION_FAILED */
ってな具合に、@eventTypeを記述すればOKだ。
しかし、メタタグのところでイベントの文字列を、asdocのところで変数名をと、
結構、コード部分以外にも意味が入ってしまうので、いろいろなところで整合性をきちんと持たせようと思うと、結構つらい部分がある。
Postfix とdovecotを使ってSMTP AUTHを使えるようにする必要性が出てきた。
というのも、gmailではSMTP AUTHが必須になっているので、このテストのためにもこの設定が必要だ。
このSMTP AUTHの問題さえ解決できれば私が作っているAdobe AIR版SMTPライブラリでメールがGmailを使って送れるようになる。
すでに、POP3版もできているので、これがそろえば送受信が行える。
幸いにも認証方法はLOGIN PLAINになっているので、dovecotで十分だ。
ちなみに、Postfixとdovecotのインストールがされていることが前提なので注意。
さて、PostfixでSMTP AUTHを使えるようにするにはというのをさがしてみるとPostfixの再インストールがされているものばかり。
しかし、最近インストールしたものなので、再インストールは必要ないだろうということで、それを確認する。
#postconf -a cyrus dovecot
SMTPの認証にcyrusというのとdovecotが使えると出力されているので、問題なくdovecotが使えるのが確認できた。
このあたりの確認方法は
man postconf
と打てば使いかたは出てくる。
-a List the available SASL server plug-in types. The SASL plug-in type is selected with the smtpd_sasl_type configuration parameter by specifying one of the names listed below. cyrus This server plug-in is available when Postfix is built with Cyrus SASL sup- port. dovecot This server plug-in requires the Dovecot authentication server. This feature is available with Postfix 2.3 and later.
と出てきたので、Version が2.3より新しければだいたい大丈夫なのかもしれない。
また、postconfはこれから設定ファイルを変更するのだが、その設定がきちんと設定されているかなどを確認するのにも使う。
(私自身、スペルを間違ってしまってはまってしまったなんて時に、これを使って再確認する。)
さて、Postfixとdovecotの設定を行う。
詳しい設定は、http://www.postfix.org/SASL_README.html#build_dovecotにあるので、こちらを見てほしい。
しかし、ここではプログラム確認のためのサーバなのでセキュリティやら何やらの設定はいらない。
できるだけ、何の制約もなく使えるようにしたいので、必要最低限の設定を行う。
なので、実際の運用に使うものの設定ではないので、ご注意頂きたい。
/etc/postfix/main.cf 以下を追加
smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
/<どこかのパス>/dovecot.conf
以下のような記述が既にあるので、下記を参考に変更、もしくは頭の#を取って設定を有効にする。
auth default {
mechanisms = plain login
:
途中省略
:
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
これで、postfixとdovecotを再起動すれば問題ない。
ちなみに、テストで
$telnet localhsot 25 <-- (入力) 220 localhost ESMTP Postfix EHLO localhost <-- (入力) 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN 250-AUTH=PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN <-- (入力) 334 VXNlcm5hbWU6 xxxxxxxxxx <-- (入力)ここにLogin Userをbase64した形で入力 334 UGFzc3dvcmQ6 yyyyyyyyyy <-- (入力)ここにPasswordをbase64した形で入力 235 2.0.0 Authentication successful QUIT <-- (入力) 221 2.0.0 Bye
ちなみに、
334 VXNlcm5hbWU6
などのように出力されるが、
これは、
334 Username:
と出力されている。VX..の部分がBASE64でエンコードされているだけだ。
また、UGFzc3dvcmQ6は「Password:」と出力されている。
このあたりが、BASE64でどうせセキュリティがほとんどないのに、このようになっている意味はよくわからない。
前回、Zipファイルの読み込みの実装方法を書いたわけだが、そもそも私が求めていたドキュメントがAdobeのサイトにあった。
しかし、これはよいのだ。もう別に見なくても分かっている。
前にも書いたが、AIRでZIPファイルを読めたらなとおもった理由が2つ。
1つ目: オフィスドキュメント(XML形式をZIPで固めたもの)を読むこと
これは、実装できてもまだ使えるような具体的なものが浮かばないので、さきがながーいものになる。
2つ目: WindowsでMACのzipファイルを解凍できること。
これがすぐにでもほしい。MACのファイルを解凍すると必ず意味のわからない文字化けがする。
Windowsがファイル名がSJISで、MacがUTF-8だから簡単にできそうだ・・・と思った。
しかし、ここで断念。
濁点の文字化けが解決できない・・・・
たとえば、データが テ?ータになってしまう。
んー、MACでは、デは「テ」+「゛」らしい。
しかも、ファイルシステムだけ・・・・
こんなの知らんよ。MACなんてつかわんし。
結局、調べたらMACのUTF-8形式らしい。
面倒すぎて解決するのを一時やめました。
Arrayからデータを消すには、ちょっと癖がある。
とくに、shiftやpopなどのように先頭や最後からデータを消そうとすると、
ちょっとプログラムをしている手がとまる。
ということで、覚書のために載せておく。
これ以外にも方法はあるとは思います。
1.指定したオブジェクトのデータを削除する
// 削除したいオブジェクトの場所を見つける var index:int = mx.utils.ArrayUtil.getItemIndex(findMe,arrayObject); // その場所から1つのオブジェクトを消す arrayObject.splice(index,1);
2.すべてのデータを削除する
arrayObject.length = 0;
lengthを0にすればすべてのデータを削除できるなんて、
メモ : length プロパティに既存の長さよりも短い値を割り当てた場合、配列は切り詰められます。
なんてメモからは思い浮かびませんよね。
Flexでは、Base64方式にエンコードも、デコードも簡単にすることができます。
とくに、デコードなどはネットから取ってきたBase64形式で取得して、画像として表示(バイナリ形式にもどす)ということもやることでしょう。
では最初は、デコード方式
import mx.utils.*; var base64strings:String = "GyRCJDMkbCRPJUYlOSVIGyhC"; var decorder:Base64Decoder = new Base64Decoder(); decorder.decode(base64strings); var bytes:ByteArray = decorder.toByteArray(); bytes.position = 0; // 後はByteArray形式なのでそこからデータを対象の方式で読み込む
非常に簡単なのが分かると思います。
次に、エンコード
var bytes:ByteArray = new ByteArray(); var title:String = "Base64する対象の文字列です。"; // 以下は、文字を bytes.writeMultiByte(title,"iso-2022-jp"); var encoder:Base64Encoder = new Base64Encoder(); // 76 文字ごとの改行処理を入れない // 通常は、default (true) で問題なし。 // 今回はメールの件名の部分のためにfalseを指定 encoder.insertNewLines = false; encoder.encodeBytes(bytes); var base64strings = encoder.toString();
ってな感じですね。


