Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft Graph发送邮件,但不发送';t发送附件(javascript SDK)_Javascript_Angular_Microsoft Graph Api - Fatal编程技术网

Microsoft Graph发送邮件,但不发送';t发送附件(javascript SDK)

Microsoft Graph发送邮件,但不发送';t发送附件(javascript SDK),javascript,angular,microsoft-graph-api,Javascript,Angular,Microsoft Graph Api,我使用Microsoft Graph SDK发送电子邮件没有问题,但是当我添加附件时,此附件不会出现在发送的邮件中。 此处的附件为“Blob”类型。和PDF格式。 我已经讨论了几个与这个问题相对应的stackoverflow问题,但是没有一个解决了我的问题,这就是为什么我在这里提出我的问题 let graphMailAttachments = new Array<any>(); //attachments is an array of blob attach

我使用Microsoft Graph SDK发送电子邮件没有问题,但是当我添加附件时,此附件不会出现在发送的邮件中。 此处的附件为“Blob”类型。和PDF格式。 我已经讨论了几个与这个问题相对应的stackoverflow问题,但是没有一个解决了我的问题,这就是为什么我在这里提出我的问题

    let graphMailAttachments = new Array<any>();

    //attachments is an array of blob
    attachments.forEach(async attachment => {
        let file = await new Response(attachment).arrayBuffer();

        graphMailAttachments.push({
            "contentBytes": file,
            "size": attachment.size,
            "@odata.type" : "#microsoft.graph.fileAttachment",
            "name": 'your-notes.pdf',
            "id" : this.newGuid(),
        }) 
    });

    subject = subject || "Your notes";
    body = body || "Your notes";

    let recipients = new Array<any>();
    to.forEach(receiver => {
        recipients.push({
            emailAddress:{
                address: receiver.email
            }
        })
    });

    let mail = {
        message: {
            subject: subject,
            body: {
                contentType: "Text",
                content: body,
            },
            toRecipients: recipients,
            attachments: graphMailAttachments,
        },
        SaveToSentItems : "true"
    }
    return this.graphClient.api('/me/sendMail').post(mail);
让graphMailAttachments=new Array();
//附件是一个blob数组
附件.forEach(异步附件=>{
let file=等待新的响应(附件).arrayBuffer();
graphmail.push({
“contentBytes”:文件,
“尺寸”:附件。尺寸,
“@odata.type”:“#microsoft.graph.fileAttachment”,
“名称”:“your notes.pdf”,
“id”:this.newGuid(),
}) 
});
主题=主题| |“你的笔记”;
body=body | |“你的笔记”;
让收件人=新数组();
to.forEach(接收器=>{
推送({
电子邮件地址:{
地址:receiver.email
}
})
});
让邮件={
信息:{
主题:主题,,
正文:{
contentType:“文本”,
内容:正文,,
},
收件人:收件人,
附件:graphMailAttachments,
},
SaveToSetItems:“正确”
}
返回此.graphClient.api('/me/sendMail').post(mail);

我做错什么了吗?附件没有出现在邮件中,这有点奇怪。

根据它们的示例,将内容类型设置为application/pdf,然后对文件字节进行base64编码。看到js示例代码部分了吗?

根据他们的示例,将内容类型设置为application/pdf,然后对文件字节进行base64编码。看到js示例代码部分了吗?

在通过邮件发送附件之前,需要将附件从arraybuffer转换为base64字符串。我使用了下面的方法,效果很好:

arrayBufferToBase64( buffer ) : string {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return btoa( binary );
}
arrayBufferToBase64(缓冲区):字符串{
var二进制=“”;
var字节=新的Uint8Array(缓冲区);
var len=字节数。字节长度;
对于(变量i=0;i

我从stackoverflow获得答案:

在通过邮件发送附件之前,您需要将附件从arraybuffer转换为base64字符串。我使用了下面的方法,效果很好:

arrayBufferToBase64( buffer ) : string {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return btoa( binary );
}
arrayBufferToBase64(缓冲区):字符串{
var二进制=“”;
var字节=新的Uint8Array(缓冲区);
var len=字节数。字节长度;
对于(变量i=0;i

我从stackoverflow获得答案:

谢谢,但解决方案是将我得到的Arraybuffer转换为base64谢谢,但解决方案是将我得到的Arraybuffer转换为base64