.. _email_clients:

Email clients info for Linux
============================

Git
---

These days most developers use ``git send-email`` instead of regular
email clients.  The man page for this is quite good.  On the receiving
end, maintainers use ``git am`` to apply the patches.

If you are new to ``git`` then send your first patch to yourself.  Save it
as raw text including all the headers.  Run ``git am raw_email.txt`` and
then review the changelog with ``git log``.  When that works then send
the patch to the appropriate mailing list(s).

General Preferences
-------------------

Patches for the Linux kernel are submitted via email, preferably as
inline text in the body of the email.  Some maintainers accept
attachments, but then the attachments should have content-type
``text/plain``.  However, attachments are generally frowned upon because
it makes quoting portions of the patch more difficult in the patch
review process.

Email clients that are used for Linux kernel patches should send the
patch text untouched.  For example, they should not modify or delete tabs
or spaces, even at the beginning or end of lines.

Don't send patches with ``format=flowed``.  This can cause unexpected
and unwanted line breaks.

Don't let your email client do automatic word wrapping for you.
This can also corrupt your patch.

Email clients should not modify the character set encoding of the text.
Emailed patches should be in ASCII or UTF-8 encoding only.
If you configure your email client to send emails with UTF-8 encoding,
you avoid some possible charset problems.

Email clients should generate and maintain References: or In-Reply-To:
headers so that mail threading is not broken.

Copy-and-paste (or cut-and-paste) usually does not work for patches
because tabs are converted to spaces.  Using xclipboard, xclip, and/or
xcutsel may work, but it's best to test this for yourself or just avoid
copy-and-paste.

Don't use PGP/GPG signatures in mail that contains patches.
This breaks many scripts that read and apply the patches.
(This should be fixable.)

It's a good idea to send a patch to yourself, save the received message,
and successfully apply it with 'patch' before sending patches to Linux
mailing lists.


Some email client (MUA) hints
-----------------------------

Here are some specific MUA configuration hints for editing and sending
patches for the Linux kernel.  These are not meant to be complete
software package configuration summaries.


Legend:

- TUI = text-based user interface
- GUI = graphical user interface

Alpine (TUI)
************

Config options:

In the :menuselection:`Sending Preferences` section:

- :menuselection:`Do Not Send Flowed Text` must be ``enabled``
- :menuselection:`Strip Whitespace Before Sending` must be ``disabled``

When composing the message, the cursor should be placed where the patch
should appear, and then pressing :kbd:`CTRL-R` let you specify the patch file
to insert into the message.

Claws Mail (GUI)
****************

Works. Some people use this successfully for patches.

To insert a patch use :menuselection:`Message-->Insert` File (:kbd:`CTRL-I`)
or an external editor.

If the inserted patch has to be edited in the Claws composition window
"Auto wrapping" in
:menuselection:`Configuration-->Preferences-->Compose-->Wrapping` should be
disabled.

Evolution (GUI)
***************

Some people use this successfully for patches.

When composing mail select: Preformat
  from :menuselection:`Format-->Paragraph Style-->Preformatted` (:kbd:`CTRL-7`)
  or the toolbar

Then use:
:menuselection:`Insert-->Text File...` (:kbd:`ALT-N x`)
to insert the patch.

You can also ``diff -Nru old.c new.c | xclip``, select
:menuselection:`Preformat`, then paste with the middle button.

Kmail (GUI)
***********

Some people use Kmail successfully for patches.

The default setting of not composing in HTML is appropriate; do not
enable it.

When composing an email, under options, uncheck "word wrap". The only
disadvantage is any text you type in the email will not be word-wrapped
so you will have to manually word wrap text before the patch. The easiest
way around this is to compose your email with word wrap enabled, then save
it as a draft. Once you pull it up again from your drafts it is now hard
word-wrapped and you can uncheck "word wrap" without losing the existing
wrapping.

At the bottom of your email, put the commonly-used patch delimiter before
inserting your patch:  three hyphens (``---``).

Then from the :menuselection:`Message` menu item, select insert file and
choose your patch.
As an added bonus you can customise the message creation toolbar menu
and put the :menuselection:`insert file` icon there.

Make the composer window wide enough so that no lines wrap. As of
KMail 1.13.5 (KDE 4.5.4), KMail will apply word wrapping when sending
the email if the lines wrap in the composer window. Having word wrapping
disabled in the Options menu isn't enough. Thus, if your patch has very
long lines, you must make the composer window very wide before sending
the email. See: https://bugs.kde.org/show_bug.cgi?id=174034

You can safely GPG sign attachments, but inlined text is preferred for
patches so do not GPG sign them.  Signing patches that have been inserted
as inlined text will make them tricky to extract from their 7-bit encoding.

If you absolutely must send patches as attachments instead of inlining
them as text, right click on the attachment and select properties, and
highlight :menuselection:`Suggest automatic display` to make the attachment
inlined to make it more viewable.

