javascript - 使用 Node 作为服务器的 O365 邮件 API

标签 javascript node.js angular xamarin office365api

我正在使用 Node.js 编写 O365 发送邮件 API。我的 Node 充当服务器,Angular 和 Xamarin 充当客户端(Web 和移动)。我已经浏览过documentation 。据此,我已包含 Microsoft SDK 并在 Microsoft Azure 中注册我的应用程序以获取客户端 ID。接下来是邮件 API 代码。

代码

const options = {
    authProvider,
};

const client = Client.init(options);

const sendMail = {
  message: {
    subject: "Meet for lunch?",
    body: {
      contentType: "Text",
      content: "The new cafeteria is open."
    },
    toRecipients: [
      {
        emailAddress: {
          address: "fannyd@contoso.onmicrosoft.com"
        }
      }
    ],
    ccRecipients: [
      {
        emailAddress: {
          address: "danas@contoso.onmicrosoft.com"
        }
      }
    ]
  },
  saveToSentItems: "false"
};

let res = await client.api('/me/sendMail')
    .post(sendMail);

要创建authProvider,我必须在此处进行场景

  1. 调用 Web API 的 Web 应用
  2. 调用网络 API 的移动应用

我不知道如何创建authProvider。文档很困惑。有人可以帮我吗

最佳答案

您需要将该代码放入后端 (node.js)。只需创建一个动态辅助函数来发送这样的邮件

utils.js

const options = {
  authProvider,
};

const client = Client.init(options);

const utils = {};

utils.sendMail = async (to, subject, body, cc, isSave) => {
  const mailOptions = {
    message: {
      subject: subject || '',
      body: { ...body },
      toRecipients: to,
    },
    saveToSentItems: `${isSave}`,
  };
  if (cc) {
    mailOptions.message.ccRecipients = cc;
  }
  const result = await client.api('/me/sendMail').post(mailOptions);
  return result;
};

module.exports = utils;

并像这样调用该函数

const test = async () => {
  try {
    const to = [
      {
        emailAddress: {
          address: 'fannyd@contoso.onmicrosoft.com',
        },
      },
    ];
    const cc = [
      {
        emailAddress: {
          address: 'danas@contoso.onmicrosoft.com',
        },
      },
    ];
    const subject = 'Test';
    const body = {
      contentType: 'Text',
      content: 'The new cafeteria is open.',
    };
    const saveToSentItems = true;
    const result = await utils.sendMail(to, subject, body, cc, saveToSentItems);
    return result;
  } catch (err) {
    console.log(err);
    throw err;
  }
};

test();

我建议你把你的逻辑放在后端当你有多个客户端,例如androidiOsPWA那么你需要重写您的代码适用于所有 3 个平台,如果您将通用业务逻辑放在后端,那么单个代码可以服务于所有 3 个平台。

关于javascript - 使用 Node 作为服务器的 O365 邮件 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57669321/

相关文章:

angular - 如何在 Ionic 4 中将图片上传到 firebase?

angular - 如何使 Azure 存储中的静态网站托管与文件夹树一起使用?

javascript - HtmlUnit 在 js 编译上卡住

javascript - 如何在使用 JavaScript/JQuery 单击单选按钮时突出显示表格单元格 (TD)?

javascript - Node.js 集群错误

node.js - 从 Node.JS 服务器应用程序中发出 GET 请求并将其发送到 React.JS 客户端

javascript - 如何使用 JQuery 切换和 AJAX 调用 PHP 脚本?

javascript - Sequelize.js/Node.js/Express.js : Tasks. findAll()返回 TypeError:无法读取未定义的属性 'findAll'

node.js - Redis实例中如何高效保存商品价格图数据

angular - 如何使用不同的 Angular 环境变量运行 Protractor e2e 测试