我正在用Python练习用googleappengine发送电子邮件。此代码检查message.sender
是否在数据库中:
class ReceiveEmail(InboundMailHandler):
def receive(self, message):
querySender = User.all()
querySender.filter("userEmail =", message.sender)
senderInDatabase = None
for match in querySender:
senderInDatabase = match.userEmail
这在开发服务器中有效,因为我以"az@example.com"
和message.sender="az@example.com"
的形式发送电子邮件
但是我意识到在生产服务器中电子邮件的格式是"az <az@example.com>
,我的代码失败了,因为现在message.sender="az <az@example.com>"
但是数据库中的电子邮件很简单"az@example.com".
我搜索了如何使用regex
来实现这一点,但我想知道我是否可以用Python列表来实现这一点?或者,你认为达到这个结果的最佳方法是什么?我只需要从message.sender
获取电子邮件地址。在
App Engine documentation确认格式设置,但我无法找到仅选择电子邮件地址的特定方法。在
谢谢!在
EDIT2(回复:森林回答)
@森林:
parseaddr()
似乎很简单:
但这仍然没有涵盖您提到的其他类型的格式:user@example.com (Full Name)
>>> e2 = "<az@example.com> az"
>>> parsed2 = parseaddr(e2)
>>> parsed2
('', 'az@example.com')
>>>
在电子邮件后面有全名的格式吗?在
编辑(回复:Adam Bernier answer)
我对regex如何工作的尝试(可能不正确):
r # raw string
< # first limit character
( # what is inside () is matched
[ # indicates a set of characters
^ # start of string
> # start with this and go backward?
] # end set of characters
+ # repeat the match
) # end group
> # end limit character
与其将To:或From:头字段的全部内容存储为不透明字符串,不如解析传入电子邮件并将电子邮件地址与全名分开存储?见^{} 。这样,当你想查找地址时,就不必使用复杂、缓慢的模式匹配。始终可以使用^{} 重新组合字段。在
如果您想使用regex,请尝试如下操作:
请注意,上面的regex处理多个地址。。。在
^{pr2}$但这个更简单的regex不能:
^{3}$使用切片—我想您是想说,而不是“列表”—似乎更复杂,例如:
如果是多个:
相关问题 更多 >
编程相关推荐