;;; elmo-nntp-ihave.el ;;; for direct feed to news server. (setq elmo-nntp-post-newsgroups ",?\\(ku\\|onodero\\|nakamura\\)") (unless (fboundp 'elmo-nntp-post-orig) (fset 'elmo-nntp-post-orig (symbol-function 'elmo-nntp-post))) (setq wl-nntp-ihave-server "newsfeed.media.kyoto-u.ac.jp") ;(setq wl-nntp-ihave-server "news.keio.net") (defun elmo-nntp-post (hostname content-buf) (let (newsgroups) (save-excursion (set-buffer content-buf) (setq newsgroups (std11-field-body "newsgroups")) (if (string-match elmo-nntp-post-newsgroups newsgroups) (elmo-nntp-post-orig hostname content-buf) (elmo-nntp-ihave wl-nntp-ihave-server content-buf))))) (defun elmo-nntp-ihave (hostname content-buf) (let ((elmo-nntp-send-mode-reader nil) (spec (list 'nntp nil elmo-default-nntp-user hostname elmo-default-nntp-port elmo-default-nntp-stream-type)) session response message-id err) (setq session (elmo-nntp-get-session spec t)) (if session (elmo-network-close-session session)) (setq session (elmo-nntp-get-session spec)) (if (null session) (error "Can't get session")) (save-excursion (set-buffer content-buf) (goto-char (point-min)) (if (search-forward mail-header-separator nil t) (delete-region (match-beginning 0)(match-end 0))) (setq message-id (std11-field-body "message-id")) (setq err (catch 'err (unless message-id (throw 'err "no message-id")) (goto-char (point-min)) (insert "Path: wanderlust\n") (insert "NNTP-Posting-Method: ihave\n") (elmo-nntp-send-command session (concat "ihave " message-id)) (if (null (string-match "^335" (setq response (elmo-nntp-read-raw-response session)))) (throw 'err response)) (run-hooks 'elmo-nntp-post-pre-hook) (elmo-nntp-send-buffer session content-buf) (elmo-nntp-send-command session ".") (if (null (string-match "^2" (setq response (elmo-nntp-read-raw-response session)))) (throw 'err response)) nil)) (elmo-network-close-session session) (if err (error (concat "NNTP error: " response))))))