2017-09-20 15 views
0

私は、pythonとsendmailを使用してAWSサーバーから電子メールを送信しようとしています。 (私の地域ではSESは利用できません)。コマンドラインでメールを使って基本的な電子メールを送っても問題ありません。今私はPythonからこれをやろうとしています。私は以下のコードを持っています。それは間違いなく実行されているようですが、受信者の電子メールにはメールは表示されません。この段階では添付ファイルを送信していないことに注意してください。Python Base64でエンコードされた画像を添付ファイルとして添付したメール

パイロとコマンドライン経由で送信されたメールのマイログエントリが表示されます。コマンドラインで送信されたエントリの後に、 "配信受け入れメッセージ"が表示されますが、エントリは全く同じように見えます。

ここで何が間違って行くことだろうか?何が間違っているのかを知るために他の場所を調べることができますか? 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()) 
+1

あなたはhttps://stackoverflow.com/questions/3362600/how-to-send-email-attachments?rq=1これを試してみました –

+0

実はそれは私が元々からの私のコードを適応場所のように見えています。私は実際にそれを直ちに処理することで動作させました。それをもう一度構築する。私は後で解決策を投稿します。 –

答えて

0

だからどこがうまくいかないのか分かりません。しかし、私は正しい方向にいた。私の最終的な機能は以下の通りです。これは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()) 
関連する問題