May 222006
 

Wanderlustでファイル名が日本語の添付ファイルを扱いたい場合、FAQにもあるようにはlimitを使いましょう、というのが一般的な解でした。
OutlookExpress で送信されたメールの日本語添付ファイル名がうまく扱えません

RFC2231が普及すれば、と思ってたのですが、どうも実装が進んでいるようには見受けられません。

添付ファイルにおける日本語のファイル名に関して
MUAs for Windows – explanation of “table 3: Japanese”

Wanderlustではlimit枝ではなく、flim-1_14-rfc2231-encoder枝を使うという方法もあるのですが、大抵相手側で認識できないため、とても悲しくなります。

May 042006
 

SMTP認証のPLAINとLOGINって何が違うのだろうか、と思って調べてたときのリンク集です。

PLAIN認証は1ステップ(httpのBASIC認証に似てます)でRFCあり、LOGIN認証は2ステップでRFCなし。
なぜにLOGIN認証があるのか謎ですが、とりあえず両方利用できる環境であればPLAINを使うようにしようと思いました。

なお、PLAIN認証やLOGIN認証を「最低限の暗号化はされている」と説明する人もいるようですが、HTTPのBASIC認証と同じようにBASE64エンコードされているだけですので、デコードすれば簡単にばれます。SSLやTLS下での利用が推奨されておりますのでご注意を。

WanderlustからのGmail SMTPサーバ利用実験

 article  Comments Off on WanderlustからのGmail SMTPサーバ利用実験
May 022006
 

GmailのSMTPサーバをWanderlustから利用してみようと思ったのですがうまくいきません。
2chのWanderlustスレの話題と同じ現象に見えます。でも私が使ってるlimit-1_14ブランチにも、 ここらへんのパッチも当たってるはずなのですけどねぇ 😕

SMTP over SSLの場合

465/tcpポートを使った、最初からSSL接続になるやりかたです。

~/.wl設定

(setq wl-smtp-posting-server "smtp.gmail.com"
      wl-smtp-posting-port 465
      wl-smtp-connection-type 'ssl
)

ほんとは認証用にwl-smtp-posting-userの設定も必要ですが省略しています。

この状態でメール送信を試みてもSMTP errorがミニバッファに表示され、うまくいきません。opensslをコマンドラインから実行してみると、RCPT TOのあとにRENEGOTIATINGとでてきます。はじめてみるレスポンスですが何かしらコマンドラインオプションに不備があるのでしょうか 😕

$ openssl s_client -connect smtp.gmail.com:465 -CApath /etc/ssl/certs
:
220 mx.gmail.com ESMTP z80sm1155576pyg
EHLO localhost.example.jp
250-mx.gmail.com at your service
250-SIZE 20971520
250-8BITMIME
250-AUTH LOGIN PLAIN
250 ENHANCEDSTATUSCODES
AUTH PLAIN ********************************************
235 2.7.0 Accepted
MAIL FROM:<someone@example.com>
250 2.1.0 OK
RCPT TO:<someone@example.net>
RENEGOTIATING
depth=1 /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
verify return:1

starttlsの場合

587/tcpポートを使った、途中からSSL接続に遷移するやりかたです。ちなみに587/tcpはsubmission用であって、starttls用に予約されているポート番号ではありません。

~/.wl設定

(setq wl-smtp-posting-server "smtp.gmail.com"
      wl-smtp-posting-port 587
      wl-smtp-connection-type 'stattls
)

Wanderlustのドキュメントによれば、starttlsパッケージが必要になりますので、インストールしておきます。

$ wget ftp://opaopa.org/pub/elisp/starttls-0.10.tar.gz
$ tar xzvf starttls-0.10.tar.gz
$ cd starttls-0.10
$ ./configure && make && sudo make install

やはりSMTP errorになります 🙁

opensslのstarttlsを使う場合

新しめのopensslはs_clientでのstarttlsもサポートしています。
openssl s_client -starttls smtp ...
メールを送信するときのSSL接続はwl-draft.elのwl-smtp-extension-bindというマクロでおこなわれるように見えます。
このマクロが使われるのはwl-draft-send-mail-with-smtpからにこれまた見えますので、直前で一番近いwl-mail-send-pre-hookでopensslコマンドのオプションを設定するようにしてみました。

~/.wl設定

