Main / Emacs / Gnus

<< Programes | Gnus | Emacs-w3m >>

Updated: 2007-08-25-13:30:36
Muse File: /emacs/gnus.muse Δ

Gnus 简介

  Gnus 与传统的邮件阅读程序完全不同。 Gnus 最初的定位是 newsreader,是用来阅读 newsgroup

中的新闻的, Gnus 采用相同的方式来处理新闻和邮件。因此,如果你还打算用 Gnus 收发邮件,就要准

备接受 Gnus 的工作方式

配置

  如果你收发Gmail的话,安装stunnel是一个比较简单的办法,由它来负责链接,你的客户端只要连接本地

就可以收发邮件了,Windows版的下载地址,安装,然后配置 stunnel。

stunnel.conf

[Code]
# GLOBAL OPTIONS
client = yes
output = stunnel-log.txt
#input = stunnel-log.txt
debug = 0
taskbar = yes

# SERVICE-LEVEL OPTIONS

[SMTP Gmail ]
accept = 127.0.0.1:466
connect = smtp.gmail.com:465

[POP3 Gmail ]
accept = 127.0.0.1:996
connect = pop.gmail.com:995

配置smtp
(defun fs-change-smtp ()
  "Change the SMTP server according to the current from line."
  (save-excursion
    (let ((from
       (save-restriction
       (message-narrow-to-headers)
       (message-fetch-field "from"))))
       (message "From is `%s', setting `smtpmail-smtp-server' to `%s'"
          from
          (cond
          ((string-match "koocyton@gmail.com" from)
          ;; Use stmp-auth
          (message "Using smtp-auth")
          ;; Sending mail
          (setq message-send-mail-function 'smtpmail-send-it)
          (setq smtpmail-starttls-credentials '(("127.0.0.1" 466 nil nil)))
(setq smtpmail-auth-credentials '(("127.0.0.1" 466 "koocyton@gmail.com" nil)))
          (setq smtpmail-default-smtp-server "127.0.0.1")
          (setq smtpmail-smtp-server "127.0.0.1")
          (setq smtpmail-smtp-service 466)
        )
        ;;((string-match "koocyton@gmail.com" from)
        ;; Use local sendmail
        ;; (message "Using local sendmail")
        ;;(setq message-send-mail-function `message-send-mail-with-sendmail))
        (t
           (error
           (concat "Don't know which mail server to use for "
         from))))))))
(add-hook 'message-setup-hook 'fs-change-smtp)
配置~/.gnus.el

  我不太喜欢这个文件放在$HOME目录下,所以,我将它挪到了$EMACSDIR/custom/lisp目录下

在这个目录下存放我的elisp插件和配置,添加到 ~/.emacs

(setq gnus-init-file "~/../lisp/gnus-init.el")

 

~/../lisp/gnus-init.el内容
;;_+ 资料设定
(setq user-full-name "koocyton")
(setq user-mail-address "koocyton@gmail.com")

;;_+ 服务器的设定
(setq gnus-select-method '(nntp "news.cn99.com"))
(setq gnus-secondary-select-methods '((nntp "news.newsfan.net")
                                      (nntp "news.yaako.com")
                                      (nnml "")))

;;_+ 将发往新闻组的信和其它信件分开存放
(setq gnus-message-archive-group
      '((if (message-news-p)
          "nnml:sent.news"
          "nnml:sent.mail")))

;;_+ 邮箱设定 POP3
(setq mail-source-primary-source '(pop :user "koocyton@gmail.com"
                                       :server "127.0.0.1"
                                       :password "YouPassword"
                                       :port 996))
(setq mail-sources '(
                     (pop :user "koocyton@gmail.com"
                          :password "YouPassword"
                          :server "127.0.0.1" :port 996 )
                     (pop :user "koocyton"
                          :password "YouPassword"
                          :server "pop.163.com"
                          :port 110 )
                     ))

;;_+ 打开图片
(auto-image-file-mode)
(setq mm-inline-large-images t)
(add-to-list 'mm-attachment-override-types "image/*")

;;_+ 开启代理功能,为了能让gnus支持离线浏览,gnus 5.10.x会自动开启该功能。
(gnus-agentize)

;;保存有价值的帖子
;;按下 * 键,帖子就会被拷贝到本地的 cache 中保存起来
;;用 Meta-* 就可以把帖子从缓存中删掉。
;;想查看自己保存在缓存里的帖子,在 summary buffer 中用 'Y c' 命令即可。
(setq gnus-use-cache 'passive)

;;自动换行功能,比起其他的工具要好得多。
(add-hook 'message-mode-hook
          (lambda ()
            (setq fill-column 72) ;;这里的72是等一行到了72个字符后开始换行
            (turn-on-auto-fill)))

(setq message-cite-function 'message-cite-original-without-signature)

;; 改变阅读新闻时窗口的布局
;; 默认是上下5:5分屏,又难看又不实用。
;; 方案一,窗口划分为上4下6(比例)
(gnus-add-configuration '(article
                          (vertical 1.0
                                    (summary .4 point)
                                    (article 1.0))))

;;开启记分功能
(setq gnus-use-adaptive-scoring t)
(setq gnus-save-score t)
(add-hook 'mail-citation-hook 'sc-cite-original)
(add-hook 'message-sent-hook 'gnus-score-followup-article)
(add-hook 'message-sent-hook 'gnus-score-followup-thread)

(defvar gnus-default-adaptive-score-alist
  '((gnus-kill-file-mark (from -10))
    (gnus-unread-mark)
    (gnus-read-mark (from 10) (subjnnect 30))
    (gnus-catchup-mark (subject -10))
    (gnus-killed-mark (from -1) (subject -30))
    (gnus-del-mark (from -2) (subject -15))
    (gnus-ticked-mark (from 10))
    (gnus-dormant-mark (from 5))))

(setq  gnus-score-find-score-files-function
       '(gnus-score-find-hierarchical gnus-score-find-bnews bbdb/gnus-score)
       gnus-use-adaptive-scoring t)

(setq gnus-confirm-mail-reply-to-news t
      message-kill-buffer-on-exit t
      message-elide-ellipsis "[...]\n"
      )

;;_+ 排序
(setq gnus-thread-sort-functions
      '(
        (not gnus-thread-sort-by-date)
        (not gnus-thread-sort-by-number)
        ))

;;_+ 现在可以在group buffer里面M-x gnus-topic-create-topic来创建新闻分组
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)

;;_+ 中文设置(编码变换使用数字+g的方法)
(if (or (string-match "22." emacs-version))
    (utf-translate-cjk-load-tables))
(add-to-list 'gnus-group-charset-alist
             '("\\(^\\|:\\)cn\\>\\|\\<chinese\\>" gbk))
(setq gnus-summary-show-article-charset-alist
      '((1 . cn-gb-2312) (2 . big5) (3 . gbk) (4 . utf-8)))
(setq gnus-group-name-charset-method-alist '(((nntp "news.newsfan.net") . gbk)))
(setq gnus-group-name-charset-group-alist)
(setq gnus-default-charset 'gbk
      gnus-group-name-charset-group-alist
            '(("\\.com\\.cn:" . gbk)("news\\.newsfan\\.net" . gbk))
      gnus-newsgroup-ignored-charsets
            '(unknown-8bit x-unknown iso-8859-1 ISO-8859-15
                x-gbk GB18030 gbk DEFAULT_CHARSET))
(setq mm-coding-system-priorities '(iso-8859-1 gb2312 utf-8))

(add-hook 'gnus-startup-hook
          '(lambda ()
             (setq gnus-visible-headers
                   (concat "^User-Agent:\\|^Content-Type:\\|"
                           "Content-Transfer-Encoding:\\|"
                           "^X-mailer:\\|^X-Newsreader:\\|^X-Sender:\\|"
                           gnus-visible-headers))))

;;_+ 另外,有些用web方式发出的邮件里有html,加入下面的设置,只看其中的
;;_+ plain text部分:
(eval-after-load "mm-decode"
  '(progn
     (add-to-list 'mm-discouraged-alternatives "text/html")
     (add-to-list 'mm-discouraged-alternatives "text/richtext")))
(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)

;;_+自己的帖子高亮
(add-hook 'message-sent-hook 'gnus-score-followup-article)
(add-hook 'message-sent-hook 'gnus-score-followup-thread)

;;_+ 设置随机的签名和face
(defvar random-signature-head "Good Good Life , Day Day Study !\n")
(defvar random-signature-foot "\n              -- koocyton")
(defvar random-signature-list
  '("http://kt.doopai.com"
    "http://www.phpx.com"
    "http://bbs.chinaunix.net/forumdisplay.php?fid=27"
    "http://www.phpe.net"
    "http://www.php.net"
    "http://www.emacs.cn"
    ))

(defun random-signature ()
  (concat
   (if (null random-signature-head)
       ""
     random-signature-head)
   (nth (random (length random-signature-list)) random-signature-list)
   (if (null random-signature-foot)
       ""
     random-signature-foot)))

(defvar random-face-list
  '("iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAMFBMVEVHQD/3+vz9+/4lPlF4
 kLzv5t79/f/9+PWnTVUiJy5JV3KkoIj////Mx8YWFBP9+vzFQ3bFAAACMUlEQVQ4jb3RP2gTURwH
 8HPocCmNnNAI1SJZMikOl+UibpkOHCqciiGUy/CEehKXFFGKa8ClUJd3B2fksvRC04QaJTnOUIcb
 JJJ2SKDGSNcr+KNXMEMQnodJte+Srj5404fv+/15TOucw/xXcMj1c8CbBl/2EbpxdwrIO8Idbis2
 BRobPM9XKfgUy1xOvxP5BM/HL3FZOeKMQB4gbmmxkTR5gzeaOekkNgbEPZLSKcM0/Kf428vzS8hR
 /kDWWcvbvQ1ewP69xfWlyLhGZvdZ/gO3KcykKqqlcWvWqjICRc69ekl2hDnJP2r0QX4VjbtyCPHk
 A8zMdqTKCEY1Wu0s4hbrQsLg6/FENNc5UZTTAR20oJeKoqgmC902cs5M3v65Z5mm2CgmulGkoH/Q
 cl4wltVJN0IRP6Cc3dVuT7X7/frMr4klVsyE1RDWvwVhBSeTSVEAWw7AMS6K2ATYukYD+ghFERiA
 6oCCNmEhLgLW4YJHgfMY4LWoY4AjQsOxDsWkvg4A3WnAuDpcpGFBB8MEH+waDUMtXcF+Da2WpmHe
 lr5iF7uaRSdapNdnsAug9pbpxIAM1bDfk0boAVso87yAwdXfogD422V9YKsTa39isnrZxdtXg/C5
 gI/KLvNmIrEShh/lQ3Yyscfq298B9hUaHPQwfHh/OFuY8wJdyQeVQ/LUtTZt+gedQaFRbl4B1TSb
 NHhaKfw+mq6EmMB/cKUQc0++6RHCBbpKWbW/ZSlwEAnAb3NDHSx48elnAAAAAElFTkSuQmCC"
    "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAIAAAC1eHXNAAAACXBIWXMAAAsTAAALEwEAmpwY
 AAAAB3RJTUUH1gsWAiw4GKZrngAAAaVJREFUWMPtWDGOxCAMTJD/s9F9BCqae8K9556wTarwkVV+
 xBUgCxFizBKzKc5KsckiMdjjwfbsvZ9kbDEm+7Jv2/Hf8BEmMSvuemaCOI57E2hADsRuHbVg1eI4
 EES22YfisuqUInSMlBAtgieq9BT0B+EDwtR0D/vHIY3j5/tFvA71B+7NBCGSL7/PL0QQfnNsxvuW
 n+sSqa7Qge/lvQhPPwKlXH/s25YGqKmG6BFfoBcNI41KSc48QXiyA3XGFJq8F+9SYy73luIIzmKM
 dIBUk+rJGQRyFKEsxlTzJVvzts3H/mWksOIZ7nLvt+WLnMMg8LSqH9LBAsxbvpShh5CkqCjF3jV7
 LZ6KyhdCyhAEQkFZSxU2VTxa94Cp6z1xQRXO3HNZXcgEl/ryTG+gNdGrgoYhqLLnxjqW8nRYVZZu
 pC7sUXvaYDi7b6tQYtStC619J/S5Z04X5i3ZnOOsvB3aR2XjKH5VoCRALKuOwbKOmX0C86BVh0Ka
 Pxzj1qcV5lsXVYscEAryI15g1iECejbHqj9ar/5q/9dmXsweWvvn9NCas/gPmFCS6kuMMdAAAAAA
 SUVORK5CYII="
    ))

(defun random-face ()
  (concat
   (nth (random (length random-face-list)) random-face-list)))

(setq gnus-posting-styles;;{{{
      '((".*"
         (name "koocyton")
         (face random-face)
         (address "koocyton@gmail.com")
         (organization "http://kt.doopai.com")
         (eval (setq mm-coding-system-priorities
                     '(iso-8859-1 cn-gb-2312 utf-8)))
         (signature random-signature)
         )
        ("^cn\\.comp"
         (name "koocyton")
         (face random-face)
         (address "koocyton@gmail.com")
         (organization "http://kt.doopai.com")
         (eval (setq mm-coding-system-priorities
                     '(iso-8859-1 cn-gb-2312 utf-8)))
         (signature random-signature))
        ("^tw\\.comp"
         (name "koocyton")
         (face random-face)
         (address "koocyton@gmail.com")
         (organization "http://kt.doopai.com")
         (eval (setq mm-coding-system-priorities
                     '(iso-8859-1 utf-8)))
         (signature random-signature))
        ))

 

  M-x gnus[RET] 就会看到一个角马头像的启动画面,l/L切换隐藏还是显示没有未阅读邮件的组

如果没有找到mail.misc/sent.mail/sent.news,就直接到*Group buffer*上按 G m,输入缺少

的邮件组,再输入nnml,或是你的邮件保存格式,按q退出gnus,再启动gnus,就能看到了邮件了。

Smth的Emacs版主brep写的gnus的详细教程很棒