ssh + smtp

Katsumi Yamaoka yamaoka @ jpl.org
2002年 7月 25日 (木) 13:11:38 JST


>>>>> In <d96bbc32-de97-48eb-adb1-b321ef64c902 @ deisui.org>
>>>>>	Daiki Ueno <ueno @ unixuser.org> wrote:

上野さん> もしかして start-process の呼出しの前後で
上野さん> process-connection-type を nil に束縛すると解決したりしませ
上野さん> んか?

山岡> ああ、当然試してみるべきでしたねえ。ですが、状況は代わりませんで
山岡> した。

上野さん> なるほど。ということは、telnet で吸収されてしまっている可能
上野さん> 性が大きいですね。
上野さん> ちなみに元々の発言の根拠は以下の投稿です。

上野さん> <http://tsukuba.m17n.org/mule-ja-archive/2001-9/msg00014.html>

;; そのときの自分の興味と関係が無いと読み飛ばしてしまう、の典型
;; だあ。^^;;

少し驚いたのですが、XEmacs で process-connection-type だとファイ
ルが生成されませんでした。

上野さん> このパッチは、一旦 Emacs 21 に取り込まれたのですが、RMS の環
上野さん> 境では M-x telnet に副作用が生じるとかで外されてしまいました。

ふうーん、悪いのは telnet.el (それとも comint.el) じゃないの? と
言ってみたくなります。

山岡> (defvoo nntp-end-of-line "\r\n"
山岡>   "*String to use on the end of lines when talking to the NNTP server.
山岡> This is \"\\r\\n\" by default, but should be \"\\n\" when
山岡> using and indirect connection method (nntp-open-via-*).")

上野さん> FLIM の smtp.el にも同様の docstring と共に smtp-end-of-line 
上野さん> が導入されたようですが、"should be" で終わらせずに、上記の経
上野さん> 緯をほのめかしたほうが良いのではないかと思います。

えーと、これは

Setting this to "\n" is just a workaround.  Emacs has probably a bug
that "\r\n" will be converted to "\n" for the external processes.

ではなくて、

Setting this to "\n" is just a workaround.  There is a difference
between open-network-stream and telnet that telnet uses "\n" instead
of "\r\n" for newlines.

のような感じで良いのですよね?

% echo QUIT| ssh remote_host telnet localhost smtp|& cat -v
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 remote_host ESMTP Postfix
Connection closed by foreign host.

% echo QUIT| ssh remote_host '$HOME/bin/nc' localhost smtp|& cat -v
220 remote_host ESMTP Postfix^M
221 Bye^M

;; nc はさっき作った netcat

上野さん> また、smtp-open-connection-function にも docstring を付けて、

上野さん> ・process-connection-type を nil に束縛する
上野さん> ・中継ホストでは telnet の代わりに(割と一般的な) netcat を使う

上野さん> ような設定例を挙げたほうが良いのかも知れません。

*Function used for connecting to a smtp server.  This is the function
`open-network-stream' by default.  See also `smtp-end-of-line'.  Here
is one example:

(setq smtp-open-connection-function
      (lambda (name buffer host service)
	(let ((process-connection-type nil))
	  (start-process name buffer "ssh" "-C" host
			 "nc" host service))))

Where the command "nc" is the netcat executable.  See
http://www.atstake.com/research/tools/index.html#network_utilities for
details.

こんな感じでしょうか。

ところで、たぶん本題とは関係無いのですが、ssh + telnet で nntp
サーバーにつなぐ場合に、telnet の版によっては ssh に -t オプショ
ンを付けないと通信ができないことがあるので、現在の nntp.el はそ
ういうことができるようにしてあります。なぜか smtp では再現しませ
んが。
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>




More information about the Emacs-mime-ja mailing list