質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

0回答

1656閲覧

Python(Lambda)でテキストの内容を書き換える方法

teketeke

総合スコア46

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2019/05/30 03:01

前提・実現したいこと

こちらのサイトを参考に、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問