- (let* ((ret (progn
- (narrow-to-region beg end)
- (mime-edit-translate-region beg end boundary)))
- (ctype (car ret))
- (encoding (nth 1 ret)))
- (goto-char beg)
- (insert (format "Content-Type: %s\n" ctype))
- (if encoding
- (insert (format "Content-Transfer-Encoding: %s\n" encoding)))
- (insert "\n")
- (goto-char (point-min))
- (while (progn (end-of-line) (not (eobp)))
- (insert "\r")
- (forward-line 1))
- (or (smime-encrypt-region (point-min)(point-max))
- (throw 'mime-edit-error 'pgp-error))
- (delete-region (point-min)(point-max))
- (insert "--[[application/pkcs7-mime; name=\"smime.p7m\"
-Content-Disposition: attachment; filename=\"smime.p7m\"
-Content-Description: S/MIME Encrypted Message][base64]]\n")
- (insert-buffer-substring smime-output-buffer)))))
+ (let (recipients header)
+ (let ((ret (mime-edit-make-encrypt-recipient-header)))
+ (setq recipients (aref ret 1)
+ header (aref ret 2)))
+ (narrow-to-region beg end)
+ (let* ((ret
+ (mime-edit-translate-region beg end boundary))
+ (ctype (car ret))
+ (encoding (nth 1 ret))
+ (context (epg-make-context 'CMS))
+ cipher)
+ (goto-char beg)
+ (insert header)
+ (insert (format "Content-Type: %s\n" ctype))
+ (if encoding
+ (insert (format "Content-Transfer-Encoding: %s\n" encoding)))
+ (insert "\n")
+ (mime-encode-header-in-buffer)
+ (condition-case error
+ (setq cipher
+ (epg-encrypt-string
+ context
+ (buffer-substring (point-min) (point-max))
+ (epa-select-keys
+ context
+ "\
+Select recipents for encryption.
+If no one is selected, symmetric encryption will be performed. "
+ (mapcar (lambda (recipient)
+ (nth 1 (std11-extract-address-components
+ recipient)))
+ (split-string recipients
+ "\\([ \t\n]*,[ \t\n]*\\)+")))))
+ (error (signal 'mime-edit-error (cdr error))))
+ (delete-region (point-min)(point-max))
+ (goto-char beg)
+ (insert (format "--[[application/pkcs7-mime;
+ smime-type=enveloped-data;
+ name=smime.p7m
+Content-Disposition: attachment; filename=smime.p7m][base64]]
+
+")
+ (base64-encode-string cipher)))))))