【问题标题】:Accessing link in email body using gmail API使用 gmail API 访问电子邮件正文中的链接
【发布时间】:2020-10-21 12:32:02
【问题描述】:

我正在使用 gmail api 和 python 访问我的 gmail 收件箱。我的电子邮件存储在mime_msg。我想访问'http://example.com/newpasswordid=exampleid12345',如下所示。我该怎么做?

msg_str = base64.urlsafe_b64decode(full_message['raw'].encode('ASCII'))
mime_msg = email.message_from_bytes(msg_str)
print(mime_msg)
<a href =3D 'http://example.com/newpasswordid=exampleid12345'>Link1</a><br><br>.</td></tr>

<tr><td><i>=A92020 For more info please visit=
 <a href=3D" https://example2.com/">Link2</a=></i></td></tr>

【问题讨论】:

  • 您是否只有一个包含您显示的 HTML 的字符串,并且您想从该字符串中提取第一个 URL?
  • @Steve 我想从变量 mime_msg 中提取 'example.com/newpasswordid=exampleid12345'
  • 喜欢我的回答吗?你真的不想要http:// 部分吗?如果您正在寻找不同的东西,请在 cmets 中告诉我答案

标签: python gmail-api


【解决方案1】:

如果您在字符串 mime_msg 中有该文本,并且您只想提取 URL,那非常简单。如果您知道您的格式总是需要第一对单引号中的内容,则可以使用以下代码:

import re

mime_msg = """
<a href =3D 'http://example.com/newpasswordid=exampleid12345'>Link1</a><br><br>.</td></tr>

<tr><td><i>=A92020 For more info please visit=
 <a href=3D" https://example2.com/">Link2</a=></i></td></tr>
 """

exp = re.compile(r"'(.*?)'")
mime_msg = re.sub(r"[\n\r]+", '', mime_msg)
m = exp.search(mime_msg)
print(m.group(1))

结果:

http://example.com/newpasswordid=exampleid12345

如果您希望能够处理更复杂的邮件正文,可以使正则表达式更复杂。

【讨论】:

  • 感谢您的回复。变量 mime_msg 包含我的电子邮件正文。我已经尝试了上面的示例,并且在 main print(m.group(1)) AttributeError: 'NoneType' object has没有属性“组”
  • 这意味着正则表达式与文本不匹配。但它对我有用。我不知道发生了什么?复制/粘贴中可能发生了一些变化。引号是否可能更改为“有趣的引号”?您是否在我的代码之前打印文本,就像您在示例中显示的那样?您应该这样做以确保您的信息确实存在。
  • 我检查过,除了 m = exp.search(str(mime_msg)) 之外,它与您的操作方式相同。不知道出了什么问题。
  • 你可以尝试不同的表达方式:exp = re.compile(r"(http.*?).&gt;")
  • 我尝试了新的表达式,它返回了第二个链接。
猜你喜欢
  • 2019-03-08
  • 2020-07-16
  • 2012-03-05
  • 2017-11-01
  • 2017-06-19
  • 1970-01-01
  • 2017-03-07
  • 2018-07-28
  • 2018-11-15
相关资源
最近更新 更多