相关疑难解决方法(0)

邮件附件错误的媒体类型Gmail API

我正在尝试使用通过Gmail API在Javascript客户端附加的jpeg文件发送消息.我到目前为止编写的代码如下:

$.ajax({
  type: "POST",
  url: "https://www.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=multipart",
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'multipart/related; boundary="foo_bar_baz"'
  },
  data: data
});
Run Code Online (Sandbox Code Playgroud)

哪里data是一个字符串建立类似的例子在这里找到:

--foo_bar_baz
Content-Type: application/json; charset=UTF-8

{ 
  "raw": "RnJvbTogRW1pbCBUaG9saW4gPGVtdGhvbGluQGdtYWlsLmNvbT4KVG86IEV4YW1wbGUgTmFtZSA8ZW10aG9saW5AZ21haWwuY29tPgpTdWJqZWN0OiBzZHNkCgpzZHNk"
}

--foo_bar_baz
Content-Type: image/jpeg

data:image_jpeg;base64,_9j_4AAQSkZJRgABAQEAYABgAAD_2wBDAAIBAQIBAQICAgICAgIC…bHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3-Pn6_9oADAMBAAIRAxEAPwD-f-iiigD_2Q==

--foo_bar_baz--
Run Code Online (Sandbox Code Playgroud)

我得到的错误是Media type 'image/jpeg' is not supported. Valid media types: [message/rfc822]可以理解的,因为[message/rfc822]根据规范,媒体是唯一有效的MIME类型,但上面链接的示例另有说明.

我究竟做错了什么?如果有人能够对此有所了解,我将不胜感激!

javascript email ajax gmail-api

9
推荐指数
1
解决办法
5041
查看次数

GMail API电子邮件弹跳

在.Net中使用GMail API.使用Net.Mail.MailMessage创建消息传递.然后使用MimeKit创建MimeMessage(使用此方法发送附件+ HTML消息).将MimeMessage.ToString传递给Base64编码器.没有API错误.代码运行正常.我可以在GMail的已发送页面中看到该消息.邮件看起来很完美(发送实际返回消息ID).但是,Gmail中的此邮件会附加以下附加消息.

Bounce <nobody@gmail.com>

An error occurred. Your message was not sent.
Run Code Online (Sandbox Code Playgroud)

像往常一样,谷歌没有其他信息.如何解决这个问题?

        Dim msg = New Net.Mail.MailMessage
        msg.Subject = subject
        msg.To.Add(New MailAddress(ToEmail))
        msg.From = New MailAddress(FromEmail, SenderName)
        msg.ReplyTo = New MailAddress(FromEmail, SenderName)
        msg.Body = bodyText
        msg.IsBodyHtml = True

        If Not String.IsNullOrWhiteSpace(fileAttachment) Then
            If System.IO.File.Exists(fileAttachment) Then
                Dim Attachment As New Net.Mail.Attachment(fileAttachment, "application/pdf")
                msg.Attachments.Add(Attachment)
            End If
        End If
       Dim message As MimeMessage = MimeMessage.CreateFromMailMessage(msg)
       Dim newMsg = New Google.Apis.Gmail.v1.Data.Message()
       newMsg.Raw = Base64UrlEncode(message.ToString)
       GmailService.Users.Messages.Send(newMsg, "me").Execute()



Private Function Base64UrlEncode(ByVal input As String) …
Run Code Online (Sandbox Code Playgroud)

gmail-api

8
推荐指数
1
解决办法
1万
查看次数

Google REST API - RFC 2822格式化和base64url编码字符串中的消息

我尝试使用- 尝试谷歌REST API - Users.messages:发送.

有一个必要的参数 - raw-

整个电子邮件消息采用RFC 2822格式化和base64url编码的字符串.当提供format = RAW参数时,在messages.get和drafts.get响应中返回.

我检查了RFC 2822格式,似乎它应该在这里显示为示例,然后我用这个编码器将它编码为base64URL并将其粘贴rawtry的字段中,我得到 - Invalid value for ByteString: http://ostermiller.org/calc/encode.html.

你能给我一个正确的RFC 2822 format和它相应的base64URL,它会在上面试试吗?

