这是我的代码:
for msg in mbox:
try:
pprint.pprint(msg._headers, stream = f)
tempdate = parser.parse(msg['Date'])
newdate = str(tempdate)[:19]
ip = msg['x-originating-ip']
iplookup = (ip.strip("[]"))
url = 'http://freegeoip.net/json/{}'.format(iplookup)
response = urllib.request.urlopen(url).read()
result = json.loads(response.decode('utf8'))
f.write ('Country = ' + (result['country_name']) + '\n')
f.write ('Region = ' + (result['region_name']) + '\n')
f.write ('City = ' + (result['city']) + '\n')
但是,并非所有电子邮件都有IP来源。我如何检查是否设置了x orginiting ip?类似于IF staement的东西
ip = msg['x-originating-ip']
if (isset(ip):
iplookup = (ip.strip("[]"))
url = 'http://freegeoip.net/json/{}'.format(iplookup)
response = urllib.request.urlopen(url).read()
result = json.loads(response.decode('utf8'))
f.write ('Country = ' + (result['country_name']) + '\n')
f.write ('Region = ' + (result['region_name']) + '\n')
f.write ('City = ' + (result['city']) + '\n')
else:
continue
这是我想到的一个例子,但是isset函数来自php,而不是python?有什么想法吗?
答案 0 :(得分:1)
尝试
if 'x-originating-ip' in msg:
...
它使用in
operator。它仅检查密钥是否已设置,而不是值是什么 - 因此它仍然可以是None
或False
或空字符串或列表或其他内容。您也可以使用'foo' not in x
代替not 'foo' in x
。
例如,如果您想要检查它不是None
,请改用get()
:
if msg.get('x-originating-ip') is not None:
...
答案 1 :(得分:0)
您可以使用get。
检查x-originating-ip
的值是否已设置
ip = msg.get('x-originating-ip')
if ip:
...
....