首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS将字符串转换为rfc822

JS将字符串转换为rfc822
EN

Stack Overflow用户
提问于 2016-12-20 12:08:19
回答 2查看 877关注 0票数 1

我正在尝试gmail。我已经做过了。现在我想创建一个草案。但我发现了这个错误

代码语言:javascript
复制
{ 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需要具有base64标准的rfc822字符串。我不确定将字符串转换为rfc822的任何好方法。我该怎么做?

我正在使用流星作为我的应用程序,这是我的代码。

代码语言:javascript
复制
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)
        }
      })
    }
  })
})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-20 13:19:31

我只需要将内容类型作为message/rfc822 822发送。这是工作代码。请注意,原始消息在ts中有问题,因为创建的草案有空内容。但草案本身是成功创建的。

代码语言:javascript
复制
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: sender@gmail.com\r\n' +
        'To: receiver@gmail.com\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)
        }
      })
    }
  })
})
票数 0
EN

Stack Overflow用户

发布于 2016-12-20 12:56:01

Base64对消息进行编码,并将所有+替换为-,将所有/替换为_,并删除尾随的=以使其具有URL安全性:

代码语言:javascript
复制
const rawMessage = btoa(
  "From: sender@gmail.com\r\n" +
  "To: receiver@gmail.com\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}`
  }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41242023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档