• <i id='sLAwB'><tr id='sLAwB'><dt id='sLAwB'><q id='sLAwB'><span id='sLAwB'><b id='sLAwB'><form id='sLAwB'><ins id='sLAwB'></ins><ul id='sLAwB'></ul><sub id='sLAwB'></sub></form><legend id='sLAwB'></legend><bdo id='sLAwB'><pre id='sLAwB'><center id='sLAwB'></center></pre></bdo></b><th id='sLAwB'></th></span></q></dt></tr></i><div id='sLAwB'><tfoot id='sLAwB'></tfoot><dl id='sLAwB'><fieldset id='sLAwB'></fieldset></dl></div>
  • <legend id='sLAwB'><style id='sLAwB'><dir id='sLAwB'><q id='sLAwB'></q></dir></style></legend>
    1. <small id='sLAwB'></small><noframes id='sLAwB'>

      <tfoot id='sLAwB'></tfoot>
      • <bdo id='sLAwB'></bdo><ul id='sLAwB'></ul>

        Python:Google API - 从消息中获取 mimeTypes

        Python: Google API - Getting mimeTypes from a message(Python:Google API - 从消息中获取 mimeTypes)

          <bdo id='CpJv7'></bdo><ul id='CpJv7'></ul>
              <tfoot id='CpJv7'></tfoot>

                <small id='CpJv7'></small><noframes id='CpJv7'>

                <legend id='CpJv7'><style id='CpJv7'><dir id='CpJv7'><q id='CpJv7'></q></dir></style></legend>

                  <i id='CpJv7'><tr id='CpJv7'><dt id='CpJv7'><q id='CpJv7'><span id='CpJv7'><b id='CpJv7'><form id='CpJv7'><ins id='CpJv7'></ins><ul id='CpJv7'></ul><sub id='CpJv7'></sub></form><legend id='CpJv7'></legend><bdo id='CpJv7'><pre id='CpJv7'><center id='CpJv7'></center></pre></bdo></b><th id='CpJv7'></th></span></q></dt></tr></i><div id='CpJv7'><tfoot id='CpJv7'></tfoot><dl id='CpJv7'><fieldset id='CpJv7'></fieldset></dl></div>
                    <tbody id='CpJv7'></tbody>
                  本文介绍了Python:Google API - 从消息中获取 mimeTypes的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我的目标是使用 Google API 从我指定的电子邮件中获取数据.目前我可以找到消息,获取消息数据并将消息数据解码为可读格式.在此之后,我需要找到我的消息的正确部分(类型 text/html),然后使用 美丽的汤.不幸的是,我对电子邮件/Google API 的结构了解不够,无法扫描邮件的这个特定部分.

                  My goal is to use the Google API to take data from an email I have specified. Currently I can find the message, get the message data and decode the message data into a readable format. After this I need to find the correct part of my message (type text/html) and then scan for my link using beautiful soup. Unfortunately I don't understand enough about the structure of the email/Google API to scan for this specific part of the mail.

                          try:
                              message = gmail_service.users().messages().get(userId='me', id=thread['id'], format='raw').execute()
                              print 'Message snippet: %s' % message['snippet']
                              msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
                              mime_msg = email.message_from_string(msg_str)
                  
                              print mime_msg        #this line gives the output I quoted
                              for parts in mime_msg['payload']:    #this line produces error quoted
                                  if parts['text/html']:
                                      mylink = base64.urlsafe_b64decode(part[0]['body']['data'].encode('UTF-8'))
                                      print mylink
                  

                  这段代码给我的错误是:

                  And the error that this code gives me is:

                  Traceback (most recent call last):
                    File "gmailAPI.py", line 55, in <module>
                      for parts in mime_msg['payload']:
                  TypeError: 'NoneType' object is not iterable
                  

                  在代码的输出中,我还收到了邮件不同部分的信息,这就是我想要的部分:

                  In the output for the code I also receive the information on different parts of the mail, this is the part I want:

                  ----boundary_1_81681de2-2c9a-4827-802a-91544e5e6e28
                  Content-Type: text/html; charset=utf-8
                  Content-Transfer-Encoding: base64
                  
                  PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiINCiAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KDQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQoJPHRpdGxlPlNpZ251cDwvdGl0bGU+DQo8L2hlYWQ+DQoNCjxib2R5IGJnY29sb3I9IiNmZmZmZmYiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBtYXJnaW53aWR0aD0iMCIgc3R5bGU9Ii13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO3dpZHRoOjEwMCUgIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmZmZmZmY7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Om5vbmU7Ij4NCg0KPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgYmdjb2xvcj0iI2ZmZmZmZiI+DQoJPHRyPg0KCQk8dGQgYmdjb2xvcj0iI2ZmZmZmZiIgd2lkdGg9IjEwMCUiPg0KCQkJPHRhYmxlIHdpZHRoPSI2MDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0i
                  dGFibGUiPg0KCQkJCTx0cj4NCgkJCQkJPHRkIHdpZHRoPSI2MDAiIGNsYXNzPSJjZWxsIj4NCgkgICAJCQkJCTx0YWJsZSB3aWR0aD0iNjAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtYXN0Ij4NCgkJCQkJCQk8dHI+DQoJCQkJCQkJCTx0ZCB3aWR0aD0iMjUwIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJjaWQ6QlRfTG9nby5qcGciIGFsdD0iQm90dG9tbGluZSBsb2dvIiBzdHlsZT0iLW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljOyI+PGJyLz48YnIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iMzUwIiBzdHlsZT0icGFkZGluZy1ib3R0b206IDE1cHg7IiB2YWxpZ249InRvcCIgYmdjb2xvcj0iI2ZmZmZmZiIgY2xhc3M9InN1YkxvZ28iPjxpbWcgc3JjPSJjaWQ6QlRfTGluZS5qcGciIGFsdD0ibGluZSI+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KCQkJCQkJPC90YWJsZT4JDQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZmZmZmZmIiBzdHlsZT0icGFkZGluZzogMjBweDsiIGNsYXNzPSJlbnRyeSIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzMzMzMzMztmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjI7Zm9udC1mYW1pbHk6J0hlbHZldGljYSBOZXVlJyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjttYXJnaW4tYm90dG9tOjA7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO2ZvbnQtd2VpZ2h0Om5vcm1hbDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz5UaGFuayB5b3UgZm9yIGNob29zaW5nIGVDb25uZWN0IE9ubGluZSBmcm9tIEJvdHRvbWxpbmUgVGVjaG5vbG9naWVzOyB5b3VyIHNlY3VyZSBjbG91ZCBkb2N1bWVudCBkZWxpdmVyeSBzZXJ2aWNlLiBUbyBjb21wbGV0ZSB0aGUgIHNldHVwIG9mIHlvdXIgYWNjb3VudCwgcGxlYXNlIGZvbGxvdyB0aGUgbGluayBiZWxvdy48YnIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz48YnIgLz48YnIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNlN2Q2NTt0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC1mYW1pbHk6J0hlbHZldGljYSBOZXVlJyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsgY29sb3I6I2ZmZmZmZjsgcGFkZGluZy10b3A6OHB4OyBwYWRkaW5nLWJvdHRvbTo4cHg7IHBhZGRpbmctbGVmdDo4cHg7IHBhZGRpbmctcmlnaHQ6OHB4OyBmb250LXNpemU6MThweDsgbWFyZ2luOiA4cHg7IiBocmVmPSJodHRwOi8vZWNvbm5lY3QuZW1lYS1ib3R0b21saW5lLnJvb3QuYm90dG9tbGluZS5jb20vYXBpL2FjY291bnQvc2lnbnVwY29tcGxldGUvMjBhNTE4YjktZGIzZS00OTkzLWFjN2UtYjE0YzZjMGVkMzMzIj48c3BhbiBzdHlsZT0iY29sb3I6I2ZmZmZmZiI+Q29tcGxldGUgQWNjb3VudCBTZXR1cCAmcmFxdW87PC9zcGFuPjwvYT48YnIgLz48YnIgLz48YnIgLz4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiMzMzMzMzM7Zm9udC1mYW1pbHk6J0hlbHZldGljYSBOZXVlJyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjI7Zm9u
                  dC1mYW1pbHk6J0hlbHZldGljYSBOZXVlJyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjttYXJnaW4tYm90dG9tOjA7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO2ZvbnQtd2VpZ2h0Om5vcm1hbDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz5LaW5kIFJlZ2FyZHMsPGJyIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVDb25uZWN0IE9ubGluZSBUZWFtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PGJyIC8+PGJyIC8+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojMzMzMzMzO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuMjtmb250LWZhbWlseTonSGVsdmV0aWNhIE5ldWUnLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO21hcmdpbi1ib3R0b206MDtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7Zm9udC13ZWlnaHQ6bm9ybWFsOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPkZvciBzdXBwb3J0IHBsZWFzZSBjb250YWN0OiBlbWVhLXN1cHBvcnRAYm90dG9tbGluZS5jb20gPGJyIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVsOiAwODcwIDA4MSA4MjUwPGJyIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxici8+DQoJCQkJCQkJCQkNCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90YWJsZT4NCgkJPC90ZD4NCgk8L3RyPg0KPC90YWJsZT4NCgkJCQkNCjx0YWJsZSB3aWR0aD0iNjAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9ImZvb3RlciI+DQogICAgPHRyPg0KICAgICAgICA8dGQ+DQogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjYwMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJ0YWJsZSIgc3R5bGU9ImJvcmRlci10b3A6MXB4IHNvbGlkICNjY2NjY2M7Ij4NCiAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZD48cCBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYTsgY29sb3I6IzQ0NDQ0NDsgZm9udC1zaXplOjEwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3B5OyAyMDE0IEJvdHRvbWxpbmUgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L3A+PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgIDwvdGFibGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCgkNCjwvYm9keT4NCjwvaHRtbD4NCg==
                  

                  链接到我的代码中的完整转储

                  我的固定代码

                  try:
                          message = gmail_service.users().messages().get(userId='me', id=thread['id'], format='raw').execute()
                          # print 'Message snippet: %s' % message['snippet']
                          msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
                          msg = email.message_from_string(msg_str)
                  
                          for part in msg.walk():
                              msg.get_payload()
                              if part.get_content_type() == 'text/html':
                                  mytext = base64.urlsafe_b64decode(part.get_payload().encode('UTF-8'))
                                  # print part.get_payload()
                                  print mytext
                  

                  在我选择的答案文档链接上找到的信息对于解决我的问题非常宝贵!

                  The information found on my chosen answers documentation link was invaluable in solving my issue!

                  推荐答案

                  要在 Python 中遍历多部分消息的各个部分,您应该使用 get_payload(): https://docs.python.org/2/library/email.message.html#email.message.Message.get_payload

                  To iterate through the parts of a multipart message in Python, you should use get_payload(): https://docs.python.org/2/library/email.message.html#email.message.Message.get_payload

                  在您的示例中,对 mime_msg['payload'] 的调用正在查找名为payload"的消息标头,该标头不存在,也不是您想要的.

                  In your example, the call to mime_msg['payload'] is looking up a message header named "payload", which doesn't exist and is not what you want anyway.

                  一旦你手头有一个部件,你可以使用 part['Content-Type'] 检查它的类型来检查 Content-Type 标头.

                  Once you have a part in hand, you can check its type using part['Content-Type'] to examine the Content-Type header.

                  一般来说,MIME 消息是由部分组成的树,因此您可能需要递归.

                  In general, MIME messages are trees of parts, so you may need to recurse.

                  这篇关于Python:Google API - 从消息中获取 mimeTypes的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Running .jl file from R or Python(从 R 或 Python 运行 .jl 文件)
                  Running Julia .jl file in python(在 python 中运行 Julia .jl 文件)
                  Using PIP in a Azure WebApp(在 Azure WebApp 中使用 PIP)
                  How to run python3.7 based flask web api on azure(如何在 azure 上运行基于 python3.7 的烧瓶 web api)
                  Azure Python Web App Internal Server Error(Azure Python Web 应用程序内部服务器错误)
                  Run python dlib library on azure app service(在 azure app 服务上运行 python dlib 库)
                    <bdo id='iBZ0m'></bdo><ul id='iBZ0m'></ul>
                    <tfoot id='iBZ0m'></tfoot>

                    <small id='iBZ0m'></small><noframes id='iBZ0m'>

                    <i id='iBZ0m'><tr id='iBZ0m'><dt id='iBZ0m'><q id='iBZ0m'><span id='iBZ0m'><b id='iBZ0m'><form id='iBZ0m'><ins id='iBZ0m'></ins><ul id='iBZ0m'></ul><sub id='iBZ0m'></sub></form><legend id='iBZ0m'></legend><bdo id='iBZ0m'><pre id='iBZ0m'><center id='iBZ0m'></center></pre></bdo></b><th id='iBZ0m'></th></span></q></dt></tr></i><div id='iBZ0m'><tfoot id='iBZ0m'></tfoot><dl id='iBZ0m'><fieldset id='iBZ0m'></fieldset></dl></div>

                      <legend id='iBZ0m'><style id='iBZ0m'><dir id='iBZ0m'><q id='iBZ0m'></q></dir></style></legend>

                          <tbody id='iBZ0m'></tbody>