Отправить по электронной почте Python с изображением в кодировке Base64 в качестве вложения
Я пытаюсь отправить электронную почту с сервера AWS, используя python и sendmail. (SES не доступен в моем регионе). Использование почты в командной строке для отправки обычной электронной почты работает нормально. Сейчас я пытаюсь сделать это из Python. У меня есть код ниже. Кажется, что он работает без ошибок, но в письме получателя не появляется никакая почта. Обратите внимание, что я не отправляю вложения на этом этапе.
Записи почтового журнала появляются для почты, отправленной через python и через командную строку. Записи выглядят очень похоже, за исключением того, что "Сообщение принято к доставке" появляется после записей, отправленных через командную строку
Что может быть не так? Где еще я мог бы посмотреть, что происходит не так? Есть ли более простой способ отправки электронной почты из Python / Linux?
import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from subprocess import Popen, PIPE
def send_mail(send_from, send_to, subject, text, files=None,
server="127.0.0.1"):
msg = MIMEMultipart()
#msg['From'] = send_from
msg['To'] = send_to
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach(MIMEText(text))
# files should be a dictionary of filenames & base64 content
for fname in files or {}:
part = MIMEBase('image', 'jpeg')
part.set_payload(files[fname])
part.add_header('Content-Transfer-Encoding', 'base64')
part['Content-Disposition'] = 'attachment; filename="%s"' % fname
msg.attach(part)
print (msg.as_string())
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
p.communicate(msg.as_string())
2 ответа
Поэтому я не уверен, где что-то пошло не так. Но я был на правильном пути. Моя последняя функция заключается в следующем ниже. Это занимает закодированный в base64 список изображений, отправленных из моего клиентского приложения в формате JSON. Каждое изображение находится в своем собственном объекте словаря с {filename: base64Data}.
def send_mail(send_from, send_to, subject, text, files=None):
msg = MIMEMultipart()
msg["From"] = send_from
msg["To"] = send_to
msg["Subject"] = subject
msg.attach(MIMEText(text))
# files should be a dictionary of filenames & base64 content
for file in files or []:
for key in file:
part = MIMEBase('image', 'jpeg')
part.set_payload(file[key])
part.add_header('Content-Transfer-Encoding', 'base64')
part['Content-Disposition'] = 'attachment; filename="%s"' % key
msg.attach(part)
# send the email by using send mail
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
p.communicate(msg.as_string())
В Gmail больше не поддерживается изображение base64, оно также включает Outlook. В настоящее время только почта Apple поддерживает base64.
Другой :