Aucun moyen de rechercher Yahoo Mail par programmation avec Java?


J'ai travaillé sur une application Java qui se connecte à Yahoo Mail pour permettre à un utilisateur de rechercher dans son e-mail Yahoo.

Récemment, Yahoo a soudainement (avec seulement 5 semaines de préavis) interrompu l'API Yahoo Mail, que nous utilisions et qui fonctionnait très bien. Ensuite, nous avons repensé et sommes passés à YQL. Malheureusement, pour des raisons inconnues, cela aussi a cessé de travailler cette semaine. Le point de terminaison continue de renvoyer une erreur. Même lorsque YQL fonctionnait, c'était occasionnel et sporadique. Même le Yahoo YQL la console renvoie des erreurs. Nous avons essayé d'utiliser JavaMAIL IMAP access pour rechercher des messages. Nous pouvons nous connecter au serveur IMAP, mais les termes de recherche JavaMAIL ne sont pas pris en charge. Je reçois toujours l'erreur "Erreur du serveur de recherche - Veuillez réessayer plus tard". Le même code fonctionne très bien pour d'autres services IMAP (comme Aol mail).

Donc, fondamentalement, avec Yahoo Mail API disparu, YQL ne fonctionne pas, et IMAP ne prend pas en charge la recherche, il n'y a pas de moyen programmatique de recherche Yahoo mail en ce moment? Yahoo ne cesse de nous dire que l'API Yahoo pour l'accès IMAP est la voie à suivre (voir ici https://developer.yahoo.com/mail/). Mais ce n'est pas encore en ligne et il n'y a pas de documentation fonctionnelle. Envoi d'un email à [email protected] était inutile car personne ne répond à cela de toute façon. Ils devraient apprendre une chose ou deux de Facebook sur la façon de gérer les changements et de maintenir les relations avec les développeurs.

Quelqu'un a-t-il un autre moyen de rechercher par programme Yahoo Mail pour les e-mails avec Java?

Merci.

Author: Mohammad, 2015-03-16

1 answers

J'ai réussi à obtenir l'accès IMAP avec Yahoo via OAuth 2.0, mais ce code est en Python:

  1. Suivez les instructions ici pour actualiser le jeton de l'utilisateur: https://developer.yahoo.com/oauth2/guide/index.html#refresh-token-label (vous pouvez utiliser le refresh_token que vous avez reçu en utilisant OAuth 1.0)
  2. Remplacez email_address et access_token dans le code suivant:

import logging
import imaplib
import datetime
import quopri
import hashlib

endpoint = 'imap.mail.yahoo.com'
email_address = '[email protected]'
access_token = 'REPLACE_THIS'
auth_string = 'user=%s\1auth=Bearer %s\1\1' % (email_address, access_token)
imap_conn = imaplib.IMAP4_SSL(endpoint) # the IMAP server we're connecting to
imap_conn.debug = 3 # for logging purposes
imap_conn.authenticate('XOAUTH2', lambda x: auth_string)
folders = imap_conn.list()
print folders
imap_conn.select('Inbox', readonly=True)

result, data = imap_conn.uid('search', None, '(FROM "Amazon.com")')
messages = data[0].split()
print 'messages:' + str(messages)

uids_to_fetch = ','.join(messages)
result, data = imap_conn.uid('fetch', uids_to_fetch, 'RFC822')

for counter, message in enumerate(data[::2]):# every other item in the list is not a message, but ")" so we skip it
    # yield raw mail body, after decoding the quoted-printable encoding
    print quopri.decodestring(message[1])
 1
Author: skunkwerk, 2015-04-08 00:16:34