(setq wl-smtp-posting-server "smtp.gmail.com"
      wl-smtp-posting-port 587
      wl-smtp-connection-type 'ssl
)
(add-hook 'wl-mail-send-pre-hook
	  (lambda ()
	    (set (make-local-variable 'ssl-program-arguments)
		 '("s_client"
		   "-starttls" "smtp"
		   "-host" host
		   "-port" service
		   "-verify" (int-to-string ssl-certificate-verification-policy)
		   "-CApath" "/etc/ssl/certs/"))
	    ))

portはstarttls用587とし、connection-typeはsslにする(こうしないとopensslコマンド呼び出しになりません)のがみそです。

が、うまくいきません。SMTP接続のtraceバッファを見ると、

9810:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:

のようにいきなりSSL接続しているようなので、”-starttls smtp”を設定するhookが効いていないようです orz

wl-envelope-fromを都度wl-fromから設定する

 article  Comments Off on wl-envelope-fromを都度wl-fromから設定する
Apr 302006
 

Wanderlustでは使用するメールアドレスを複数設定しておき、draftモード時に選択することができるようになってます。

(setq wl-template-alist
      '(("default"
	 (wl-from . "Someone <someone@example.org>")
	 ("From" . wl-from)
	 )
	("biz"
	 (wl-from . "Someone <someone@example.co.jp>")
	 ("From" . wl-from)
	 )
	))

といった具合になるのですが、wl-fromと”From”の両方を設定しないとけないのがやや面倒です。

wl-fromを変えないとEnvelope Fromの値が.wlに記述したwl-fromのままになってしまうため、やむなくそうするのですが、もっと簡単に解決する方法がari’s diaryさんのサイトにありました。
http://www.nijino.com/ari/diary/200305.shtml#200305120

