Как использовать API Gmail Python для (эффективной) вставки гиперссылки в существующее электронное письмо (с помощью фунPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать API Gmail Python для (эффективной) вставки гиперссылки в существующее электронное письмо (с помощью фун

Сообщение Anonymous »

Я пытаюсь написать сценарий, позволяющий эффективно добавлять гиперссылку в существующее электронное письмо. У меня уже есть аналогичный скрипт, который эффективно уменьшает размеры больших изображений в существующих электронных письмах, чтобы сэкономить место.
Я редактирую электронное письмо, получая его и редактируя. полученную копию, записывая ее обратно с тем же идентификатором потока (хотя Gmail назначает новый идентификатор) и удаляя электронное письмо с исходным идентификатором, поэтому остается только измененная копия в том же месте, где находился оригинал. .
Но когда я пытаюсь добавить гиперссылку и просмотреть конечный результат в веб-интерфейсе Gmail, она неактивна, и в функции gmail show original я вижу следующее:
>

Код: Выделить всё

testurl text
т.е. знак равенства после href отсутствует, все остальное в порядке.
После настройки службы в соответствии с документацией по быстрому запуску GMail Python и параметров запроса в переменной с именем query код выполняется согласно приведенному ниже:

Код: Выделить всё

# get content of first email matching query criteria
results = service.users().messages().list(userId='me', q=query, maxResults = 500).execute()
fullmsg = service.users().messages().get(userId='me', id=results['messages'][0]['id'], format='raw').execute()
unencoded = base64.urlsafe_b64decode(fullmsg['raw']).decode('utf-8')
mmsg = email.message_from_string(unencoded)

# find text/html part, and add link to start of html body using BeautifulSoup
for part in mmsg.walk():
if part.get_content_type() == 'text/html':
soup = BeautifulSoup(part.get_payload(), features='lxml')
linkTag = soup.new_tag('a', href='http://testurl.com')
linkTag.append("testurl text")
soup.body.insert(0,linkTag)
part.set_payload(str(soup))
encmsg = base64.urlsafe_b64encode(mmsg.as_string().encode('utf-8'))

# Add a label to indicate this email has been processed already (so query will exclude it from future searches) and write altered copy back to the server, deleting the original email
newLabels = fullmsg['labelIds'] + [doneLabelID]
fixedMsg = { 'raw' : encmsg.decode(), 'labelIds' : newLabels, 'threadId' : fullmsg['threadId'] }
response = service.users().messages().insert(userId='me', body=fixedMsg, internalDateSource='dateHeader').execute()
service.users().messages().delete(userId='me', id=results['messages'][0]['id']).execute()
pdb дает обнадеживающие результаты при проверке измененного тела в различных точках, а также выполнение приведенного ниже кода после выполнения вышеописанного:

Код: Выделить всё

fromg = service.users().messages().get(userId='me', id=response['id'], format='raw').execute()
unenc = base64.urlsafe_b64decode(fromg['raw']).decode('utf-8')
gmmsg = email.message_from_string(unenc)
for part in gmmsg.walk():
    if part.get_content_type() == 'text/html':
        print(part)
На этом этапе, после записи копии на сервер и получения этого электронного письма через API, тег привязки в печатном тексте включает содержимое href='http://testurl.com '. Но когда в веб-интерфейсе Gmail просматривается электронное письмо, текст ссылки («текст testurl»), как упоминалось выше, просто отображается как обычный текст. в источнике сообщения в Thunderbird и b64decoding закодированный сегмент text/html показывает только текст, который был заключен в теги привязки («текст testurl») - сами теги привязки полностью отсутствуют (предположительно удалены Gmail из-за отсутствия атрибута href). хорошо сформирован?).
Я также пробовал без использования BeautifulSoup (вставляя теги привязки вручную), на случай, если это вводит что-то странное, но это не имело никакого значения.
Если кто-нибудь знает, что заставляет Gmail искажать эти сообщения при просмотре или пересылке из веб-интерфейса Gmail (но не делать этого, когда к сообщению обращаются через API), вся помощь будет очень полезна. оценил.

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-existing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»