2017-03-24 14 views
1

boto3 SES send_emailクライアントを使用して画像添付ファイルを送信するにはどうすればよいですか?boto3 send_emailまたはsend_raw_emailを使用してHTMLテキストと添付ファイルを送信するにはどうすればよいですか?

私はsend_raw_emailを使用して添付ファイルを送信できますが、html dataというメッセージ本文を送信する必要があることは知っています。これが不可能な場合、boto3.ses.send_raw_email()を使用してhtmlデータを含む電子メールを送信するにはどうすればよいですか?

+0

を、「HTMLメール」のようなものは存在しないが、それは単に 'htmlタグとdata'を電子メールで送信されます。だから、これはboto3.send_mail APIとは何の関係もなく、準拠したhtmlとサポートされているMIMEヘッダーでデータを草案して提出するだけです。 – mootmoot

+0

私はHTML電子メールがないことを知っています。データはhtmlにする必要があります。次にヘッダをどのように追加しますか? – DKo

答えて

2

HOW TO SEND HTML MAILS USING AMAZON SES」の恥知らずのコピー例 これは、電子メールデータの一般的なコンテンツの表示方法です。あなたがboto3.ses.send_raw_emailを使用して添付ファイルやHTMLテキストを送信する場合は

message_dict = { 'Data': 
    'From: ' + mail_sender + '\n' 
    'To: ' + mail_receivers_list + '\n' 
    'Subject: ' + mail_subject + '\n' 
    'MIME-Version: 1.0\n' 
    'Content-Type: text/html;\n\n' + 
    mail_content} 

、あなただけのメッセージdictの上使用して渡す必要があります。実際に

response = client.send_raw_email(
    Destinations=[ 
    ], 
    FromArn='', 
    RawMessage=message_dict, 
    ReturnPathArn='', 
    Source='', 
    SourceArn='', 
) 

(ちょうどmail_contentの下で、あなたのHTMLテキストを入れる)、生の添付ファイルのヘッダする必要があり、両方のsend_emailで作品()とsend_raw_email()。 send_mailを除いて、添付ファイルをの中に入れてください。htmlではありません。

+0

これはSESクライアントを使用していません – DKo

+0

@Dko:これはboto3.ses.send_mailに与えるデータ形式です – mootmoot

+0

あなたは私の闘いを誤解しているかもしれません。私は、APIを使用してhtmlデータで電子メールを送信する方法を知っていますが、私はこの電子メールに添付ファイルを添付することはできません。私は 'send_raw_mail'を使ってそれを行う方法を知っていますが、それだけで、私はraw *メールでhtmlデータをどのように送ることができるのか分かりません。 – DKo

2

これは添付ファイル送信するために私のために働いた:実際には

from email.mime.application import MIMEApplication 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

import boto.ses 


AWS_ACCESS_KEY = 'HEREYOURACCESSKEY' 
AWS_SECRET_KEY = 'HEREYOURSECRETKEY' 

class Email(object): 

    def __init__(self, to, subject): 
     self.to = to 
     self.subject = subject 
     self.text = None 
     self.attachment = None 


    def text(self, text): 
     self.text = text 

    def add_attachment(self, attachment): 
     self.attachment = attachment 

    def send(self, from_addr=None, file_name = None): 

     connection = boto.ses.connect_to_region(
      'us-east-1', 
      aws_access_key_id=AWS_ACCESS_KEY, 
      aws_secret_access_key=AWS_SECRET_KEY 
     ) 
     msg = MIMEMultipart() 
     msg['Subject'] = self.subject 
     msg['From'] = from_addr 
     msg['To'] = self.to 

     part = MIMEApplication(self.attachment) 
     part.add_header('Content-Disposition', 'attachment', filename=file_name) 
     part.add_header('Content-Type', 'application/vnd.ms-excel; charset=UTF-8') 

     msg.attach(part) 

     # the message body 
     part = MIMEText(self.text) 
     msg.attach(part) 

     return connection.send_raw_email(msg.as_string(),source=from_addr,destinations=self.to) 

if __name__ == "__main__": 
    email = Email(to='[email protected]', subject='Your subject!') 
    email.text('This is a text body.') 
    #you could use StringIO.StringIO() to get the file value 
    email.add_attachment(yourFileValue) 
    email.send(from_addr='[email protected]',file_name="yourFile.txt") 
+0

ようこそ!返信でコードを添付するだけでよい答えはありません。この[how-to-answer](http://stackoverflow.com/help/how-to-answer)を読んでガイドラインに従ってください。 – thewaywewere

関連する問題