因此,我是一个编码初学者,我选择了Python开始。我试图把一个脚本,以获得最后一封电子邮件从一个特定的联系人收到的“日期”。这个“日期”将保存在谷歌的表格中。
下面是我到目前为止只处理Gmail部分的代码。我实际上使用了来自here的部分代码。但是,我收到了一个错误
跟踪(最近一次调用):文件"C:/Users/PycharmProjects/Automate/Code.py",第33行,在msg_string =data‘RFC822 822’KeyError:'RFC822‘中
不知道出了什么问题。我正在使用Python3.8.1
import email
from imapclient import IMAPClient
HOST = 'imap.gmail.com'
USERNAME = 'username'
PASSWORD = 'password'
ssl = True
## Connect, login and select the INBOX
server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)
select_info = server.select_folder('INBOX')
messages = server.search(['FROM', 'email_of_the_contact@gmail.com'])
response = server.fetch(messages, ['RFC822'])
for msgid, data in response.items():
msg_string = data['RFC822']
msg = email.message_from_string(msg_string)
print('ID %d: From: %s Date: %s' % (msgid, msg['From'], msg['date']))此外,也不确定代码是否完成了我想要达到的目标。任何帮助都很感激。
另外,添加从调试获得的消息。
pydev debugger: process 344 is connecting
Connected to pydev debugger (build 193.6494.30)
Traceback (most recent call last):
File "C:\Users\PycharmProjects\Automate\venv\lib\site-packages\httplib2\__init__.py", line 1557, in _conn_request
conn.connect()
File "C:\Users\PycharmProjects\Automate\venv\lib\site-packages\httplib2\__init__.py", line 1305, in connect
address_info = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)
File "C:\Program Files (x86)\Python38-32\lib\socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\PycharmProjects\Automate\venv\lib\site-packages\httplib2\__init__.py", line 1982, in request
(response, content) = self._request(
File "C:\Users\PycharmProjects\Automate\venv\lib\site-packages\httplib2\__init__.py", line 1650, in _request
(response, content) = self._conn_request(
File "C:\Users\PycharmProjects\Automate\venv\lib\site-packages\httplib2\__init__.py", line 1564, in _conn_request
raise ServerNotFoundError("Unable to find the server at %s" % conn.host)
httplib2.ServerNotFoundError: Unable to find the server at oauth2.googleapis.com
Process finished with exit code -1发布于 2020-03-05 09:04:15
在这里,我运行了您的代码,以重新生成相同的错误,我得到了同样的。
为了解决这个问题,我检查了dict键,并注意到dict键和值被编码为字节。
因此,我使用字节键访问并解码将消息转换为str,如下所示:
import email
from imapclient import IMAPClient
HOST = 'imap.gmail.com'
USERNAME = 'username'
PASSWORD = 'password'
ssl = True
## Connect, login and select the INBOX
server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)
select_info = server.select_folder('INBOX')
messages = server.search(['FROM', 'email_of_the_contact@gmail.com'])
response = server.fetch(messages, ['RFC822'])
for msgid, data in response.items():
msg_string = data[b'RFC822']
msg = email.message_from_string(msg_string.decode())
print('ID %d: From: %s Date: %s' % (msgid, msg['From'], msg['date']))https://stackoverflow.com/questions/60540927
复制相似问题