Как отличить возврат каретки, созданный отправителем, от переноса каретки, созданного автоматически, в теле письма? Я использую Python imaplib для доступа к Gmail и загрузки тел сообщений следующим образом:
user='whoever@gmail.com'
pwd='password'
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
m.select("INBOX")
resp, items = m.search(None, "ALL")
items = items[0].split()
messages = []
for emailid in items:
resp, data = m.fetch(emailid, "(RFC822)")
email_body = data[0][1]
mail = email.message_from_string(email_body)
for part in mail.walk():
if part.get_content_type() == 'text/plain':
body = part.get_payload(decode=1)
messages.append(body)
Я сосредоточился на случае сообщений, полученных от другого пользователя Gmail. Текст сообщения содержит несколько символов возврата каретки ('\ r \ n'). Они подразделяются на два класса: 1) вставленные отправителем электронной почты, возвращает «true», 2) созданные с помощью Gmail, заключающего слово в ~ 78 символов, возвращает «false». Я хочу удалить только второй класс возврата каретки. Я уверен, что мог бы придумать программное приближение, которое ищет '\ r \ n' в окне вокруг каждого 78-го символа, но это не будет пуленепробиваемым и не то, что я хочу. Интересно отметить, что когда сообщение отображается в Gmail в веб-браузере, возвраты второго класса не возвращаются. Gmail почему-то знает, чтобы удалить / не отображать их специально. Как? Мне не хватает какой-то специальной кодировки?