【问题标题】:Microsoft graph send email with attachmentsMicrosoft graph 发送带附件的电子邮件
【发布时间】:2020-08-08 15:22:20
【问题描述】:

我正在使用 microsoft graph 的服务来发送带有附件的电子邮件。 但是当我发送邮件时,它没有我设置的附件。 这是我生成的 Json

` message: {
            attachments: attachments[],
            subject: Email.Subject,
            body: {
              contentType: "HTML",
              content: Email.body
            },
            toRecipients: [
              {
                emailAddress: {
                  address: Email.To
                }
              }
            ],
          },
          saveToSentItems: true
}

这是我的附件数组

0: {@odata.type: "#microsoft.graph.fileAttachment", contentBytes: "iVBORw0KGgoAAAANSUhEUgAAAPwA…JkiRJkiRJkiRJkiQZ4f8B1nomcWdNLuoAAAAASUVORK5CYII=", name: "outbound.png"}

1: {@odata.type: "#microsoft.graph.fileAttachment", contentBytes: "iVBORw0KGgoAAAANSUhEUgAAAQAA…eGOdrvC6af95tuTmRRrb4fxZWJvYuBoVJAAAAAElFTkSuQmCC", name: "inbound.png"}

`

这是我使用发送邮件API的方式

      sendMail: async function(accessToken, email) {

    const client = getAuthenticatedClient(accessToken);
    const sentResult = await client.api('/users/{tenantid}/sendMail').post(email);
}

问题是,电子邮件已发送,但为什么没有附件

这就是我阅读文件的方式

var attachments = [];
function addAttachments() {
allFiles.forEach(a => {
    let reader = new FileReader();
    reader.readAsDataURL(a);
    reader.onload = function() {
        attachments.push({
            '@odata.type': "#microsoft.graph.fileAttachment",
            name: a.name,
            contentType: a.type,
            contentBytes: reader.result.split(',')[1],
        });
    };
})}

这里是邮件对象的控制台日志 email_object

这是我对对象进行字符串化时的结果

{"message":{"subject":"[AU1588259832480]-random subject","body":{"contentType":"HTML","content":"<p>body test</p>"},"toRecipients":[{"emailAddress":{"address":"email@test.com"}}],"internetMessageId":"AU1588259832480","attachments":[]}}

attachmen 对象是空的,但为什么呢?

【问题讨论】:

  • 您是否在发送邮件之前将其作为 POST 来针对草稿邮件的附件进行调用? docs.microsoft.com/en-us/graph/api/…
  • 是的,我正在尝试发送带有附件的消息,这不可能吗?
  • 任何帮助!!!拜托了
  • 您有请求的 Fiddler(或类似)跟踪?

标签: javascript reactjs microsoft-graph-api microsoft-graph-mail microsoft-graph-files


【解决方案1】:

您的contentBytes 不应该有data:image/png;base64 的前言。那应该只是图像中的 base64 编码字节。

"attachments": [
    {
        "@odata.type": "#microsoft.graph.fileAttachment",
        "contentBytes": "/9j/4AAQSkZJRgABAQEAYAB...",
        "name": "outbound.png",
        "contentType": "image/png"
    }
]

【讨论】:

  • 有联系方式吗?请更仔细地查看我的问题
  • 您可能只想在发送之前使用JSON.stringify(email) 转储您的email 对象。我怀疑它的结构不完全正确。与我在上面发布的 sn-p 进行比较。如果您无法从中弄清楚,最好编辑您的帖子并将您的代码包含在您创建附件数组的位置。
  • 帖子已更新,这里的对象 strignify {"message":{"subject":"[AU1588259832480]-random subject","body":{"contentType":"HTML","content":"&lt;p&gt;body test&lt;/p&gt;"},"toRecipients":[{"emailAddress":{"address":"email@test.com"}}],"internetMessageId":"AU1588259832480","attachments":[]}} 附件是空的,但是为什么,我在阅读文件时一定要推送
  • 好的,这看起来更像是 JavaScript 错误而不是 Graph 问题。我相信您的onload 永远不会被调用,因为您在定义onload 回调之前执行了readAsDataURL
  • 但是正如您在我发布的图片中看到的那样,当我控制台记录对象时,attachmets 数组包含文件,但是当我将数组删除时
【解决方案2】:

这是我根据这篇文章解决空附件的方法 How to capture FileReader base64 as variable?

我在堆栈溢出时发布新帖子

  function getBase64(file, onLoadCallback) {
    return new Promise(function(resolve, reject) {
        var reader = new FileReader();
        reader.onload = function() { resolve(reader.result); };
        reader.onerror = reject;
        reader.readAsDataURL(file);
    });
}

const Send = {
message: {
    subject: `[${quoteNumb ? quoteNumb : quoteHomeNumber}]-${Email.subject}`,
    body: {
        contentType: "HTML",
        content: Email.body
    },
    toRecipients: [],
    attachments: []
}};

async function sendMail() {

for (const a of allFiles) {
    var fileData = await getBase64(a).catch(err => {
        console.log(err)
    });
    Send.message.attachments.push({
        '@odata.type': "#microsoft.graph.fileAttachment",
        name: a.name,
        contentType: a.type,
        contentBytes: fileData.split(',')[1]
    });
}
graph.sendMail(AccesToken, Send);}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2014-04-23
    • 2019-03-09
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多