Мне нужно прикрепить файл с помощью mailx, но на данный момент у меня ничего не получается.
Вот мой код:
subject = "Something happened"
to = "[email protected]"
body = "Attachment Test"
attachment=/path/to/somefile.csv
uuencode $attachment | mailx -s "$subject" "$to" << EOF
The message is ready to be sent with the following file or link attachments:
somefile.csv
Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments. Check your
e-mail security settings to determine how attachments are handled.
EOF
Мы будем очень благодарны за любые отзывы.
Обновлять Я добавил привязку var, чтобы не использовать путь каждый раз.





Итак, вот несколько первых ваших проблем.
Похоже, вы предполагаете, что почтовый клиент будет обрабатывать вложения с uuencoded без каких-либо заголовков. Этого не случится.
Вы неправильно используете перенаправление ввода-вывода: вывод uuencode и документ здесь передаются в mailx, чего не может произойти.
Вы неправильно используете uuencode: если указан один путь, это просто имя для декодированного файла, а не имя входного файла. Если предоставить файл дважды, декодированному файлу будет присвоено то же имя, что и прочитанному. Флаг -m принудительно кодирует base64. Но это по-прежнему не будет предоставлять заголовки вложений для mailx.
Лучше получить копию mpack, которая будет делать то, что вы хотите.
Если вам нужно это сделать, вы можете сделать что-то вроде этого:
cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to"
place your message from the here block in your example here
EOF
Есть много других возможностей ... но здесь все еще есть документ как в вашем примере, и это было легко с моей головы, и здесь нет временного файла.
У меня следующая ошибка: uuencode: недопустимый параметр - m Использование: uuencode [infile] remotefile
У вас есть более старая версия uuencode, до того, как она обеспечила кодировку base64 ... вы все равно можете получить mpack и просто скомпилировать его для использования локально под своей учетной записью ... это то, что я, вероятно, сделал бы.
Вы должны объединить текст сообщения и вложение с кодом uuencoded:
$ subject = "Something happened"
$ to = "[email protected]"
$ body = "Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments. Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"
Есть разные способы предоставить текст сообщения, это просто пример, близкий к вашему исходному вопросу. Если сообщение необходимо повторно использовать, имеет смысл просто сохранить его в файле и использовать этот файл.
Спасибо за ответ! Итак, файл msg.txt создается EOF, а затем повторно используется в последней строке?
Виноват! я разместил кота> msg.txt << EOF
Спасибо большое! Да, я видел, что есть mutt, который может делать простые вложения, но, поскольку я не являюсь root в этом ящике, мне придется иметь дело с любым взломом mailx.