В прошлом тысячелетии было время, когда uuencode
имело смысл, но вы действительно должны использовать MIME вместо этого в наши дни.
Вот простой Python 3 скрипт, который объединяет сообщение из стандартного ввода с вложением в действительное сообщение RFC822, которое вы можете отправить с sendmail
или аналогичным. Это довольно близко основано на примерах документации Python.
#!/usr/bin/env python3
from email.message import EmailMessage
import sys
msg = EmailMessage()
msg['From'] = sys.argv[1]
msg['To'] = sys.argv[2]
msg['Subject'] = sys.argv[3]
# Don't mess with the preamble, the documentation is wrong to suggest you do
msg.set_content(''.join([line for line in sys.stdin]))
with open(sys.argv[4], 'r') as attachment:
msg.add_attachment(attachment.read(), maintype='text', subtype='plain')
print(msg.as_string())
Чтобы использовать это в вашем примере,
# If `sendmail` is not in your `PATH`, maybe add it.
# For example, if you have it in `/usr/lib/sendmail`
# and `/usr/lib´ is not in your `PATH`, you can add it with
#PATH=$PATH:/usr/lib
# Don't use upper case for private variables; check spelling of "recipients"
# To demo an example of sending to multiple addresses, adds a second recipient
recipients="mm@gmail.com,another@example.com"
subject="!! testtt !!"
python3 path/to/script.py "zz@gmail.com" "$recipients" "$subject" Data.txt <Results.txt |
sendmail -oi -t
Вы можете опустить трубу на sendmail
, чтобы увидеть, как выглядит сообщение. Вместо uuencode
smack dab в теле сообщения он создает составное MIME-сообщение, состоящее из двух частей, одна из которых является встроенной и содержит текст из стандартного ввода, а другая правильно помечена как вложение. Это немного громоздко, но я привожу здесь пример, просто чтобы показать вам.
From: zz@gmail.com
To: mm@gmail.com,another@example.com
Subject: !! testtt !!
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============2189027902917283968=="
--===============2189027902917283968==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Total Number of Files = 8
Total Number of Fixed Files = 4
Total Number of Notification Files = 4
Total Number of Courrpted Files = 0
Total Execution Time = 3 Seconds.
--===============2189027902917283968==
Content-Type: text/plain
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Content-Disposition: attachment
Tm90aWZpY2F0aW9uIEZpbGVzIDogCmZpbGUgbnVtYmVyIDEKZmlsZSBudW1iZXIgMgo=
--===============2189027902917283968==--
Вложение довольно бесполезно base64
кодируется в этом конкретном примере; Вы можете настроить код Python, если вам абсолютно необходимо, чтобы он был удобочитаемым для человека (но тогда не было и uuencode
).
(Кроме того, не знаю, почему часть тела имеет отдельный MIME-Version:
заголовок - это похоже на ошибку.)