如何在收到的电子邮件中消除电子邮件格式?

2024-09-29 02:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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()似乎很简单:

^{pr2}$

但这仍然没有涵盖您提到的其他类型的格式: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

Tags: of代码服务器com数据库messageexample电子邮件
2条回答

与其将To:或From:头字段的全部内容存储为不透明字符串,不如解析传入电子邮件并将电子邮件地址与全名分开存储?见^{}。这样,当你想查找地址时,就不必使用复杂、缓慢的模式匹配。始终可以使用^{}重新组合字段。在

如果您想使用regex,请尝试如下操作:

>>> import re
>>> email_string = "az <az@example.com>"
>>> re.findall(r'<([^>]+)>', email_string)
['az@example.com']

请注意,上面的regex处理多个地址。。。在

^{pr2}$

但这个更简单的regex不能:

^{3}$

使用切片—我想您是想说,而不是“列表”—似乎更复杂,例如:

>>> email_string[email_string.find('<')+1:-1]
'az@example.com'

如果是多个:

>>> email_strings = email_string2.split(',')
>>> for s in email_strings:
...   s[s.find('<')+1:-1]
...
'az@example.com'
'bz@example.com'

相关问题 更多 >