# logcheck: Invalid or incomplete multibyte or wide character

## fank

У меня на сервере работает logcheck, в настройках которого указан мэйлер mail

```
# which mail

/usr/bin/mail
```

```
# equery b /usr/bin/mail

[ Searching for file(s) /usr/bin/mail in *... ]

mail-client/nail-11.25-r3 (/usr/bin/mail -> /usr/bin/nail)
```

если сообщение содержит русские символы, то я вместо сообщения получаю такую ошибку

 *Quote:*   

> Invalid or incomplete multibyte or wide character
> 
> . . . message not sent.
> 
> "//dead.letter" 21/3017

 

несколько раз погуглив, я так и не понял в чем суть проблемы

согласно мануалу nail:

 *Quote:*   

> 
> 
> # Outgoing messages are sent in ISO-8859-1 if all their characters are
> 
> # representable in it, otherwise in UTF-8.
> ...

 

```
# file /dead.letter

/dead.letter: UTF-8 Unicode text

```

```
# locale

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=
```

собственно, на самом сервере поднят exim который только тем и занимается, что перенаправляет почту на основной почтовик, дабы письма никогда не падали в /dead.letter

в конфиге nail указано:

```
# Use the local sendmail (/usr/lib/sendmail) binary by default.

# (Uncomment the following line to use a SMTP server)

set smtp=localhost

```

сообщение отправляется кроном, и мне припоминается, что в данном случае крон просто теряет какие-то переменные окружения

есть ли у кого какие мысли по поводу происходящего и можно ли как-то в принципе предотвратить недоставку почты?

----------

## fank

к слову, nail уже переименовался в heirloom и последний changelog говорит следующее:

 *Quote:*   

> * The values of the "sendcharsets" variable are now separately traversed
> 
>   for each part of a multipart message, so that if e.g. the main body can
> 
>   be represented in ISO-8859-1 but an attachment text needs UTF-8, these
> ...

 

то есть по идее, он выбирал раньше кодировку единожды для тела и для аттача

а если logcheck отсылает такой командой

```
cat $TMPDIR/checkreport.$$ | $MAIL -s "$HOSTNAME $DATE ACTIVE SYSTEM ATTACK!" $SYSADMIN
```

считает ли nail это аттачем или нет?

согласно мануалу nail он отсылает аттач с ключиком -a

----------

## fank

хех....

 *Quote:*   

> [12.3] released 7/15/07
> 
> * Multibyte characters are now handled correctly when printing texts
> 
>   encoded in base64. Previously, if a multibyte character spanned
> ...

 

вот оно и решение, проблема теперь только как обновиться на этот самый новый heirloom

----------

## fank

проблема пофикшена

кого интересует ebuild:

```
# Copyright 1999-2007 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/mail-client/nail/nail-11.25-r3.ebuild,v 1.13 2007/07/09 05:37:56 redhatter Exp $

inherit eutils

DESCRIPTION="Heirloom is an enhanced mailx-compatible mail client"

MY_PN="mailx-${PV}"

SRC_URI="mirror://sourceforge/heirloom/files/${PN}/${PV}/${MY_PN}.tar.bz2"

HOMEPAGE="http://heirloom.sourceforge.net/"

PROVIDE="virtual/mailx"

DEPEND="ssl? ( dev-libs/openssl )

        gssapi? ( virtual/krb )

    !virtual/mailx"

SLOT="0"

LICENSE="BSD"

KEYWORDS="alpha amd64 hppa ia64 ~mips ppc ppc64 sparc x86"

IUSE="ssl net gssapi"

S=${WORKDIR}/${MY_PN}

remove_ssl() {

    elog "Disabling SSL support"

    sed -i -e 's~#define USE_\(OPEN\)\?SSL~#undef USE_\1SSL~' config.h

    sed -i -e 's~-ssl~~' -e 's~-lcrypto~~' LIBS

}

remove_sockets() {

    elog "Not enabling sockets (thus disabling IMAP, POP and SMTP)"

    sed -i -e 's~#define HAVE_SOCKETS~#undef HAVE_SOCKETS~' config.h

}

src_compile() {

    # Do not strip the binary

    sed -i -e '/STRIP/d' Makefile

    # Build config.h and LIBS, neccesary to tweak the config

    make config.h LIBS

    # Logic to 'configure' the package

    if use net && ! use ssl ; then

        remove_ssl

    elif ! use net ; then

        # Linking to ssl without net support is pointless

        remove_ssl

        remove_sockets

    fi

    # Now really build it

    emake PREFIX=/usr MAILSPOOL='/var/spool/mail' || die "emake failed"

}

src_install () {

    # Use /usr/lib/sendmail by default and provide an example

    cat <<- EOSMTP >> nail.rc

        # Use the local sendmail (/usr/lib/sendmail) binary by default.

        # (Uncomment the following line to use a SMTP server)

        #set smtp=localhost

    EOSMTP

    make DESTDIR=${D} \

        UCBINSTALL=$(type -p install) \

        PREFIX=/usr install || die "install failed"

    dodoc AUTHORS INSTALL README

    dodir /bin

    dosym /usr/bin/mailx /bin/mail

    dosym /usr/bin/mailx /usr/bin/mail

    dosym /usr/bin/mailx /usr/bin/Mail

}

```

----------