When saving patches that are sent as inlined text, select the email that
contains the patch from the message list pane, right click and select
:menuselection:`save as`.  You can use the whole email unmodified as a patch
if it was properly composed.  There is no option currently to save the email
when you are actually viewing it in its own window -- there has been a request
filed at kmail's bugzilla and hopefully this will be addressed.  Emails are
saved as read-write for user only so you will have to chmod them to make them
group and world readable if you copy them elsewhere.

Lotus Notes (GUI)
*****************

Run away from it.

IBM Verse (Web GUI)
*******************

See Lotus Notes.

Mutt (TUI)
**********

Plenty of Linux developers use ``mutt``, so it must work pretty well.

Mutt doesn't come with an editor, so whatever editor you use should be
used in a way that there are no automatic linebreaks.  Most editors have
an :menuselection:`insert file` option that inserts the contents of a file
unaltered.

To use ``vim`` with mutt::

  set editor="vi"

If using xclip, type the command::

  :set paste

before middle button or shift-insert or use::

  :r filename

if you want to include the patch inline.
(a)ttach works fine without ``set paste``.

You can also generate patches with ``git format-patch`` and then use Mutt
to send them::

    $ mutt -H 0001-some-bug-fix.patch

Config options:

It should work with default settings.
However, it's a good idea to set the ``send_charset`` to::

  set send_charset="us-ascii:utf-8"

Mutt is highly customizable. Here is a minimum configuration to start
using Mutt to send patches through Gmail::

  # .muttrc
  # ================  IMAP ====================
  set imap_user = 'yourusername@gmail.com'
  set imap_pass = 'yourpassword'
  set spoolfile = imaps://imap.gmail.com/INBOX
  set folder = imaps://imap.gmail.com/
  set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"
  set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
  set mbox="imaps://imap.gmail.com/[Gmail]/All Mail"

  # ================  SMTP  ====================
  set smtp_url = "smtp://username@smtp.gmail.com:587/"
  set smtp_pass = $imap_pass
  set ssl_force_tls = yes # Require encrypted connection

  # ================  Composition  ====================
  set editor = `echo \$EDITOR`
  set edit_headers = yes  # See the headers when editing
  set charset = UTF-8     # value of $LANG; also fallback for send_charset
  # Sender, email address, and sign-off line must match
  unset use_domain        # because joe@localhost is just embarrassing
  set realname = "YOUR NAME"
  set from = "username@gmail.com"
  set use_from = yes

The Mutt docs have lots more information:

    http://dev.mutt.org/trac/wiki/UseCases/Gmail

    http://dev.mutt.org/doc/manual.html

Pine (TUI)
**********

Pine has had some whitespace truncation issues in the past, but these
should all be fixed now.

Use alpine (pine's successor) if you can.

Config options:

- ``quell-flowed-text`` is needed for recent versions
- the ``no-strip-whitespace-before-send`` option is needed


Sylpheed (GUI)
**************

- Works well for inlining text (or using attachments).
- Allows use of an external editor.
- Is slow on large folders.
- Won't do TLS SMTP auth over a non-SSL connection.
- Has a helpful ruler bar in the compose window.
- Adding addresses to address book doesn't understand the display name
  properly.

Thunderbird (GUI)
*****************

Thunderbird is an Outlook clone that likes to mangle text, but there are ways
to coerce it into behaving.

- Allow use of an external editor:
  The easiest thing to do with Thunderbird and patches is to use an
  "external editor" extension and then just use your favorite ``$EDITOR``
  for reading/merging patches into the body text.  To do this, download
  and install the extension, then add a button for it using
  :menuselection:`View-->Toolbars-->Customize...` and finally just click on it
  when in the :menuselection:`Compose` dialog.

  Please note that "external editor" requires that your editor must not
  fork, or in other words, the editor must not return before closing.
  You may have to pass additional flags or change the settings of your
  editor. Most notably if you are using gvim then you must pass the -f
  option to gvim by putting ``/usr/bin/gvim -f`` (if the binary is in
  ``/usr/bin``) to the text editor field in :menuselection:`external editor`
  settings. If you are using some other editor then please read its manual
  to find out how to do this.

To beat some sense out of the internal editor, do this:

- Edit your Thunderbird config settings so that it won't use ``format=flowed``.
  Go to :menuselection:`edit-->preferences-->advanced-->config editor` to bring up
  the thunderbird's registry editor.

- Set ``mailnews.send_plaintext_flowed`` to ``false``

- Set ``mailnews.wraplength`` from ``72`` to ``0``

- :menuselection:`View-->Message Body As-->Plain Text`

- :menuselection:`View-->Character Encoding-->Unicode (UTF-8)`

TkRat (GUI)
***********

Works.  Use "Insert file..." or external editor.

Gmail (Web GUI)
***************

Does not work for sending patches.

Gmail web client converts tabs to spaces automatically.

At the same time it wraps lines every 78 chars with CRLF style line breaks
although tab2space problem can be solved with external editor.

Another problem is that Gmail will base64-encode any message that has a
non-ASCII character. That includes things like European names.