api rest gmail-api

7
推荐指数
1
解决办法
3199
查看次数

使用 Go 从 Gmail API 解码邮件正文

我正在尝试使用 Go 中的 Gmail API 检索邮件的完整邮件正文。目前,当我这样做时,我只能得到消息正文的前三个字符,即“<ht”。我很确定我的问题在于消息正文的解码,但我似乎无法弄清楚我做错了什么。

我查看了其他几种语言的示例,并尝试将它们翻译成 Go,但没有成功。编码的消息正文相当大,所以我相当肯定一些数据在某处丢失了。

这是一个(删节的)代码片段,说明了我是如何尝试解决这个问题的:

req := svc.Users.Messages.List("me").Q("from:someone@somedomain.com,label:inbox")

r, _ := req.Do()

for _, m := range r.Messages {

  msg, _ := svc.Users.Messages.Get("me", m.Id).Format("full").Do()

  for _, part := range msg.Payload.Parts {

    if part.MimeType == "text/html" {

      data, _ := base64.StdEncoding.DecodeString(part.Body.Data)
      html := string(data)
      fmt.Println(html)

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

gmail go gmail-api

6
推荐指数
1
解决办法
1261
查看次数

Gmail api 使用 Postman 发送

我正在尝试使用 POST 方法使用 gmail API 和 POSTMAN 发送邮件

POST https://www.googleapis.com/upload/gmail/v1/users/example@gmail.com/messages/send
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "invalidArgument"
                "message": "Recipient address required"
            }
        ],
        "code": 400,
        "message": "Recipient address required"
    }
}
Run Code Online (Sandbox Code Playgroud)

标头已放入内容类型:message/rfc822

我知道这必须编码成base64(web_safe),所以我翻译了

"From: sender.example@gmail.com\r\n" +
"To: receiver.example@gmail.com\r\n" +
"Subject: Subject Example\r\n" +
"This is content: hope you got it\r\n"
Run Code Online (Sandbox Code Playgroud)

我也将它们替换为网络安全

 replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); 
Run Code Online (Sandbox Code Playgroud)

所以我得到了如下的base64。所以我把 raw 放在 POST METHOD 的正文中

{
    "raw": "RnJvbTogc2VuZGVyLmV4YW1wbGVAZ21haWwuY29tDQpUbzogcmVjZWl2ZXIuZXhhbXBsZUBnbWFpbC5jb20NClN1YmplY3Q6IFN1YmplY3QgRXhhbXBsZQ0KVGhpcyBpcyBjb250ZW50OiBob3BlIHlvdSBnb3QgaXQNCg"
}
Run Code Online (Sandbox Code Playgroud)

我在谷歌开发者网站上使用了“尝试这个API”,我可以发送它。 https://developers.google.com/gmail/api/v1/reference/users/messages/send

但对于邮递员,我不能。

有什么帮助吗?

gmail postman gmail-api

5
推荐指数
1
解决办法
9960
查看次数

如何使用带有Ruby Google API客户端的Gmail API发送消息?

我面临着API的几个问题,

第一:

发送方法询问'id'(消息ID或线程ID)..但为什么?我正在发送新消息,所以它不应该要求.根据Gmail Api documnetation它的可选. https://developers.google.com/gmail/api/v1/reference/users/messages/send

ArgumentError: Missing required parameters: id.
Run Code Online (Sandbox Code Playgroud)

第二:

即使在指定消息ID后,它也会返回此消息.

 Your client has issued a malformed or illegal request.
Run Code Online (Sandbox Code Playgroud)

 require 'mime'
 include MIME



msg = Mail.new
msg.date = Time.now
msg.subject = 'This is important'
msg.headers.set('Priority', 'urgent')

msg.body = Text.new('hello, world!', 'plain', 'charset' => 'us-ascii')
msg.from = {'hi@gmail.com' => 'Boss Man'}
msg.to   = {
    'list@example.com' => nil,
    'john@example.com' => 'John Doe',
    'jane@example.com' => 'Jane Doe',
}

