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

无法使用Gmail API发送Gmail消息

常明亮
2023-03-14
email_raw = "From: <#{@google_account}>
To: <#{send_to}>
Subject: This is the email subject

The email body text goes here"

# raw is: The entire email message in an RFC 2822 formatted and base64url encoded string.

message_to_send = Google::Apis::GmailV1::Message.new(raw: Base64.encode64(email_raw))
response = @service.send_user_message("me", message_to_send)

Google::API::ClientError(InvalidArgument:需要收件人地址)

我检查过用ruby gmail api V0.9发送电子邮件,我也发现了这一点,但它使用了mail类,而我在gmail api ruby客户端库中找不到。当前,email_raw包含\n字符,但我在没有它的情况下对它进行了测试,结果它不起作用。
而且,我还想在邮件中发送附件。

共有1个答案

谢唯
2023-03-14

请参阅文档:

原始字符串(字节格式)

以RFC2822格式和base64url编码的字符串显示的整个电子邮件消息。当提供format=raw参数时,在messages.get和drafts.get响应中返回。

问题似乎是您的原始消息正文。

消息正文应具有以下结构:

To: masroorh7@gmail.com Content-Type: multipart/alternative; boundary="000000000000f1f8eb05b18e8970"  --000000000000f1f8eb05b18e8970 Content-Type: text/plain; charset="UTF-8"  This is a test email  --000000000000f1f8eb05b18e8970 Content-Type: text/html; charset="UTF-8"  <div dir="ltr">This is a test email</div>  --000000000000f1f8eb05b18e8970--

base64url编码后,这将看起来像:

encodedMessage = "VG86IG1hc3Jvb3JoN0BnbWFpbC5jb20NCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iMDAwMDAwMDAwMDAwZjFmOGViMDViMThlODk3MCINCg0KLS0wMDAwMDAwMDAwMDBmMWY4ZWIwNWIxOGU4OTcwDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04Ig0KDQpUaGlzIGlzIGEgdGVzdCBlbWFpbA0KDQotLTAwMDAwMDAwMDAwMGYxZjhlYjA1YjE4ZTg5NzANCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJVVEYtOCINCg0KPGRpdiBkaXI9Imx0ciI-VGhpcyBpcyBhIHRlc3QgZW1haWw8L2Rpdj4NCg0KLS0wMDAwMDAwMDAwMDBmMWY4ZWIwNWIxOGU4OTcwLS0"
Google::Apis::GmailV1::Message.new(raw:encodedMessage)
 类似资料:
  • 我试图通过节点邮件发送电子邮件,但无法发送电子邮件,并显示以下错误。 我使用的是nodemailer文档中所示的确切代码。 这是我正在使用的服务器端代码。 这在几天前运行良好,在其他邮件客户端和gmail上也运行良好,因此我认为这个问题可能与gmail帐户的任何安全设置有关。

  • 我正在尝试编写一个脚本,使用gmail API将邮件从我的收件箱转发给新的收件人。 我发送的消息相当大(很多附件),所以这个过程(下载一个巨大的base64字符串,解码它,做一些regex替换,重新编码,然后重新上传)将花费很长时间。使用regex来操作MIME电子邮件消息似乎也非常麻烦。 看来应该有更简单的办法...?也许有什么方法可以直接通过API来实现?

  • 我使用的是Simado GDT11调制解调器和丰富的USB到串行端口驱动程序。新连接出现在我的设备管理器中 我使用的是smslib示例中指定的基本类,但总有一些错误表明设备没有响应。由于使用USB端口,我添加了轮询参数,但没有效果。Commtest实用程序可以连接到同一个端口,所以我认为端口号不是问题。 Stacktrace: 代码:

  • 我阅读了关于用户目的地的Spring文档。我想使用方法仅向特定用户发送消息。 这是java代码: 这是客户端js代码: 首先,考虑用户价值是否正确? StampClient.connect("myuser",... 为什么这个测试不起作用?此用户未收到任何消息。如果我将目的地切换到,并将方法更改为,这将起作用,但显然是作为广播,而不仅仅是根据请求发送给特定用户。 我试图设置一个回复单用户与此代码:

  • 我有这个发邮件的密码 此代码为除之外的任何邮件提供商发送邮件。 这可能是什么原因

  • 我的机器人不能发送嵌入或常规文本信息,代码执行,但没有什么是发送在不和谐的通道。我遵循了JDA维基的设置,我不知道我做错了什么。 机器人登录码