2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonでAmazon SESからCC/BCCを設定して添付ファイルありのメールを送る

Last updated at Posted at 2022-09-01

はじめに

boto3でメールを送る際に、CCの設定などややこしくて悩みました。
最低限の実装はできたので自身の理解とともにここに残します。

結論

これです。

# メールを送信する
def sendMail(attachFile=[]):
    ################################# メールの見える部分 ################################
    SUBJECT = '件名'

    # 送り主
    Sender = 'exampleSenderAddress@abc.com'

    # 宛先(カンマ区切り文字列)
    To = 'exampleToAddress_1@abc.com,
          exampleToAddress_2@abc.com'

    Cc = 'exampleCcAddress_3@abc.com'

    Bcc = 'exampleBccAddress_4@abc.com,
           exampleBccAddress_5@abc.com,
           exampleBccAddress_6@abc.com'
    
    # HTML見れない人用の本文
    BODY_TEXT = '本文'
 
    # HTML見れる人用の本文
    BODY_HTML = f"""\
    <html>
    <head></head>
    <body>
    <p>{BODY_TEXT}</p>
    </body>
    </html>
    """
    ###################################################################################
    client = boto3.client('ses')
 
    # 上記の見える部分をセットしてく
    msg = MIMEMultipart('mixed')
    msg['Subject'] = SUBJECT
    msg['From'] = Sender
    msg['To'] = To
    msg['CC'] = Cc
    msg['BCC'] = Bcc

    msg_body = MIMEMultipart('alternative')
 
    CHARSET = "utf-8"
    textpart = MIMEText(BODY_TEXT.encode(CHARSET), 'plain', CHARSET)
    htmlpart = MIMEText(BODY_HTML.encode(CHARSET), 'html', CHARSET)
 
    msg_body.attach(textpart)
    msg_body.attach(htmlpart)
    msg.attach(msg_body)
 
    # ファイルの添付
    for att in attachFile:
        tmp = MIMEApplication(open(att, 'rb').read())
        tmp.add_header('Content-Disposition','attachment',filename=os.path.basename(att)) 
        msg.attach(tmp)

    # メッセージの送付
    try:
        response = client.send_raw_email(
            Source='',
            Destinations=[x for x in [*To.split(','),*Cc.split(','),*Bcc.split(',')] if x != ''],
            RawMessage={
                'Data':msg.as_string(),
            },
        )

    except ClientError as e:
        print(e.response['Error']['Message'])
    else:
        print("Email sent! Message ID:"),
        print(response['ResponseMetadata']['RequestId']) 

解説

送付先

2か所メールアドレスを設定する部分があります。(ここがわからんかった)
ここと

# 上記の見える部分をセットしてく
    msg = MIMEMultipart('mixed')
    msg['Subject'] = SUBJECT
    msg['From'] = Sender
    msg['To'] = To
    msg['CC'] = Cc
    msg['BCC'] = Bcc

ここのDestinations

# メッセージの送付
    try:
        response = client.send_raw_email(
            Source='',
            Destinations=[x for x in [*To.split(','),*Cc.split(','),*Bcc.split(',')] if x != ''],
            RawMessage={
                'Data':msg.as_string(),
            },
        )

1つ目は書いてある通りメールの見える部分を設定しているだけで、送付先には影響しません
2つ目のDestinationsが実際のメールの送付先でここに書いてある人にだけ送付されます

添付ファイル

ここで添付しています。
引数にファイルのパスのリストを渡してください。

# ファイルの添付
    for att in attachFile:
        tmp = MIMEApplication(open(att, 'rb').read())
        tmp.add_header('Content-Disposition','attachment',filename=os.path.basename(att)) 
        msg.attach(tmp)

ヘッダなどはお好みで変更してください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?