How to make a Python AWS Lambda open an email stored in S3 as email object





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I realize this is a total noob question and hopefully an easy solution exists. However, I'm stuck and turning to you for help! What I'm trying to do is this: I have an SES rule set that stores emails in my S3 bucket. The specific emails I'm storing contain a .txt attachment. I'm hoping to have a Lambda function that is triggered on S3 bucket "Create" function, open the email AND attachment, and then perform some other processing based on specific text in the email attachment.



My specific question is this: How do I allow the Lambda function to take the S3 email "object" and convert it to the standard Python "message" object format so that I can use Python's Email library against it?



Here is what I have so far...not much, I know:



import boto3
import email

def lambda_handler(event, context):
s3 = boto3.client("s3")

if event:

print("My Event is : ", event)
file_obj = event["Records"][0]
filename = str(file_obj["s3"]['object']['key'])
print("filename: ", filename)
fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
print("file has been gotten!")

#Now that the .eml file that was stored in S3 is stored in fileObj,
#start parsing it--but how to convert it to "email" class???
#??????









share|improve this question





























    0















    I realize this is a total noob question and hopefully an easy solution exists. However, I'm stuck and turning to you for help! What I'm trying to do is this: I have an SES rule set that stores emails in my S3 bucket. The specific emails I'm storing contain a .txt attachment. I'm hoping to have a Lambda function that is triggered on S3 bucket "Create" function, open the email AND attachment, and then perform some other processing based on specific text in the email attachment.



    My specific question is this: How do I allow the Lambda function to take the S3 email "object" and convert it to the standard Python "message" object format so that I can use Python's Email library against it?



    Here is what I have so far...not much, I know:



    import boto3
    import email

    def lambda_handler(event, context):
    s3 = boto3.client("s3")

    if event:

    print("My Event is : ", event)
    file_obj = event["Records"][0]
    filename = str(file_obj["s3"]['object']['key'])
    print("filename: ", filename)
    fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
    print("file has been gotten!")

    #Now that the .eml file that was stored in S3 is stored in fileObj,
    #start parsing it--but how to convert it to "email" class???
    #??????









    share|improve this question

























      0












      0








      0


      1






      I realize this is a total noob question and hopefully an easy solution exists. However, I'm stuck and turning to you for help! What I'm trying to do is this: I have an SES rule set that stores emails in my S3 bucket. The specific emails I'm storing contain a .txt attachment. I'm hoping to have a Lambda function that is triggered on S3 bucket "Create" function, open the email AND attachment, and then perform some other processing based on specific text in the email attachment.



      My specific question is this: How do I allow the Lambda function to take the S3 email "object" and convert it to the standard Python "message" object format so that I can use Python's Email library against it?



      Here is what I have so far...not much, I know:



      import boto3
      import email

      def lambda_handler(event, context):
      s3 = boto3.client("s3")

      if event:

      print("My Event is : ", event)
      file_obj = event["Records"][0]
      filename = str(file_obj["s3"]['object']['key'])
      print("filename: ", filename)
      fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
      print("file has been gotten!")

      #Now that the .eml file that was stored in S3 is stored in fileObj,
      #start parsing it--but how to convert it to "email" class???
      #??????









      share|improve this question














      I realize this is a total noob question and hopefully an easy solution exists. However, I'm stuck and turning to you for help! What I'm trying to do is this: I have an SES rule set that stores emails in my S3 bucket. The specific emails I'm storing contain a .txt attachment. I'm hoping to have a Lambda function that is triggered on S3 bucket "Create" function, open the email AND attachment, and then perform some other processing based on specific text in the email attachment.



      My specific question is this: How do I allow the Lambda function to take the S3 email "object" and convert it to the standard Python "message" object format so that I can use Python's Email library against it?



      Here is what I have so far...not much, I know:



      import boto3
      import email

      def lambda_handler(event, context):
      s3 = boto3.client("s3")

      if event:

      print("My Event is : ", event)
      file_obj = event["Records"][0]
      filename = str(file_obj["s3"]['object']['key'])
      print("filename: ", filename)
      fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
      print("file has been gotten!")

      #Now that the .eml file that was stored in S3 is stored in fileObj,
      #start parsing it--but how to convert it to "email" class???
      #??????






      python amazon-web-services amazon-s3 aws-lambda email-attachments






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 3 at 21:02









      BenBen

      226




      226
























          1 Answer
          1






          active

          oldest

          votes


















          1














          Can you try something like this?. With this, you will get msg object back from stream you opened with S3 file.



          import boto3
          import email

          def lambda_handler(event, context):
          s3 = boto3.client("s3")

          if event:

          print("My Event is : ", event)
          file_obj = event["Records"][0]
          filename = str(file_obj["s3"]['object']['key'])
          print("filename: ", filename)
          fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
          print("file has been gotten!")
          msg = email.message_from_bytes(fileObj['Body'].read())
          print(msg['Subject'])
          #Hello





          share|improve this answer





















          • 1





            Thank you so much!!! that works and was just what I needed to keep moving on.

            – Ben
            Jan 4 at 13:50












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54029770%2fhow-to-make-a-python-aws-lambda-open-an-email-stored-in-s3-as-email-object%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Can you try something like this?. With this, you will get msg object back from stream you opened with S3 file.



          import boto3
          import email

          def lambda_handler(event, context):
          s3 = boto3.client("s3")

          if event:

          print("My Event is : ", event)
          file_obj = event["Records"][0]
          filename = str(file_obj["s3"]['object']['key'])
          print("filename: ", filename)
          fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
          print("file has been gotten!")
          msg = email.message_from_bytes(fileObj['Body'].read())
          print(msg['Subject'])
          #Hello





          share|improve this answer





















          • 1





            Thank you so much!!! that works and was just what I needed to keep moving on.

            – Ben
            Jan 4 at 13:50
















          1














          Can you try something like this?. With this, you will get msg object back from stream you opened with S3 file.



          import boto3
          import email

          def lambda_handler(event, context):
          s3 = boto3.client("s3")

          if event:

          print("My Event is : ", event)
          file_obj = event["Records"][0]
          filename = str(file_obj["s3"]['object']['key'])
          print("filename: ", filename)
          fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
          print("file has been gotten!")
          msg = email.message_from_bytes(fileObj['Body'].read())
          print(msg['Subject'])
          #Hello





          share|improve this answer





















          • 1





            Thank you so much!!! that works and was just what I needed to keep moving on.

            – Ben
            Jan 4 at 13:50














          1












          1








          1







          Can you try something like this?. With this, you will get msg object back from stream you opened with S3 file.



          import boto3
          import email

          def lambda_handler(event, context):
          s3 = boto3.client("s3")

          if event:

          print("My Event is : ", event)
          file_obj = event["Records"][0]
          filename = str(file_obj["s3"]['object']['key'])
          print("filename: ", filename)
          fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
          print("file has been gotten!")
          msg = email.message_from_bytes(fileObj['Body'].read())
          print(msg['Subject'])
          #Hello





          share|improve this answer















          Can you try something like this?. With this, you will get msg object back from stream you opened with S3 file.



          import boto3
          import email

          def lambda_handler(event, context):
          s3 = boto3.client("s3")

          if event:

          print("My Event is : ", event)
          file_obj = event["Records"][0]
          filename = str(file_obj["s3"]['object']['key'])
          print("filename: ", filename)
          fileObj = s3.get_object(Bucket = "mytestbucket", Key=filename)
          print("file has been gotten!")
          msg = email.message_from_bytes(fileObj['Body'].read())
          print(msg['Subject'])
          #Hello






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 3 at 23:30

























          answered Jan 3 at 23:06









          ImranImran

          1,4311924




          1,4311924








          • 1





            Thank you so much!!! that works and was just what I needed to keep moving on.

            – Ben
            Jan 4 at 13:50














          • 1





            Thank you so much!!! that works and was just what I needed to keep moving on.

            – Ben
            Jan 4 at 13:50








          1




          1





          Thank you so much!!! that works and was just what I needed to keep moving on.

          – Ben
          Jan 4 at 13:50





          Thank you so much!!! that works and was just what I needed to keep moving on.

          – Ben
          Jan 4 at 13:50




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54029770%2fhow-to-make-a-python-aws-lambda-open-an-email-stored-in-s3-as-email-object%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Mossoró

          Error while reading .h5 file using the rhdf5 package in R

          Pushsharp Apns notification error: 'InvalidToken'