---
name: "snmail"
section: "8"
platform: "linux"
package: "sn"
version: "0.3.8-12"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/snmail"
---

# snmail(8)

mail-to-news filter

## NAME

snmail - mail-to-news filter

## SYNOPSIS

**snmail** \[-*sP*\] \[*listname* \[*prefix*\]\]\

## DESCRIPTION

**snmail** reads a single email message on standard input, and writes the converted message to standard output. This output is suitable for feeding to **snstore**.

**snmail** does these conversions: If the first line is a UUCP **From\_** line, it is silently discarded; a **Newsgroups**: line is added with the value of *prefixlistname* (*prefix* concatenated with *listname*), and other existing **Newsgroups**: lines are removed; and a **Path**: line is created from all **Received**: lines, which are removed; all header lines are unfolded; if no message ID exists, one is created; message IDs in all **References:** lines and **In-Reply-To**: lines are collected into a single **References:** line; all lines are rewritten to end in CRLF; and a lone **.** on a line is written at the end of the message.

**snmail** will accept and pass on messages with invalid header fields.

**snmail** is meant to be run from a  **.forward** or the **/etc/aliases** file (if you're using sendmail or similar) or from a **.qmail** file (if you're using qmail). **snmail** may write status or error messages to standard error.

## OPTIONS

- \-*s*

  Pipe output to **snstore** directly, do not write to standard output.  This is so the exit status is not lost in a shell pipeline.  If you use this flag, it is also a good idea to also use -*c* (tell **snstore** to check if article already exists).

- Other options

  **snmail** also accepts options intended for **snstore**, viz. -*c*, -*v*, and -*n*, and these are passed on uninterpreted.

## ARGUMENTS

- *prefix*

  is the prefix of the newsgroup; if not specified, it defaults to **local.** (note the trailing **.**). *prefix* may not begin with a  **.** (dot) but it may be empty.

- *listname*

  completes the newsgroup name; if not specified, it is the local part of the address in the **Return-Path:** line if it exists and isn't empty; otherwise it is the local part of the messages' first **From:**. So if the message originated from the list \<**linux-lemmings**@vger.rutgers.edu\>, then the default newsgroup becomes **local.linux-lemmings**. *listname* may be empty if *prefix* isn't.

  You may want to have a file /var/spool/sn/**prefixlistname**/.nopost to deny posting from all and sundry, to prevent the mailing list newsgroup from being contaminated.

  *prefix* and *listname* may contain uppercase characters; these are converted to lower case.

## USAGE

There are two ways of forwarding mail to the sn news spool: directly from a user's mail address; or forwarded to a central address and then invoking **snmail**. The central concern here is permissions; while anyone can run **snmail**, not everyone may store mail in the spool.  Mail setups vary a lot, so basically you're on your own here.

## ENVIRONMENT VARIABLES

- **SNROOT**

  If this is set and is not empty, the value is used in place of **/var/spool/sn**, the default news spool directory.

- **PATH**

  If -*s* was specified, determines where to look for **snstore**, before looking in /usr/sbin.

## EXIT STATUS

**snmail** exits 0 if the message was successfully converted and written, **or** if the message ID already exists in the ID database and the message was not stored or converted.

**snmail** exits with 1 on usage error, 2 on operational error, 3 if the mail message wasn't in the proper format.
