当前位置: 首页 > 知识库问答 >
问题:

400错误。必填收件人地址。卷曲

洪知
2023-03-14

我使用了带有curl的Gmail API。(users.messages:send)

curl -X POST -H "Authorization: Bearer *****" -H "Content-Type:message/rfc822" -d "{'raw':'Encoded Value'}" "https://www.googleapis.com/upload/gmail/v1/users/me/messages/send"
{
   "error": {
     "errors": [
        {
         "domain": "global",
         "reason": "invalidArgument",
         "message": "Recipient address required"
       }
     ],
     "code": 400,
     "message": "Recipient address required"
   }
 }


编码值由以下python脚本创建。

import base64
from email.mime.text import MIMEText
from email.utils import formatdate

MAIL_FROM = "example@gmail.com"
MAIL_TO = "example@gmail.com"

def create_message():
    message = MIMEText("Gmail body: Hello world!")
    message["from"] = MAIL_FROM
    message["to"] = MAIL_TO
    message["subject"] = "gmail api test"
    message["Date"] = formatdate(localtime=True)

    byte_msg = message.as_string().encode(encoding="UTF-8")
    byte_msg_b64encoded = base64.urlsafe_b64encode(byte_msg)
    str_msg_b64encoded = byte_msg_b64encoded.decode(encoding="UTF-8")

    return {"raw": str_msg_b64encoded}

print(create_message())

共有1个答案

车诚
2023-03-14

当媒体上载请求使用https://www.googleapis.com/upload/gmail/v1/users/me/messages/send发送消息时,请求主体需要创建如下。我修改了创建请求体的python脚本。请确认一下。

import base64
from email.mime.text import MIMEText
from email.utils import formatdate

MAIL_FROM = "example@gmail.com"
MAIL_TO = "example@gmail.com"


def encode(v):
    byte_msg = v.encode(encoding="UTF-8")
    byte_msg_b64encoded = base64.b64encode(byte_msg)
    return byte_msg_b64encoded.decode(encoding="UTF-8")


def create_message():
    message = "To: " + MAIL_TO + "\n"
    message += "From: " + MAIL_FROM + "\n"
    message += "Subject: =?utf-8?B?" + encode("gmail api test") + "?=\n"
    message += "Date: " + formatdate(localtime=True) + "\n"
    message += "Content-Type: multipart/alternative; boundary=boundaryboundary\n\n"
    message += "--boundaryboundary\n"
    message += "Content-Type: text/plain; charset=UTF-8\n"
    message += "Content-Transfer-Encoding: base64\n\n"
    message += encode("Hello world!") + "\n\n"
    message += "--boundaryboundary"
    return message


print(create_message())
To: example@gmail.com
From: example@gmail.com
Subject: =?utf-8?B?Z21haWwgYXBpIHRlc3Q=?=
Date: Thu, 15 Mar 2018 01:23:45 +0100
Content-Type: multipart/alternative; boundary=boundaryboundary

--boundaryboundary
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

SGVsbG8gd29ybGQh

--boundaryboundary

请将以上请求体保存为文本文件。作为示例,文件名为sample.txt

在这里,请小心文件的“EOF”的位置。请不要在最后一个--boundaryboundary后面中断。如果它在最后一个--boundaryboundary之后中断,则不接收正文。图像如下所示。

curl -s -X POST \
  -H "Authorization: Bearer *****" \
  -H "Content-Type: message/rfc822" \
  --data-binary "@sample.txt" \
  "https://www.googleapis.com/upload/gmail/v1/users/me/messages/send"
{
 "id": "#####",
 "threadId": "#####",
 "labelIds": [
  "UNREAD",
  "SENT",
  "INBOX"
 ]
}
  • 这是一个非常简单的示例,因此请将其修改为您的环境。
  • 此答案假设您的访问令牌可用于此情况。如果出现与访问令牌相关的错误,请检查作用域。

如果我误解了你的问题,我很抱歉。

 类似资料:
  • 在尝试向包含字母“ñ”的收件人地址发送电子邮件时,我在phpmailer上遇到下一个错误,例如: 致命错误:未捕获异常“phpmailerException”,消息“无效地址:lauro.muñ”oz@live.com.mx' 我知道它说这是一个无效的地址,这只是因为它包含字母ñ,使用

  • 这是我的代码,我使用Firebase注册用户,并使用用户名而不是电子邮件进行登录/注册。 我搜索了很多,但没有找到解决方案。任何关于这种方法的帮助都将不胜感激。

  • 我正在尝试从我的Android应用程序发送电子邮件。只需单击一个按钮,gmail就应该打开并显示一封带有我之前定义的收件人、主题和电子邮件正文的新电子邮件。 这是两天的工作方式,但今天,收件人地址没有被复制到gmail地址栏,只有主题和正文被复制。 这是我的代码(我没有更改,与2天前的代码一样):

  • 提示 页面模板源码免费开源,在uni-app的插件市场uView的 示例项目 中,在右上角选择"使用 HBuilderX 导入示例项目" 或者 "下载示例项目ZIP", 在HX运行项目即可看到和使用模板。 此功能包含两个页面,分为展示用户收货地址列表和添加收货地址。相关功能和数据均为本地模拟数据和格式,不一定 和用户实际环境相同,请自行修改对应的js实现逻辑,不要拘泥于模板的示例。