前提・実現したいこと
こちらのサイトを参考に、AWSのSES+Lambda+S3でメールの中に指定文字列(/master)のメール転送を行える状態となりました。
http://tech.innovation.co.jp/2017/06/04/Route53-S-E-S-S3-Lambda-Gmail.html
GitHubからコミットされた時に送られてくるメールの本文を修正して、特定の宛先に送付したいのですが本文の修正が実現できていません。
Pythonを使用したことがないため使い方など調べながらやっているのですが、以下のことを実施するにはどうしたら良いのでしょうか。
~~~~~
1.本文中の「Branch」「Home」「Commit」のみ本文に残したい
2.「Commit」については、メールに複数記載されるが、メールの最後のもののみ残したい
例)以下の場合、Commitは「Commit: bbbbbbbbbb」のみ残したい
Branch: refs/heads/master
Home: https://github.com/~~
Commit: aaaaaaaaaa
Commit: bbbbbbbbbb
~~~~~
発生している問題・エラーメッセージ
検証のために以下のことを実施しましたが、エラーになるためかメールが送信されてきませんでした。
※エラーログの設定が分からず、エラーログが分からない状態となります。
①先頭が改行の行は詰める(失敗)
replaced_message = re.sub("^\n", "", replaced_message)
replaced_message = re.sub("^\r\n", "", replaced_message)
replaced_message = re.sub("\A\n", "", replaced_message)
replaced_message = re.sub("\A\r\n", "", replaced_message)
②文字置き換えのテストとして、文字列「Commit」を置き換える(失敗)
replaced_message = re.sub("Commit", "comment", replaced_message)
該当のソースコード
Python
1import boto3 2import email 3import re 4 5ORIGIN_TO = "xxxxx" 6FORWARD_TO = "xxxxx" 7SES_REGION = "us-east-1" 8S3_BUCKET = "xxxxx" 9 10def parse_mail(raw_message): 11 12 replaced_message = raw_message.replace(ORIGIN_TO, FORWARD_TO) 13 replaced_message = re.sub("From:.+?\n", "From: %s\r\n" % ORIGIN_TO, replaced_message) 14 replaced_message = re.sub("Return-Path:.+?\n", "Return-Path: %s\r\n" % ORIGIN_TO, replaced_message) 15 16###20190530 test 17#replaced_message = re.sub("\A\n", "", replaced_message) 18### 19 20 return replaced_message 21 22def send_mail(message): 23 24 ses = boto3.client('ses', region_name=SES_REGION) 25 26 ses.send_raw_email( 27 Source = FORWARD_TO, 28 Destinations=[ 29 FORWARD_TO 30 ], 31 RawMessage={ 32 'Data': message 33 } 34 ) 35 36def lambda_handler(event, context): 37 try: 38 s3_key = event['Records'][0]['s3']['object']['key'] 39 40 s3 = boto3.client('s3') 41 response = s3.get_object( 42 Bucket = S3_BUCKET, 43 Key = s3_key 44 ) 45 raw_message = response['Body'].read() 46 47 if raw_message.count('/master'): 48 message = parse_mail(raw_message) 49 send_mail(message) 50 51 except Exception as e: 52 print(e)
試したこと
必要な文字列のみを残すのが難しそうだったので、テストとして、
・先頭が改行の行は詰める
・文字置き換えのテストとして、文字列「Commit」を置き換える
を行いましたが、メールが送られてきませんでした。
補足情報(FW/ツールのバージョンなど)
Python 2.7
あなたの回答
tips
プレビュー