Электронная почта в формате HTML из семейной реликвии mailx на Linux

Если вы знаете номера строк, которые хотите написать, вы можете сделать это из командной строки:

vim -c "100,200w new_file.txt" -c wq original_file.txt
7
09.08.2017, 20:11
2 ответа

Сначала немного контекста :Я использую версию mailx семейной реликвии -как версию в следующем потоке :https://serverfault.com/questions/136106/what-package-to-install-for-sending-emails-from-localhost-ubuntu

Я использую Ubuntu 16.04 Xenial. Пробовал также на Ubuntu Server 16.04.

Чтобы отправлять электронные письма, я использую следующую функцию для отправки почты с помощью mailx (семейная реликвия mailx в bash):

sendmail() {
#Sending Report Email
heirloom-mailx -a $2 -v -s ""$(echo -e "subject 3\nContent-Type: text/html")"" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://mail.mymailserver:port \
-S from="example@mymailserver.com" \
-S smtp-auth-user=example@mymailserver.com \
-S smtp-auth-password='password' \
-S ssl-verify=ignore \
$1 < body.html
}

Где $2 — вложение, а $1 — место назначения. Примечания :1. Прикрепленные файлы также печатаются внутри тела, но это может быть полезно, если вы хотите просто отправить html-файл без вложений. 2. Использование опции «-v» выводит подробные сведения, поэтому вы можете столкнуться с проблемой с.mime.types, которую можно игнорировать. Удалите этот параметр, если вы не хотите, чтобы в mailx отображались подробные сведения. 3. Вы все равно получите следующее в теле, если используете опцию «-a» :Это сообщение из нескольких частей -в формате MIME. --= -=fFPa7dLqoSF1TGj -YDc2k8bdvmjpix _4sKFT= -= Содержание -Тип :text/plain; charset=US -ASCII-контент -Расположение :встроенный

В данном случае я прилагаю текстовый файл. Удалите «-a $2» из команды, и все готово для печати html-сообщения. Таким образом, окончательный результат будет:

sendmail() {
    #Sending Report Email
    heirloom-mailx -s ""$(echo -e "subject 3\nContent-Type: text/html")"" \
    -S smtp-use-starttls \
    -S ssl-verify=ignore \
    -S smtp-auth=login \
    -S smtp=smtp://mail.mymailserver:port \
    -S from="example@mymailserver.com" \
    -S smtp-auth-user=example@mymailserver.com \
    -S smtp-auth-password='password' \
    -S ssl-verify=ignore \
    $1 < body.html
    }

Попробуйте и дайте мне знать. Я проверил на своем конце, и это работает.

3
27.01.2020, 20:19

Если вы застряли на сервере, на котором не можете установить новое программное обеспечение, в том числе надлежащий MTA, возможно, самым простым решением будет написать простой сценарий на языке, в который включены библиотеки для SMTP. Мой выбор был бы Python. Вот простая адаптация примера кода из документации.

#!/usr/bin/env python3

import smtplib
from argparse import ArgumentParser
from email.message import EmailMessage


def main():
    parser = ArgumentParser(description="""\
Quick and dirty mailx replacement for sending a HTML message via a
specific SMTP server. Based on examples from
https://docs.python.org/3/library/email.examples.html#email-examples
""")
    parser.add_argument('-H', '--html-file', required=True,
                        help="The HTML body to send (required)")
    parser.add_argument('-S', '--smtp-server', required=True,
                        help='The SMTP server to use (required)')
    parser.add_argument('-s', '--subject', required=True,
                        help='Subject (required)')
    parser.add_argument('-r', '--return-path', required=True,
                        help='Return-Path / envelope sender (required)')
    parser.add_argument('recipients', nargs='+')
    args = parser.parse_args()

    msg = EmailMessage()
    msg['Subject'] = args.subject
    msg['To'] = ', '.join(args.recipients)
    msg['From'] = args.return_path
    # The examples suggest you should mess with the preamble, but you should not

    with open(args.html_file, 'r') as html:
        msg.set_content(html.read(), subtype='html')

    with smtplib.SMTP(args.smtp_server) as s:
        s.send_message(msg)


if __name__ == '__main__':
    main()

Использование:

python3 path/to/script.py -S SERVER -s "This is the subject" \
    -r FROM -H htmlmail.html TO

Это нацелено на Python версии 3. Если вы используете устаревшую платформу, возможно, у вас есть только Python 2;но должно быть довольно очевидно, как адаптировать этот (, в основном использовать устаревший класс email.message.Messageвместо переработанного и модернизированного EmailMessage, представленного в 3.3 и ставшего официальным в 3.5 ).

0
27.01.2020, 20:19

Теги

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