2017-06-01 1 views
0

J'essaie d'envoyer un e-mail avec une image en pièce jointe. Malheureusement tout fonctionne sauf pour la pièce jointe. Je regarde autour de moi sur des forums ou d'autres questions ainsi que sur l'API mais je n'arrive pas à comprendre.Ionic 2 + pièces jointes Mailgun

Voici le code pour l'envoi de l'email. Il reçoit un tableau de chaînes base64image. Les images sont affichées dans l'application en utilisant le même tableau, donc je pense que cette partie devrait être bonne.

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

La taille maximale d'un message est de 25 Mo. Votre image est-elle plus petite que celle-ci? Que disent les journaux de Mailgun? – emc

Répondre

0

attachement de mailgun ont besoin d'être codées comme multipart/form-data.

Pour que vos chaînes base64image ne fonctionnent pas, vous devez le convertir.

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; 
 
}

Maintenant, au lieu des images [0] utilisent this.dataURItoBlob (images [0]) dans votre requête http.