Если вы знаете номера строк, которые хотите написать, вы можете сделать это из командной строки:
vim -c "100,200w new_file.txt" -c wq original_file.txt
Сначала немного контекста :Я использую версию 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
}
Попробуйте и дайте мне знать. Я проверил на своем конце, и это работает.
Если вы застряли на сервере, на котором не можете установить новое программное обеспечение, в том числе надлежащий 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 ).