web-dev-qa-db-ja.com

安全なサーバー(Gmail)を使用するためにEmacssmtpを設定する方法

これは、2010年4月26日に https://answers.launchpad.net/vm/+question/108267 で最初に提起された質問です。

TLSとSTARTTLSを必要とするGmailなどの安全なSMTPサーバーで使用するためにMSWindowsでEmacsメール送信パッケージを構成する方法を尋ねます。元の質問は以下にコピーされます。


  • Cygwinsgnutlsをインストールしました。

  • .emacsに書いた:

    (setq send-mail-function 'smtpmail-send-it
      message-send-mail-function 'smtpmail-send-it
      smtpmail-starttls-credentials
      '(("smtp.gmail.com" 587 nil nil))
      smtpmail-auth-credentials
      (expand-file-name "~/.authinfo")
      smtpmail-default-smtp-server "smtp.gmail.com"
      smtpmail-smtp-server "smtp.gmail.com"
      smtpmail-smtp-service 587
      smtpmail-debug-info t)
    
    (require 'starttls)
    (setq starttls-use-gnutls t)
    (setq smtpmail-debug-info t)
    (setq smtpmail-debug-verb t)
    (require 'smtpmail)
    
  • Gmailの認証情報を使用して「〜/ .authinfo」ファイルを作成しました。

  • Starttls.elcを削除したので、コンパイルされたバージョンはemacsによってロードされません。

  • (signal-process (process-id process) 'SIGALRM)をに置き換えました

    (call-process "g:\\www\\cygwin\\bin\\kill.exe" nil nil nil
              "-ALRM" (format "%d" (process-id process)))
    

私は以下の説明を使用しました: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • メールを送信しようとすると、ミニバッファに「送信に失敗したSMTPエラー」と表示されます。

デバッグバッファでエラーが発生します:

'Process SMTP exited abnormally with code 53'

それは私に何も有用なことを教えてくれません。

9
Uday Reddy

以下は、今の質問につながったアドバイスです。アドバイスはUdayReddyによって発掘され、 http://article.gmane.org/gmane.emacs.windows/325 で見つけることができます。 2006年8月7日付けです。

The problem boils down to the fact that the command

(signal-process (process-id process) 'SIGALRM)

does not work with Win32 Emacs, even with Cygwin also installed.  But one can mimic that with:

(call-process "c:\\cygwin\\bin\\kill.exe" nil nil nil
                                     "-ALRM" (format "%d" (process-id 
process)))

Gnutsl-cliのドキュメントによると(例: http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

これは「接続し、プレーンセッションを確立し、TLSを開始する」です。オプション。 TLSセッションは、EOFまたはSIGALRMを受信したときに開始されます。

ニュースグループgnu.emacs.bugで議論されているバグ#7789は、MS Windows(別名Woe32)でのこのシグナリングの欠陥を報告しています。

また、この変更を行うためのアドバイスに従いましたが(ファイル「starttls.el」の関数「starttls-negotiate-gnutls」で)、サーバーsmtp.gmail.com:587を介してテストメールを送信できませんでした。

修正は、ファイル「smtpmail.el」の関数「smtpmail-via-smtp」の次の行を変更することであると判断しました。

(setq process (smtpmail-open-stream process-buffer Host port))

(let ((coding-system-for-read 'raw-text-unix))
  (setq process (smtpmail-open-stream process-buffer Host port)))

これにより、サーバーの応答が「プロセスバッファー」に挿入されたときにコーディング変換が行われないことが保証されます。特に、サーバーからの220グリーティングの最後にあるCRLF文字ペアが変更されないようにします。

この1つの追加の変更により、smtp.gmail.com:587経由でテストメールを送信することに成功しました。

私のEmacsのバージョン情報は「3249CTOの2011-03-10のGNUEmacs 23.3.1(i386-mingw-nt5.1.2600)」です。

後で、私の修正が http://comments.gmane.org/gmane.emacs.devel/140976 での議論でカバーされていることがわかりました。その議論の一般的なタイトルは「 `send-mail-function 'のデフォルトの変更」です(2011年6月26日に始まりました)。そこで議論された変更(修正を行う)はEmacs 24に組み込まれましたが、Emacs23.3または23.4には存在しません。

4
Alan Wehmann

Emacs 24(現在プレリリース中)はいくつかの改善を行ったようで、物事ははるかに簡単です。まず、smtpmailライブラリでプレーンSSLを実行できるようになりました。 STARTTLSを実行する必要はありません。また、GmailSMTPはポート465でSSLをサポートしています。

したがって、必要な設定は次のとおりです。

(setq smtpmail-stream-type 'ssl)
(setq smtpmail-smtp-server "smtp.gmail.com")
(setq smtpmail-smtp-service 465)

認証資格情報(ログインとパスワード)は、ファイル〜/ .authinfoまたは〜/ .authinfo.gpgに入れる必要があります。 (Emacs変数に入れることはできなくなりました。)そこで、フォームの行を含める必要があります

machine smtp.gmail.com login ..... password ..... port 465

それがすべてです。

11
Uday Reddy