ALT Linux Community general discussions
 help / color / mirror / Atom feed
From: "Михаил Шувалов" <mike@shuvaloffs.org>
To: ALT Linux Community general discussions
	<community@lists.altlinux.org>,
	 ALT Linux sysadmin discuss <sysadmins@lists.altlinux.org>
Subject: [Comm] CP1251 и фильтры в procmail
Date: Tue, 19 May 2009 17:50:32 +0400
Message-ID: <cec9a9c50905190650q1d4b0da4yf4aeffa91f3a9a4d@mail.gmail.com> (raw)

Добрый день!

Извините за кросспост, но срочно нужно решить проблема.

Почта принимается fetchmail, далее обрабатывается фильтрами в
gprocmail и копия письма кладется в ящик. Все бы ничего, но некоторые
файлы приходят с кириллицей в именах. Сами файлы представляют собой
rar архив в котором файл с таким же именем. Нужно вытащить из письма
этот файл, сохранить его, проанализировать имя файла, содержашее дату,
извлечь из архива файл и положить в предварительно созданную папку.
Если в имени файла латиница - все нормлаьно, а вот с кирилицей засада.
Привожу фильтр и обрабатывающиескрипты:

фильтр procmail:
:0 HBc
* ^From.*<e-mail>
* ^Content-Disposition: attachment;
| /home/RcvReestr/GetArcAMK


Скрипты:
=========================================================================================================
$ cat /home/RcvReestr/GetArcAMK
#!/bin/sh

# корневая папка, где находятся все скрипты и подкаталоги с полученными архивами
RootPath=/home/RcvReestr

export LANG=ru_RU.UTF-8
export LC_CTYPE="ru_RU.UTF-8"
export LC_NUMERIC="ru_RU.UTF-8"
export LC_TIME="ru_RU.UTF-8"
export LC_COLLATE="ru_RU.UTF-8"
export LC_MONETARY="ru_RU.UTF-8"
export LC_MESSAGES="ru_RU.UTF-8"
export LC_PAPER="ru_RU.UTF-8"
export LC_NAME="ru_RU.UTF-8"
export LC_ADDRESS="ru_RU.UTF-8"
export LC_TELEPHONE="ru_RU.UTF-8"
export LC_MEASUREMENT="ru_RU.UTF-8"
export LC_IDENTIFICATION="ru_RU.UTF-8"
export LC_ALL=

# логфайл
LogFile=${RootPath}/GetArcAMK.log

echo `date +"%d.%m.%Y %H:%M:%S"`"--- start script ---">>$LogFile

# ---------======= Пути ======------------
# куда помещаем для обработки полученные архивы
AllFile=/home/RcvReestr/ALL/AMK

/usr/bin/ripmime -i - -d "$AllFile"

rm -f ${AllFile}/text*

for i in $AllFile/*.rar
do
	echo `date +"%d.%m.%Y %H:%M:%S"` "start of reestrAMK $i ">>$LogFile
	$RootPath/reestrAMK $i
done

# очищаем папку
rm -f ${AllFile}/*.*
echo `date +"%d.%m.%Y %H:%M:%S"`"--- stop script ---">>$LogFile
echo >>$LogFile
==============================================================================================

$ cat /home/RcvReestr/reestrAMK
#!/bin/sh

export LANG=ru_RU.UTF-8
export LC_CTYPE="ru_RU.UTF-8"
export LC_NUMERIC="ru_RU.UTF-8"
export LC_TIME="ru_RU.UTF-8"
export LC_COLLATE="ru_RU.UTF-8"
export LC_MONETARY="ru_RU.UTF-8"
export LC_MESSAGES="ru_RU.UTF-8"
export LC_PAPER="ru_RU.UTF-8"
export LC_NAME="ru_RU.UTF-8"
export LC_ADDRESS="ru_RU.UTF-8"
export LC_TELEPHONE="ru_RU.UTF-8"
export LC_MEASUREMENT="ru_RU.UTF-8"
export LC_IDENTIFICATION="ru_RU.UTF-8"
export LC_ALL=

# Создаем логфайл, если он не существует.
LF=/home/RcvReestr/`basename $0`.log
if [ ! -f $LF ]
then touch $LF
fi

echo `date +"%d.%m.%Y %H:%M:%S"` Start>>$LF

# В качестве параметра должен передаваться архивный файл (*.rar)
if [ $# -lt 1 ]
then	echo "Строка запуска: $0 <filename>"
	echo "Строка запуска: $0 <filename>">>$LF
	exit
fi

# Подпапка с реестрами
CTLGNAME=AMK/FIL/

EXT=.rar

RCVPATH=/home/RcvReestr/ALL/AMK/
SRCPATH=/home/RcvReestr/$CTLGNAME

# Если не подмонтирована папка, то монтируем
mnt=$"`mount | grep SERVER`"
[ "$mnt" ] || sudo ncpmount -S SERVER -U user -P password -m -u 500 -y
utf8 -p cp866 /mnt/SERVER

DSTPATH=/mnt/SERVER/pub/tsr/reestr/$CTLGNAME
FN=`basename $1`

if [ ! -f $RCVPATH$FN ]
then	echo "Отсутствует файл"
	echo "Отсутствует файл">>$LF
	exit
fi

FN=`basename $FN $EXT`

# Получаем дату реестра из имени файла
SPY=`expr $(echo "len($FN)" | m4) - 8`
SPM=`expr $(echo "len($FN)" | m4) - 4`
SPD=`expr $(echo "len($FN)" | m4) - 2`

y=`echo "substr($FN,$SPY,4)" | m4`
m=`echo "substr($FN,$SPM,2)" | m4`
d=`echo "substr($FN,$SPD,2)" | m4`

# Определяем номер филиала
FIL=`echo "substr($FN,0,2)" | m4`

# Куда помещаем полученный архив
SP=$SRCPATH$FIL/$y/$m/$d/

# Куда разархивируем реестры
DP=$DSTPATH$FIL/$y/$m/$d/

if [ ! -d $SP ]
then mkdir -p $SP
fi

if [ ! -d $DP ]
then mkdir -p $DP
fi

unrar e -y ${RCVPATH}${FN}${EXT} ${DP}>>${LF}

mv ${RCVPATH}${FN}${EXT} ${SP}

echo `date +"%d.%m.%Y %H:%M:%S"` --- Stop --->>$LF
echo "">>$LF
=====================================================================================================

-- 
С уважением,
Михаил Шувалов

                 reply	other threads:[~2009-05-19 13:50 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cec9a9c50905190650q1d4b0da4yf4aeffa91f3a9a4d@mail.gmail.com \
    --to=mike@shuvaloffs.org \
    --cc=community@lists.altlinux.org \
    --cc=sysadmins@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git