我正在尝试使用python和sendmail从AWS服务器发送电子邮件。 (我所在地区没有SES)。在命令行使用邮件发送基本电子邮件可以正常工作。现在我试图用Python做到这一点。我有下面的代码。它似乎运行没有错误,但收件人电子邮件中没有邮件。请注意,我不会在此阶段发送附件。
通过python和命令行发送的邮件显示Maillog条目。条目似乎非常相似,除了"消息接受交付"在通过命令行发送的条目后出现。
这里可能出现什么问题?我还能在哪里找出问题所在?有没有更简单的方法从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())
答案 0 :(得分:1)
所以我不确定哪里出了问题。但我走在正确的轨道上。我的最终功能如下。这需要一个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())