2013-10-02 6 views
1

Я взял сценарий у кого-то, и скрипт bash работает нормально, но он не полностью отполирован. Таким образом, в целом и упрощенно, он отправляет отчет по электронной почте людям, который требуется от текстового файла. Итак, проблема в этом. Каждая строка в этом текстовом файле представляет данные, которые должны быть отправлены пользователю по электронной почте. Сценарий форматирует данные, поэтому их легко читать и отправляет электронное письмо. Когда электронное письмо будет отправлено, оно будет иметь 3 строки в электронном письме для пользователей 1 и 2 строки в электронном письме для пользователя2. Хорошо, хорошо работает. Однако вместо того, чтобы отправлять по электронной почте каждый пользователь 1 и пользователь 2, он отправляет 3 тем же письма пользователю 1 и 2 того же электронного письма пользователю 2. По сути дублирует электронное письмо. Я думаю, это не огромная проблема, если они получают только 2 письма, однако, что, если у них есть 20-30 строк? Они могут получать 20-30 таких же писем.Отправить один, а не несколько писем с помощью скрипта bash

 Line1: User 1 UnitCost Total Cost RemainingBalance 
    Line2: User 1 UnitCost Total Cost RemainingBalance 
    Line3: User 1 UnitCost Total Cost RemainingBalance 
    Line4: User 2 UnitCost Total Cost RemainingBalance 
    Line5: User 2 UnitCost Total Cost RemainingBalance 

Итак, что я хотел бы знать, есть, вот линия разослать по электронной почте:

printf "$USER\n$MESSAGE\n\n$DETAIL" | mailx -r [email protected] -s 
"Email for balance" "$EMAIL" 

Итак, есть ли способ без повторного написания сценария, чтобы mailx отправить одну электронная почта для каждого получателя? Не уверен, что здесь лучший способ. Любой вход был бы оценен!

+0

линии вы показали только одно сообщение. вы должны забыть цикл вокруг этой линии. –

ответ

1

создать временный каталог

TMPDIR=xxx 
mkdir "${TMPDIR}" || { echo "failed to create temporary dir ${TMPDIR}";exit 1;} 

выход перенаправления в файл во временном каталоге

printf "$USER\n$MESSAGE\n\n$DETAIL" >>"${TMPDIR}/${EMAIL}.txt" 

затем получить электронную почту от имени файла и отправить во временный файл содержимого

for FILE in "${TMPDIR}"/*.txt; do 
    mailx -r [email protected] -s "Email for balance" "${FILE%.txt}" <"${FILE}" 
done 
rm -r "${TMPDIR}" 
+0

Спасибо, я попробую. – hotdang

+0

Я не знаю, что я делаю неправильно, но я не могу заставить его работать. Когда я запускаю код без изменений, он проходит, но он не отправляется по электронной почте. Когда я изменяю параметр, например, «$ {FILE% .txt}» <"$ {ФАЙЛ}", письмо работает, но оно по-прежнему отправляет дубликаты. – hotdang

Смежные вопросы