                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

MAIL ETIQUETTE

 1. About the lists
  1.1 Mailing Lists
  1.2 Netiquette
  1.3 Do Not Mail a Single Individual
  1.4 Subscription Required
  1.5 Moderation of new posters
  1.6 Handling trolls and spam
  1.7 How to unsubscribe

 2. Sending mail
  2.1 Reply or New Mail
  2.2 Reply to the List
  2.3 Use a Sensible Subject
  2.4 Do Not Top-Post
  2.5 HTML is not for mails
  2.6 Quoting
  2.7 Digest
  2.8 Please Tell Us How You Solved The Problem!

==============================================================================

1. About the lists

  1.1 Mailing Lists

  The mailing lists we have are all listed and described at
  http://curl.haxx.se/mail/

  Each mailing list is targeted to a specific set of users and subjects,
  please use the one or the ones that suit you the most.

  Each mailing list have hundreds up to thousands of readers, meaning that
  each mail sent will be received and read by a very large amount of people.
  People from various cultures, regions, religions and continents.

  1.2 Netiquette

  Netiquette is a common name for how to behave on the internet. Of course, in
  each particular group and subculture there will be differences in what is
  acceptable and what is considered good manners.

  This document outlines what we in the cURL project considers to be good
  etiquette, and primarily this focus on how to behave on and how to use our
  mailing lists.

  1.3 Do Not Mail a Single Individual

  Many people send one question to one person. One person gets many mails, and
  there is only one person who can give you a reply. The question may be
  something that other people are also wanting to ask. These other people have
  no way to read the reply, but to ask the one person the question. The one
  person consequently gets overloaded with mail.

  If you really want to contact an individual and perhaps pay for his or her
  services, by all means go ahead, but if it's just another curl question,
  take it to a suitable list instead.

  1.4 Subscription Required

  All curl mailing lists require that you are subscribed to allow a mail to go
  through to all the subscribers.

  If you post without being subscribed (or from a different mail address than
  the one you are subscribed with), your mail will simply be silently
  discarded. You have to subscribe first, then post.

  The reason for this unfortunate and strict subscription policy is of course
  to stop spam from pestering the lists.

  1.5 Moderation of new posters

  Several of the curl mailing lists automatically make all posts from new
  subscribers require moderation. This means that after you've subscribed and
  send your first mail to a list, that mail will not be let through to the
  list until a mailing list administrator has verified that it is OK and
  permits it to get posted.

  Once a first post has been made that proves the sender is actually talking
  about curl-related subjects, the moderation "flag" will be switched off and
  future posts will go through without being moderated.

  The reason for this moderation policy is that we do suffer from spammers who
  actually subscribe and send spam to our lists.

  1.6 Handling trolls and spam

  Despite our good intentions and hard work to keep spam off the lists and to
  maintain a friendly and positive atmosphere, there will be times when spam
  and or trolls get through.

  Troll - "someone who posts inflammatory, extraneous, or off-topic messages
  in an online community"

  Spam - "use of electronic messaging systems to send unsolicited bulk
  messages"

  No matter what, we NEVER EVER respond to trolls or spammers on the list. If
  you believe the list admin should do something particular, contact him/her
  off-list. The subject will be taken care of as good as possible to prevent
  repeated offences, but responding on the list to such messages never lead to
  anything good and only puts the light even more on the offender: which was
  the entire purpose of it getting to the list in the first place.

  Don't feed the trolls!

  1.7 How to unsubscribe

  You unsubscribe the same way you subscribed in the first place. You go to
  the page for the particular mailing list you're subscribed to and you enter
  your email address and password and press the unsubscribe button.

  Also, this information is included in the headers of every mail that is sent
  out to all curl related mailing lists and there's footer in each mail that
  links to the "admin" page on which you can unsubscribe and change other
  options.

  You NEVER EVER email the mailing list requesting someone else to get you off
  the list.


2. Sending mail

  2.1 Reply or New Mail

  Please do not reply to an existing message as a short-cut to post a message
  to the lists.

  Many mail programs and web archivers use information within mails to keep
  them together as "threads", as collections of posts that discuss a certain
  subject. If you don't intend to reply on the same or similar subject, don't
  just hit reply on an existing mail and change subject, create a new mail.

  2.2 Reply to the List

  When replying to a message from the list, make sure that you do "group
  reply" or "reply to all", and not just reply to the author of the single
  mail you reply to.

  We're actively discouraging replying back to the single person by setting
  the Reply-To: field in outgoing mails back to the mailing list address,
  making it harder for people to mail the author only by mistake.

  2.3 Use a Sensible Subject

  Please use a subject of the mail that makes sense and that is related to the
  contents of your mail. It makes it a lot easier to find your mail afterwards
  and it makes it easier to track mail threads and topics.

  2.4 Do Not Top-Post

  If you reply to a message, don't use top-posting. Top-posting is when you
  write the new text at the top of a mail and you insert the previous quoted
  mail conversation below. It forces users to read the mail in a backwards
  order to properly understand it.

  This is why top posting is so bad:

      A: Because it messes up the order in which people normally read
         text.
      Q: Why is top-posting such a bad thing?
      A: Top-posting.
      Q: What is the most annoying thing in e-mail?

  Apart from the screwed up read order (especially when mixed together in a
  thread when someone responds using the mandated bottom-posting style), it
  also makes it impossible to quote only parts of the original mail.

  When you reply to a mail. You let the mail client insert the previous mail
  quoted. Then you put the cursor on the first line of the mail and you move
  down through the mail, deleting all parts of the quotes that don't add
  context for your comments. When you want to add a comment you do so, inline,
  right after the quotes that relate to your comment. Then you continue
  downwards again.

  When most of the quotes have been removed and you've added your own words,
  you're done!

  2.5 HTML is not for mails

  Please switch off those HTML encoded messages. You can mail all those funny
  mails to your friends. We speak plain text mails.

  2.6 Quoting

  Quote as little as possible. Just enough to provide the context you cannot
  leave out. A lengthy description can be found here:

      http://www.netmeister.org/news/learn2quote.html

  2.7 Digest

  We allow subscribers to subscribe to the "digest" version of the mailing
  lists. A digest is a collection of mails lumped together in one single mail.

  Should you decide to reply to a mail sent out as a digest, there are two
  things you MUST consider if you really really cannot subscribe normally
  instead:

  Cut off all mails and chatter that is not related to the mail you want to
  reply to.

  Change the subject name to something sensible and related to the subject,
  preferably even the actual subject of the single mail you wanted to reply to

  2.8 Please Tell Us How You Solved The Problem!

  Many people mail questions to the list, people spend some of their time and
  make an effort in providing good answers to these questions.

  If you are the one who asks, please consider responding once more in case
  one of the hints was what solved your problems. The guys who write answers
  feel good to know that they provided a good answer and that you fixed the
  problem. Far too often, the person who asked the question is never heard of
  again, and we never get to know if he/she is gone because the problem was
  solved or perhaps because the problem was unsolvable!

  Getting the solution posted also helps other users that experience the same
  problem(s). They get to see (possibly in the web archives) that the
  suggested fixes actually has helped at least one person.

