无法用Java以编程方式搜索Yahoo Mail?

时间:2015-03-15 21:37:51

标签: javamail yahoo yql yahoo-api yahoo-mail

我一直致力于连接Yahoo邮件的Java应用程序,以便用户搜索他们的Yahoo电子邮件。

最近,雅虎突然(仅提前5周通知)停止使用雅虎邮箱API,我们正在使用它,效果很好。然后我们重新设计并切换到YQL。不幸的是,由于不明原因,本周也停止了工作。端点不断返回错误。即使YQL确实有效,也偶尔会出现零星的情况。甚至Yahoo YQL控制台也会返回错误。我们尝试使用JavaMAIL IMAP访问来搜索邮件。我们可以连接到IMAP服务器,但不支持JavaMAIL搜索术语。我一直收到错误“SEARCH Server error - 请稍后再试”。相同的代码适用于其他IMAP服务(如Aol邮件)。

所以基本上,随着Yahoo Mail API的消失,YQL无法正常运行,以及IMAP不支持搜索,目前还没有以编程方式搜索Yahoo邮件的方式?雅虎一直告诉我们,用于IMAP访问的Yahoo API就是前进的方向(参见https://developer.yahoo.com/mail/)。但这还没有实现,并且没有正常运行的文档。发送电子邮件到imap-service@yahoo-inc.com是没用的,因为无论如何都没有人回复。他们应该从Facebook上了解如何管理变更和维护开发人员关系的一两件事。

有没有人有另外的方法以编程方式搜索Yahoo Mail以获取带有Java的电子邮件?

感谢。

1 个答案:

答案 0 :(得分:1)

我设法通过OAuth 2.0获得与Yahoo合作的IMAP访问权限,但这段代码是用Python编写的:

  1. 按照此处的说明刷新用户的令牌: https://developer.yahoo.com/oauth2/guide/index.html#refresh-token-label (您可以使用您使用OAuth 1.0收到的refresh_token)
  2. 替换以下代码中的email_address和access_token:
  3. import logging
    import imaplib
    import datetime
    import quopri
    import hashlib
    
    endpoint = 'imap.mail.yahoo.com'
    email_address = 'REPLACE_THIS@yahoo.com'
    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])

相关问题