Gmail API使用nodejs,asnyc函数获取邮件

时间:2018-07-26 11:34:04

标签: javascript node.js gmail-api

我一直在努力使这项工作奏效,但无法解决。

我需要检索所有邮件ID,然后使用其ID获取那些邮件。因为它不是异步的,所以在导出数据时我什么也没得到。

function listMessages(auth) {
 const gmail = google.gmail({version: 'v1', auth});
 let data;
 gmail.users.messages.list({
  'userId': 'mail address',
  'q': 'some query'
 }, (err, res) => {
  res.data.messages.forEach(element => {
    console.log(element);
    mails.push(element.id);
  });
  mails.forEach((id) => {
    request = gmail.users.messages.get({
      'userId': 'sedatcyalcin@gmail.com',
      'id': id
  }, (err, res) => {
     data = res.data.snippet;
     console.log(data);
   });
 })

 });

}

我可以导出邮件,但不能导出数据;

3 个答案:

答案 0 :(得分:0)

也许可以分为2个函数,如果一个函数返回promise可以解决它。

const listMessages = auth => {
    return new Promise((resolve , reject)=>{
       const gmail = google.gmail({version: 'v1', auth});
       let data;
       gmail.users.messages.list({
         'userId': 'mail address',
         'q': 'some query'
       }, (err, res) => {
            res.data.messages.forEach(element => {
            console.log(element);
            mails.push(element.id);
            resolve(mails)
       });
    })
  })    
}

const getMessages = () => {
   listMessages().then(mails=>{
     mails.forEach((id) => {
        request = gmail.users.messages.get({
          'userId': 'sedatcyalcin@gmail.com',
          'id': id
      }, (err, res) => {
            data = res.data.snippet;
            console.log(data);
       });
     })
  })
}

伯德·博伊尔·迪恩(Birde boyle dene),奥尔马斯·伊斯·索鲁努·达哈detaylıanlatırsan院子和电影院。

答案 1 :(得分:0)

这就是我的工作方式:

appleDelegate.swift

我在此行下面的index.js文件中调用了它:

function getRecentEmail(auth) {
    const gmail = google.gmail({ version: 'v1', auth });
    // Only get the recent email - 'maxResults' parameter
    gmail.users.messages.list({ auth: auth, userId: 'me', maxResults: 1, }, function (err, response) {
        if (err) {
            console.log('The API returned an error: ' + err);
            return;
        }

        // Get the message id which we will need to retreive tha actual message next.
        var message_id = response['data']['messages'][0]['id'];

        // Retreive the actual message using the message id
        gmail.users.messages.get({ auth: auth, userId: 'me', 'id': message_id }, function (err, response) {
            if (err) {
                console.log('The API returned an error: ' + err);
                return;
            }
             email = response.data
             console.log(email)
        });
    }); }

答案 2 :(得分:0)

这是我基于TS的列出邮件的解决方案。

请注意,格式:“ raw”返回base64。如果只希望每条与查询匹配的电子邮件的摘要,请删除该行。

    const gmail = google.gmail({ version: 'v1', auth });
    let data: string | undefined;
    const mails: string[] = [];
    gmail.users.messages?.list(
        {
            userId: 'me',
            q: 'from: some query',
            maxResults: 1,
        },
        (err, res) => {
            if (!res || !res.data || !res.data.messages) {
                console.log('No Messages Found');
                return;
            }
            res.data.messages.forEach((message) => {
                console.log(`first api call: ${message}`);
                mails.push(message.id ?? '');
            });
            mails.forEach((id) => {
                const req = gmail.users.messages.get(
                    {
                        userId: 'me',
                        id,
                        format: 'raw',
                    },
                    (err, res) => {
                        // data = res?.data.snippet!;
                        console.log(res?.data);
                    }
                );
            });
        }
    );
};