Subject: bug#7589: smtpmail: bad line endings in queued mails on Windows

From: Vida Gábor <[email-masked]>
Date: Wed, 08 Dec 2010 00:26:15 +0100

Hi!

I've already sent this bug to help-emacs-windows (as advised by M-x
report-emacs-bug in Windows port of "GNU Emacs 23.1.50.1
(i386-mingw-nt6.0.6001) of 2009-11-04 on LENNART-69DE564 (patched)"),
but I think that is not the best place, so do I report it here.

[h-e-w] 23.1.50; smtpmail: bad line endings in queued mails
From: Gábor Vida
Subject: [h-e-w] 23.1.50; smtpmail: bad line endings in queued mails
Date: Sun, 26 Sep 2010 00:20:31 +0200

Hi!

This problem comes only if `smtpmail-queue-mail' is set to `t'.

When I'm ready with the mail, smtpmail-send-it is called and it tries to
save the mail to disk. It is ok, but if I open the file with
find-file-literally, then I see an additional ^M character at the end of
each line. This causes problem (at least with MS Exchange) when I send
it: the mail received by the recipient has empty body. This is sure that
this additional ^M causes the problem (if I set smtpmail-queue-mail to
nil, the smtpmail trace shows only one ^M at the end of each line).

I tried to understand what and where is the problem in the code, but the
only conclusion was that if smtpmail reads the saved mail without
conversion (coding-system-for-read set to 'no-conversion), then it
should save it using Unix-style line endings.

I run Emacs from Cygwin.

Thanks and regards,
Gábor

Here is the bugous smtpmail trace:

[...]
250-SIZE 10485760^M
250-PIPELINING^M
250-DSN^M
250-ENHANCEDSTATUSCODES^M
250-AUTH GSSAPI NTLM LOGIN^M
250-8BITMIME^M
250-BINARYMIME^M
250 CHUNKING^M
[...]
235 2.7.0 Authentication successful^M
MAIL FROM:<address@hidden> SIZE=426^M
250 2.1.0 Sender OK^M
RCPT TO:<address@hidden>^M
250 2.1.5 Recipient OK^M
DATA^M
354 Start mail input; end with <CRLF>.<CRLF>^M
From: address@hidden (=?utf-8?Q?G=C3=A1bor?= VIDA)^M^M
To: Vida =?utf-8?Q?G=C3=A1bor?= <address@hidden>^M^M
Subject: aa^M^M
Date: Sat, 25 Sep 2010 22:52:36 +0200^M^M
Message-ID: <address@hidden>^M^M
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (windows-nt)^M^M
MIME-Version: 1.0^M^M
Content-Type: text/plain; charset=utf-8^M^M
Content-Transfer-Encoding: base64^M^M
^M^M
DQotLSANCsOcZHYsDQpHw6Fib3INCg==^M^M
.^M
250 2.6.0 <address@hidden> Queued mail for delivery^M
QUIT^M
221 2.0.0 Service closing transmission channel^M

And the generated part:

This is a bug report for the PATCHED Emacs+EmacsW32.
Please test the unpatched version of Emacs+EmacsW32 before reporting
if you can. If the bug is also in the unpatched version then
report from the unpatched version else report here.

If it is very inconvenient for you to try the unpatched version,
but you believe the bug is not related to the patches then you
may change the address above to address@hidden

For easy to read information about the patches see EmacsW32 home
page.

Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the address@hidden mailing list.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug.  If you can, give
a recipe starting from `emacs -Q':

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
For information about debugging Emacs, please read the file
c:/Program Files/Emacs/emacs/etc/DEBUG.

In GNU Emacs 23.1.50.1 (i386-mingw-nt6.0.6001)
 of 2009-11-04 on LENNART-69DE564 (patched)
Windowing system distributor `Microsoft Corp.', version 6.0.6001
configured using `configure --with-gcc (3.4) --cflags -Ic:/g/include'

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: C.UTF-8

  value of $XMODIFIERS: nil
  locale-coding-system: cp1252
  default enable-multibyte-characters: t

Major mode: Fundamental

Minor modes in effect:
  minibuffer-depth-indicate-mode: t
  icicle-mode: t
  display-time-mode: t
  pretty-control-l-mode: t
  delete-selection-mode: t
  shell-dirtrack-mode: t
  which-function-mode: t
  show-paren-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  noticeable-minibuffer-prompts-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  global-auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  size-indication-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-n C-n C-n C-n C-n C-n C-n # # # # # # # # # # # # 
# # # # C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-x b * M <backspace> <tab> m <tab> 
<return> C-x k <return> y C-x b * t r <tab> <return> 
M-> M-< C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-p C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f 
C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f 
C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f C-f C-n 
C-n C-n C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n M-< 
C-s v i d a g C-s C-n C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-s b u g s C-s C-n C-p C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-s m a i l i n g M-b M-b M-b M-b M-b M-b 
C-SPC M-f M-f M-f M-w C-p C-p C-p M-x M-p M-p <ret
urn>

Recent messages:
No more articles [2 times]
Computing completion candidates... [2 times]
Buffer *mail* modified; kill anyway? (y or n) 
Computing completion candidates...
Mark set [2 times]
Auto-saving...done
Mark set
Mark saved where search started [3 times]
Mark set
Auto-saving...done

Load-path shadows:
~/config/emacs.d/elisp/apel/timezone hides c:/Program 
Files/Emacs/emacs/lisp/timezone
~/config/emacs.d/elisp/apel/env hides c:/Program Files/Emacs/emacs/lisp/env
c:/Program Files/Emacs/EmacsW32/nxhtml/util/chart hides c:/Program 
Files/Emacs/emacs/lisp/emacs-lisp/chart

Features:
(shadow emacsbug debug smiley gnus-async gnus-bcklg goto-addr vc-cvs
noutline outline cl-specs edebug mule-diag newcomment multi-isearch
windmove time-stamp mailalias sort bbdb-gui gnus-cite face-remap
parse-time gnus-ml gnus-topic nnfolder utf-7 utf7 nnimap nndraft nnmh
bbdb-gnus bbdb-snarf mail-extr bbdb-com nnagent nnml gnus-agent
gnus-srvr gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu
mml2015 pgg pgg-parse pgg-def mm-view smime dig gnus-cache gnus-sum
gnus-demon nntp gnus-group gnus-undo nnmail mail-source nnoo gnus-start
gnus-spec gnus-int gnus-range gnus-win gnus gnus-ems mb-depth two-column
bookmark pp icicles icicles-mode icicles-cmd2 yow cookie1 etags
icicles-cmd1 icicles-mcmd help-mode view icicles-fn icicles-mac
icicles-var icicles-opt icicles-face hexrgb time google-maps
google-maps-static google-maps-geocode google-maps-base json
bbdb-autoloads bbdb hidesearch hide-lines jabber-autoloads tramp-imap
epa epg epg-config imap-hash imap message ecomplete rfc822 mml mml-sec
mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 qp
ietf-drums mailabbrev nnheader gmm-utils mailheader canlock sha1
hex-util hashcash mail-utils assoc tramp-gw tramp-fish tramp-cache
tramp-ftp tramp-cmds tramp auth-source gnus-util netrc time-date
password-cache format-spec tramp-compat trampver traverselisp grep-a-lot
grep+ compile+ compile- uniquify byte-opt hexview-mode htmlize
auto-install thingatpt bytecomp byte-compile smtpmail sendmail
modeline-posn shebang pp-c-l buff-menu+ delsel irfc muse-html
muse-xml-common pcomplete cus-edit cus-start muse-publish muse-project
muse-protocols info muse-regexps derived muse muse-nested-tags muse-mode
google winner filecache multi-term term ehelp elscreen-server
elscreen-w3m mule-util alist elscreen multi-shell edmacro kmacro
ansi-color shell type-break sunrise-commander advice help-fns
advice-preload dired-x dired-aux dired w3m-load url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-util
url-parse timezone pym static apel-ver product url-vars mm-util
mail-prsvr mailcap esense-start erlang regexp-opt erlang-start
whitespace which-func imenu paren hl-line+ hl-line avoid ffap memo-pop
fixme-mode saveplace vc-dispatcher vc-svn emacsw32 find-func w32-meta
menuacc tmm electric w32-integ w32shell w32-grep grep compile comint
ring rebind ourcomments-widgets new-key-seq-widget wid-edit hfyview
easy-mmode easymenu htmlfontify cl cl-19 noprint nxhtml-loader
emacsw32-eol tooltip ediff-hook vc-hooks lisp-float-type mwheel dos-w32
disp-table ls-lisp w32-win w32-vars tool-bar dnd fontset image fringe
lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar
mldrag mouse jit-lock font-lock syntax facemenu font-core frame cham
georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese hebrew greek romanian slovak czech european ethiopic
indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple
abbrev button minibuffer faces cus-face text-properties overlay md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process multi-tty emacs)