Используя стандартный почтовый индекс CentOS 7 (отображается как heirloom-mailx), я упростил это до простого использования текстового файла с требуемыми заголовками и статической границей для многочастной / смешанной и многочастной / альтернативной настройки.
Я уверен, что вы можете определить multipart / related, если хотите с той же настройкой.
test.txt:
--000000000000f3b2150570186a0e
Content-Type: multipart/alternative; boundary="000000000000f3b2130570186a0c"
--000000000000f3b2130570186a0c
Content-Type: text/plain; charset="UTF-8"
This is my plain text stuff here, in case the email client does not support HTML or is blocking it purposely
My Link Here <http://www.example.com>
--000000000000f3b2130570186a0c
Content-Type: text/html; charset="UTF-8"
<div dir="ltr">
<div>This is my HTML version of the email</div>
<div><br></div>
<div><a href="http://www.example.com">My Link Here</a><br></div>
</div>
--000000000000f3b2130570186a0c--
--000000000000f3b2150570186a0e
Content-Type: text/csv; charset="US-ASCII"; name="test.csv"
Content-Disposition: attachment; filename="test.csv"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_jj5qmzqz0
Границы определяют составные сегменты.
Идентификатор границы, который не имеет черточек в конце, является начальной точкой сегмента.
Конечная точка с двумя черточками в конце.
В этом примере есть часть в основной части multipart / mixed для multipart / alternative.
В составном / альтернативном методе в основном говорится: «Откат к этому, ЕСЛИ приоритетная часть не выполняется» - в этом примере почтовые клиенты обычно принимают HTML за приоритет. Если почтовый клиент не отображает HTML, он возвращается к простому тексту.
Метод multipart / mixed, который инкапсулирует все это сообщение, в основном говорит, что здесь разный контент, отображает оба.
В этом примере я разместил вложение в виде файла CSV на электронную почту. Вы увидите, что вложение подключается с помощью base64 в приведенной ниже команде.
Я добавил в качестве примера вложение, вам нужно будет соответствующим образом установить тип содержимого для вашего вложения и указать, будет ли он встроенным или нет.
X-Attachment-Id необходим для некоторых провайдеров, случайным образом установите заданный вами идентификатор.
Команда для отправки по почте:
echo -e "`cat test.txt; openssl base64 -e < test.csv`\n--000000000000f3b2150570186a0e--\n" | mailx -s "Test 2 $( echo -e "\nContent-Type: multipart/mixed; boundary=\"000000000000f3b2150570186a0e\"" )" -r fromaddress@example.com toaddress@example.com
Как вы можете видеть в строке темы mailx, я статически вставляю многослойную границу, это первый заголовок, который увидит почтовый клиент.
Затем приходит содержимое test.txt, которое выводится.
Что касается вложения, я использую openssl (что довольно стандартно для систем) для преобразования вложения в файл в base64.
Кроме того, я добавил оператор закрытия границ в конце этого эха, чтобы обозначить конец сообщения.
Это работает для решения проблем семейной реликвии и практически не требует скриптов.
Вместо этого эхо может быть фидом или любым другим количеством методов.