Как отправлять электронные письма нескольким получателям, каждый из которых получает отдельное вложение, используя команду mail из терминала?

Используйте это:

awk -F, 'BEGIN{OFS=","} NR>1{$2=$2".1"}1' file
  • -F,задает разделитель полей ввода
  • BEGIN{OFS=","}задает разделитель полей вывода
  • NR>1{$2=$2".1"}добавляет .1, если номер строки больше 0, ко второму полю
0
30.05.2021, 00:32
2 ответа

Я думаю, было бы проще начать с циклического просмотра вложений и извлечь получателя по пути, так как оболочка расширит глобус в Алфавитный порядок. Ваш скрипт может выглядеть так:

#!/usr/bin/env sh

line=1

for i in *.pdf
do
    echo "$i"
    recipient="$(awk -v line="$line" 'NR==line' emailADD.txt)"
    if [ -n "$recipient" ]
    then
        printf "recipient: %s\n" "$recipient"
        line=$((line+1))
        printf '%s\n' 'Hello, world!' | echo mail -s 'This is the email subject' -a "$i" "$recipient"
    fi
done

Удалите echo, чтобы фактически запустить команду mail, но сначала запустите ее вместе с ней. чтобы убедиться, что он будет делать то, что вам нужно.

0
28.07.2021, 11:28

Если вы собираетесь отправлять кучу электронных писем, вы можете повысить производительность, избегая открытия файла emailADD.txt один раз для каждого вложения. Если вы используете bash, вы можете использовать <()для обработки вложений без сохранения их имен в файле:

$ paste emailADD.txt <(ls folder/) | while read -r email pdf; do printf '%s\n' 'Hello, world!' | echo mail -s 'This is the email subject' -a "$pdf" "$email"; done

Вы можете удалить echo, как только вам покажется, что он будет делать то, что вы хотите.

Однако, если вы не будете запускать это в автоматическом/обычном режиме, рассмотрите возможность создания текста полных команд (, включая printf ), перенаправление вывода в файл, а затем выполнение команд в этом файле. Это позволяет проверить команды, избежать неожиданностей, если emailADD.txt или список вложений изменится во время -выполнения, и дает вам отчет о том, что было сделано (, который можно сохранить или удалить ). Вот так:

$ paste emailADD.txt <(ls folder/) | while read -r email pdf; do echo "printf '%s\n' 'Hello, world' | mail -s 'This is the email subject' -a '$pdf' '$email' " ; done >| cmds

0
28.07.2021, 11:28

Теги

Похожие вопросы