如何使用用于nodejs的EWS/MAPI获取电子邮件内容



使用这个节点ews包,我可以发送电子邮件,但我还没有找到一个如何从收件箱文件夹中读取邮件并获取电子邮件文本和附件的好例子。

我已经阅读了Microsoft文档,例如以下文档:https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-work-with-exchange-mailbox-items-by-using-ews-in-exchange#get-使用ews管理的api创建项目,但示例是C#、C++或VB.

然而,我想使用Nodejs来实现这一点。

**我找到了使用mailparser提取每一个内容的最佳方法见下文

//第一次阅读收件箱中的电子邮件

const EWS = require('node-ews');
const simpleParser = require('mailparser').simpleParser;
// exchange server connection info
const ewsConfig = {
  username: 'username',
  password: 'password',
  host: 'hostname'
};
const options = {
  rejectUnauthorized: false,
  strictSSL: false
};
// initialize node-ews
const ews = new EWS(ewsConfig, options);
var ewsFunction = 'FindItem';
    var ewsArgs = {
        'attributes': {
            'Traversal': 'Shallow'
        },
        'ItemShape': {
            't:BaseShape': 'Default'
        },
        'ParentFolderIds' : {
            'DistinguishedFolderId': {
            'attributes': {
                'Id': 'inbox'
            }
          }
        }
    };
    // Itreate over all the emails and store Id and ChangeKey.
    ews.run(ewsFunction, ewsArgs, ewsSoapHeader)
    .then(result => {
        // Iterate over the result and extract Id and ChangeKey of the messages and pass those to GetItem function to read messages
    })

//用于读取FindItem(使用Id和ChangeKey(返回的单个消息

var ewsFunction = 'GetItem';
      var ewsArgs = {
        'ItemShape': {
          'BaseShape': 'Default',
          'AdditionalProperties': {
            'FieldURI': [
              { 'attributes': { 'FieldURI': 'item:MimeContent'}}
            ]
          }
        },
        'ItemIds': {
          'ItemId': {
            'attributes': {
              'Id': Id,
              'ChangeKey': ChangeKey
            }
          }
        }
      };
      await ews.run(ewsFunction, ewsArgs, ewsSoapHeader)
      .then(result => {
          // Iterate over the result and extract meesage
          const {Message} = result.ResponseMessages.GetItemResponseMessage.Items
          let mimeContent = Buffer.from(Message.MimeContent['$value'], 'base64').toString('binary');// decode mime content
          simpleParser(mimeContent).then(async function (mail) {
            console.log("mail")
            console.log(mail.attachments)
            console.log(mail.headers.get('message-id'))
            console.log(mail.headers.get('references'))
            console.log(mail.headers.get('in-reply-to'))
            console.log({
              // text: mail.text,
              // html: mail.html ? mail.html.replace(/<meta([^>]+)>/g, "") : "",
              from: (mail.from) ? mail.from.value.map(item => item.address) : [],
              to: (mail.to) ? mail.to.value.map(item => item.address) : [],
              cc: (mail.cc) ? mail.cc.value.map(item => item.address) : [],
              bcc: (mail.bcc) ? mail.bcc.value.map(item => item.address) : [],
              messageId: mail.messageId,
              subject: mail.subject
            })
          }).catch((err) => {
            console.log("err")
            console.log(err)
          })
      })

在这里,您将获得带有附件的完整解析邮件内容。快乐编码!!!

最新更新