(nnimap-open-connection): Don't error out when we can't make a connection
[gnus] / lisp / nnimap.el
index f7503f8..7d2c9a7 100644 (file)
@@ -200,7 +200,7 @@ not done by default on servers that doesn't support that command.")
     process))
 
 (defun nnimap-open-connection (buffer)
-  (with-current-buffer (nnimap-buffer)
+  (with-current-buffer (nnimap-make-process-buffer buffer)
     (let* ((coding-system-for-read 'binary)
           (coding-system-for-write 'binary)
           (credentials
@@ -211,43 +211,48 @@ not done by default on servers that doesn't support that command.")
                                       (if (netrc-find-service-number "imap")
                                           "imap"
                                         "143")))
-             (netrc-credentials nnimap-address "imap"))
+             (auth-source-user-or-password
+              '("login" "password") nnimap-address "imap" nil t))
             ((eq nnimap-stream 'stream)
              (nnimap-open-shell-stream
               "*nnimap*" (current-buffer) nnimap-address
               (or nnimap-server-port "imap"))
-             (netrc-credentials nnimap-address "imap"))
+             (auth-source-user-or-password
+              '("login" "password") nnimap-address "imap" nil t))
             ((eq nnimap-stream 'ssl)
              (open-tls-stream "*nnimap*" (current-buffer) nnimap-address
                               (or nnimap-server-port
                                   (if (netrc-find-service-number "imaps")
                                       "imaps"
                                     "993")))
-             (netrc-credentials nnimap-address "imaps" "imap")))))
+             (or
+              (auth-source-user-or-password
+               '("login" "password") nnimap-address "imap")
+              (auth-source-user-or-password
+               '("login" "password") nnimap-address "imaps" nil t))))))
       (setf (nnimap-process nnimap-object)
            (get-buffer-process (current-buffer)))
       (unless credentials
-       (delete-process (nnimap-process nnimap-object))
-       (error "Can't find user name/password for %s" nnimap-address))
+       (delete-process (nnimap-process nnimap-object)))
       (when (and (nnimap-process nnimap-object)
                 (memq (process-status (nnimap-process nnimap-object))
                       '(open run)))
        (gnus-set-process-query-on-exit-flag (nnimap-process nnimap-object) nil)
        (let ((result (nnimap-command "LOGIN %S %S"
                                      (car credentials) (cadr credentials))))
-         (unless (car result)
-           (delete-process (nnimap-process nnimap-object))
-           (error "Unable to login to the server: %s"
-                  (mapconcat #'identity (cadr result) " ")))
-         (setf (nnimap-capabilities nnimap-object)
-               (mapcar
-                #'upcase
-                (or (nnimap-find-parameter "CAPABILITY" (cdr result))
-                    (nnimap-find-parameter
-                     "CAPABILITY" (cdr (nnimap-command "CAPABILITY"))))))
-         (when (member "QRESYNC" (nnimap-capabilities nnimap-object))
-           (nnimap-command "ENABLE QRESYNC"))
-         t)))))
+         (if (not (car result))
+             (progn
+               (delete-process (nnimap-process nnimap-object))
+               nil)
+           (setf (nnimap-capabilities nnimap-object)
+                 (mapcar
+                  #'upcase
+                  (or (nnimap-find-parameter "CAPABILITY" (cdr result))
+                      (nnimap-find-parameter
+                       "CAPABILITY" (cdr (nnimap-command "CAPABILITY"))))))
+           (when (member "QRESYNC" (nnimap-capabilities nnimap-object))
+             (nnimap-command "ENABLE QRESYNC"))
+           t))))))
 
 (defun nnimap-find-parameter (parameter elems)
   (let (result)