2017-06-01 84 views
0

我试图发送附有照片的电子邮件。不幸的是,除了附件,一切都有效。我环顾论坛或其他问题以及API,但我无法弄清楚。Ionic 2 + Mailgun附件

这是发送电子邮件的代码片段。它接收一组base64图像字符串。图像显示在应用程序使用相同的阵列,所以我认为这部分应该是好的。

sendAtt(pictures: any[]){ 
    var requestHeaders = new Headers(); 
    requestHeaders.append("Authorization", "Basic " + this.apiKey); 
    requestHeaders.append("Content-Type", "application/x-www-form-urlencoded"); 
    this.http.request(new Request({ 
      method: RequestMethod.Post, 
      url: "https://api.mailgun.net/v3/" + this.mailgunUrl + "/messages", 
      body: "from="+this.sender+"&to=" + this.recipient + "&subject=" + this.subject + "&text=" + this.message +"&attachment="+pictures[0] , 
      headers: requestHeaders, 
     })) 
     .subscribe(success => { 
      console.log("SUCCESS -> " + JSON.stringify(success)); 
     }, error => { 
      console.log("ERROR -> " + JSON.stringify(error)); 
     }); 
} 
+0

最大文章大小是25MB,是你的形象比那更小? Mailgun日志说什么? – emc

回答

0

mailgun的附件需要编码为multipart/form-data。

因此,您的base64image字符串将无法正常工作,您需要将其转换。

dataURItoBlob(dataURI) { 
 
    const byteString, 
 
     mimestring; 
 

 
    if (dataURI.split(',')[0].indexOf('base64') !== -1) { 
 
    byteString = atob(dataURI.split(',')[1]); 
 
    } else { 
 
    byteString = decodeURI(dataURI.split(',')[1]); 
 
    } 
 

 
    mimestring = dataURI.split(',')[0].split(':')[1].split(';')[0]; 
 
    const content = new Array(); 
 
    for (var i = 0; i < byteString.length; i++) { 
 
    content[i] = byteString.charCodeAt(i); 
 
    } 
 
    const blob = new Blob([new Uint8Array(content)], { 
 
    type: mimestring 
 
    }); 
 
    return blob; 
 
}

现在不是图片[0]使用this.dataURItoBlob(图片[0])在您的http请求。