@email = @google_api_client.execute(
    api_method: @gmail.users.messages.send(:get),
    body_object: {
        raw: Base64.urlsafe_encode64(msg.to_s)
    },
    parameters: …
Run Code Online (Sandbox Code Playgroud)

ruby google-api gmail-api

4
推荐指数
1
解决办法
5016
查看次数

400 错误。需要收件人地址。JavaScript

我在 Gmail API 中一步一步地提出了一个简单的请求。

根据我打这个电话的所有说明:

var request = gapi.client.gmail.users.messages.send({
    'userId': 'me',
    "payload": {
    "headers": [
             {
              "name": "To",
              "value": "########@gmail.com"
             }
           ]},
     'raw': 'SEVMTE8gTVkgREVBUiBGUklFTkQ='
     });

request.then(()=>{console.log('yep')})
Run Code Online (Sandbox Code Playgroud)

但是收到一个错误:

{
   "error": {
   "errors": [
     {
       "domain": "global",
       "reason": "invalidArgument",
       "message": "Recipient address required"
     }
   ],
   "code": 400,
   "message": "Recipient address required"
  }
}
Run Code Online (Sandbox Code Playgroud)

google-apis-explorer gmail-api

3
推荐指数
1
解决办法
5024
查看次数

将字符串转换为Web安全的Base64格式

我正在测试如何使用带有Google Apps脚本的Admin SDK目录服务更新用户图片,具有以下功能:

function updatePhoto(){
  var fileId = 'XXXXXXXXXXXXXXXXXXX';
  var b = DocsList.getFileById(fileId).getBlob();
  var encoded = Utilities.base64Encode(b.getBytes());

  encoded = encoded.replace(/\//g,'_').replace(/\+/g,'-').replace(/\=/g,'*');
  AdminDirectory.Users.Photos.update({
    "photoData": encoded },'harry.potter@abc.edu.hk');
}
Run Code Online (Sandbox Code Playgroud)

但是,它并不总是有效.只要base64编码的字符串中有填充,它就会失败.参考Google的文档(https://developers.google.com/admin-sdk/directory/v1/reference/users/photos/update),我对这些说明感到有些困惑.它说:

  1. 等号(=)字符替换为星号(*).
  2. 对于填充,使用句点(.)字符而不是RFC-4648 baseURL定义,该定义使用等号(=)进行填充.这样做是为了简化URL解析.

应该做什么?(=)用于Base64中的填充.那么,我应该使用(*)还是(.)?我确实尝试用(.)替换(=)但没有运气.

有人可以帮忙吗?


太奇怪了.当我不替换(=)时,它工作.

function updatePhoto(){
  var fileId = 'XXXXXXXXXXXXXXXXXXX';
  var b = DocsList.getFileById(fileId).getBlob();
  var encoded = Utilities.base64Encode(b.getBytes());

  encoded = encoded.replace(/\//g,'_').replace(/\+/g,'-');
  AdminDirectory.Users.Photos.update({
    "photoData": encoded },'harry.potter@abc.edu.hk');
Run Code Online (Sandbox Code Playgroud)

}

google-apps-script google-admin-sdk

2
推荐指数
1
解决办法
9398
查看次数

使用 PHP 中的 GMail API 发送电子邮件

我应该将邮件服务从旧项目替换为 GMail。但是,该项目正在使用 PHP,并且在 google 文档页面中还没有关于 PHP 代码的文档。我想测试发送带有简单邮件正文的电子邮件,这是代码:

require_once __DIR__."/google-api-php-client-2.2.1/vendor/autoload.php";

define("APPLICATION_NAME", "Gmail API PHP Quickstart");
define("CREDENTIALS_PATH", "~/.credentials/gmail-php-quickstart.json");
define("CLIENT_SECRET_PATH", __DIR__."/client_secret.json");

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/gmail-php-quickstart.json
define('SCOPES', implode(' ', array(
    Google_Service_Gmail::GMAIL_READONLY)
));

date_default_timezone_set('America/New_York'); // Prevent DateTime tz exception
/*
if (php_sapi_name() != 'cli') {
    throw new Exception('This application must be run on the command line.');
}
*/

/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
function getClient() { …
Run Code Online (Sandbox Code Playgroud)

php email gmail google-api

1
推荐指数
1
解决办法
2857
查看次数