(add-hook 'wl-draft-send-hook
	  (lambda ()
	    (set (make-local-variable 'wl-from) (std11-fetch-field "From"))))

これを記述しておくことでwl-fromが常にFromヘッダ値になり、結果Everlope FromもFromヘッダと同じにすることができます。

Apr 172006
 

ときどきMeadow+Wanderlustが使えない環境でThunderbirdを使うようになりました。
スレッド表示するときに、同じSubjectのメールが同一スレッド扱いになるのがイヤなのですが、以下の設定で回避できます。

  1. ツール->オプションの詳細設定で、設定エディタを開き、mail.strict_threadtrueにする(prefs.jsなどに記載でもOK)
  2. 表示をリセットしたいフォルダの.msfファイルを削除して、Thunderbirdを再起動

最初mail.strict_threadの設定を見つけたときは、「まさにこれ!」と喜んだのですが、それだけでは表示が変わらず悩んでしまいました。
.msfファイルを削除しないといけなかったのですね。
私はIMAPでアクセスしているのですが、.msfファイルはThunderbirdプロファイルディレクトリのprofile\ImapMail\servername
に見つけることができました。

 Posted by at 12:59 pm  Tagged with:
Mar 292006
 

SSLクライアント証明書あれこれ」でのCourier-IMAPのように、クライアント証明書を要求するメールサーバにWanderlustから接続する方法です。
WanderlustはEmacs上で動作するMUAですが、SSL関係はopensslコマンドを呼び出して処理するようになってます。
接続はopenssl s_clientコマンドになりますので、そちらの引数にクライアント証明書の指定をすればよいことになります。

;; IMAP over SSL
(require 'ssl)
(setq ssl-certificate-directory (expand-file-name "~/.ssl/certs"))
(setq ssl-program-arguments
      (append ssl-program-arguments
              '("-cert" my-ssl-client-certfile
                "-key"  my-ssl-client-keyfile)))
(setq my-ssl-client-certfile (expand-file-name "~/.ssl/ssl.crt"))
(setq my-ssl-client-keyfile  (expand-file-name "~/.ssl/ssl.key"))

この例ですと、IMAPに限らずSMTPなどのSSL接続に対しても効いてしまうことになりますので、本来であれば接続タイプを別に用意する、特定のサイトに接続する場合のみに効くようにする、などの対処をするのがベストかと思いますが、私にはそこまでできません orz

~/.ssl/certs/ディレクトリには認証局の証明書を格納してc_rehashしておきます。
また秘密鍵(~/.ssl/ssl.key)のパスフレーズ入力要求には対応できていないので、予めopenssl rsaコマンドを使って、パスフレーズを解除しておく必要があります。

Mar 282006
 

Sunがなかなかsendmailのパッチを提供してくれないので、MTAをCSWパッケージのEximに変更しました。

sendmailデーモンの停止

# svcadm disable network/smtp:sendmail

eximパッケージのインストール

# pkg-get -i exim
:
Found an existing sendmail installation.
You have following choices with for installing exim:
 1. Send mail only, without changing existing sendmail
    installation.
 2. Rename existing sendmail binaries to *.OFF and replace
    them with binaries provided by exim.
Enter your choice [1,2] (default 1): 2
## Processing package information.
## Processing system information.
   16 package pathnames are already properly installed.
## Verifying package dependencies.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

The following files are being installed with setuid and/or setgid
permissions:
  /opt/csw/sbin/exim <setuid root>

Do you want to install these as setuid/setgid files [y,n,?,q] y

This package contains scripts which will be executed with super-user
permission during the process of installing this package.

Do you want to continue with the installation of <cswexim> [y,n,?] y

Installing exim - The Exim Mail Transfer Agent as <cswexim>

## Executing preinstall script.
adding group exim
adding user exim
## Installing part 1 of 1.
/etc/init.d/cswexim
:
/opt/csw/share/man/man8/exim.8
[ verifying class <none> ]
## Executing postinstall script.
Stopping MTA: cat: cannot open /var/run/exim.pid

Setting up config-files...
Copying /opt/csw/etc/exim/aliases.CSW to /opt/csw/etc/exim/aliases

Checking for newaliases... /usr/sbin/newaliases
Moving /usr/sbin/newaliases to newaliases.OFF
Moving /usr/lib/sendmail to sendmail.OFF
Moving /usr/bin/mailq to mailq.OFF
Starting MTA:2006-03-28 14:51:00 non-existent configuration file(s): /opt/csw/etc/exim/exim.conf

If you do *NOT* want to start exim during system-boot
  rm /opt/csw/etc/exim/exim.conf
or
  mv /opt/csw/etc/exim/exim.conf /opt/csw/etc/exim/exim.conf.OFF

---------------------------------------------------------------
Please take the time to read /opt/csw/share/doc/exim/README.CSW
---------------------------------------------------------------

Installation of <cswexim> was successful.
#

/opt/csw/etc/exim/exim.conf作成

/opt/csw/etc/exim/exim.conf.CSWをベースに以下を変更。

local_domains設定

/etc/mail/local-host-namesに列挙してあるドメイン名をdomainlist local_domainsに記述(“:”区切り)。

domainlist local_domains = localhost : example.jp

Maildir配送に変更

local_delivery定義を変更して、デフォルトをMaildir配送にします。

local_delivery:
  driver = appendfile
  directory = $home/Maildir
  maildir_format = true
  mode_fail_narrower = false
  delivery_date_add
  envelope_to_add
  return_path_add
# group = mail
# mode = 0660

/opt/csw/etc/exim/aliases作成

/etc/mail/aliasesをコピーします。sendmailと違ってnewaliasesは不要です。

eximデーモン起動

# cd /;env -i /etc/init.d/cswexim start

動作確認

不正中継チェック

以下のチェックサービスで不正中継動作しないことを確認。

以前、とあるサイトにtelnetすると、SMTPポートに接続してきてチェック、ってサービスがあったと思うのですが、なくなっちゃったのですかね。普通にログインプロンプトが出てきて驚いちゃいました。

ローカル配送確認

tcp/25に直接接続してローカル配送の確認。

$ telnet localhost 25
:

最後にリモートからメール受信できることを確認して終了。

Mar 262006
 

Red Hat 9で運用しているサーバがあります。
いまどきmajordomoでメーリングリストを運営していたりするのですが、先ごろ発表されたsendmailの脆弱性対応でパッケージをアップデートしたら、majordomoが動かなくなってしまいました。
sendmailはFedoraLegacyプロジェクト提供のパッケージで、sendmail-8.12.8-9.90からsendmail-8.12.11-4.24.1.legacyへの更新になります。

原因は/usr/lib/sendmailがなくなったことでした。/usr/lib/sendmail.sendmailにシンボリックリンクして対応完了。

ところでSunからのパッチ提供はいつ頃になるでしょう 😕

PGP memo

 article  Comments Off on PGP memo
Feb 262006
 

WanderlustでのPGPメールの取り扱い

メッセージに署名する リージョン指定してC-cC-mC-s
メッセージの暗号化 リージョン指定してC-cC-mC-e
メッセージの複合化 application/pgp-encryptedのパートで v
non-MIME PGP メッセージの検証 メッセージバッファでC-c:v
non-MIME PGP メッセージの複合 メッセージバッファでC-c:d

参考サイト

GnuPGの使い方