2016-12-20 6 views
1

Gmail API를 사용하고 있습니다. 나는 인증을했다. 이제 초안을 만들고 싶습니다. 하지만JS 문자열을 rfc822로 변환

{ error: 
I20161220-15:53:43.486(4)?  { errors: [Object], 
I20161220-15:53:43.487(4)?   code: 400, 
I20161220-15:53:43.488(4)?   message: 'Media type \'application/octet-stream\' is not supported. Valid media types: [message/rfc822]' } } } 

의 Gmail API는 RFC822 표준 base64로 문자열을 필요로이 오류를 얻고있다. 문자열을 rfc822로 변환하는 좋은 방법이 확실하지 않습니다. 어떻게해야합니까?

내 앱에 유성을 사용하고 있으며 여기에 제 코드가 있습니다.

import { Meteor } from 'meteor/meteor' 
import { HTTP } from 'meteor/http' 

Meteor.startup(() => { 
    // Meteor.call('createDraft') 


    Meteor.methods({ 
    'createDraft': function() { 
     console.log(this.userId) 

     const user = Meteor.users.findOne(this.userId) 
     const email = user.services.google.email 
     console.log(email) 
     const token = user.services.google.accessToken 
     const dataObject = { 
     message: { 
      raw: CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse('dddd')) 
     }, 
     headers: { 
      Authorization: `Bearer ${token}` 
     } 
     } 
     HTTP.post(`https://www.googleapis.com/upload/gmail/v1/users/${email}/drafts`, dataObject, (error, result) => { 
     if (error) { 
      console.log('err', error) 
     } 
     if (result) { 
      console.log('res', result) 
     } 
     }) 
    } 
    }) 
}) 
+1

는 [RFC822] (https://www.ietf.org/rfc/rfc0822.txt) 1980 년대 초부터 좋은 오래된 전자 메일 프로토콜입니다. 적절한 헤더와 유효한 본문을 사용하여 올바른 형식의 이메일 메시지를 작성해야한다는 것은 Gmail의 의미입니다 (분명히). 그것은 당신의 문자열의 형식에 대해 불평하지 않습니다. –

답변

0

메시지/rfc822. 다음은 작업 코드입니다. 생성 된 초안에는 빈 내용이 있기 때문에 원본 메시지의 내용은 ts에서 잘못된 것입니다. 그러나 초안 자체가 성공적으로 작성됩니다.

import { Meteor } from 'meteor/meteor' 
import { HTTP } from 'meteor/http' 

Meteor.startup(() => { 
    // Meteor.call('createDraft') 

    Meteor.methods({ 
    'createDraft': function() { 
     console.log(this.userId) 
     // CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse('dddd')) 
     const user = Meteor.users.findOne(this.userId) 
     const email = user.services.google.email 
     console.log(email) 
     const token = user.services.google.accessToken 
     const rawMessage = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(
     'From: [email protected]\r\n' + 
     'To: [email protected]\r\n' + 
     'Subject: Subject Text\r\n\r\n' + 
     'The message text goes here' 
    )).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') 

     const dataObject = { 
     message: { 
      raw: rawMessage 
     }, 
     headers: { 
      'Content-Type': 'message/rfc822', 
      Authorization: `Bearer ${token}` 
     } 
     } 
     HTTP.post(`https://www.googleapis.com/upload/gmail/v1/users/${email}/drafts`, dataObject, (error, result) => { 
     if (error) { 
      console.log('err', error) 
     } 
     if (result) { 
      console.log('res', result) 
     } 
     }) 
    } 
    }) 
}) 
1

Base64로 메시지를 인코딩 및 - 모든 +를 교체하십시오 =를 후행하는 것은 할 /_ 모든 교체 및 제거하려면 URL 안전 : 난 그냥 콘텐츠 형식을 보낼 필요

const rawMessage = btoa(
    "From: [email protected]\r\n" + 
    "To: [email protected]\r\n" + 
    "Subject: Subject Text\r\n\r\n" + 

    "The message text goes here" 
).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') 

const dataObject = { 
    message: { 
    raw: rawMessage 
    }, 
    headers: { 
    'Content-Type': 'application/json', 
    Authorization: `Bearer ${token}` 
    } 
}; 
+0

하지만 'Content-Type': 'application/json'을 'Content-Type': 'message/rfc822'로 변경했으나 제대로 작동하지 않았습니다. 고맙습니다. –