1
var response = gmailClient->readMessage(userId,msg_id);
gmail:Message msg;
match response {
    gmail:Message m => msg = m;
    gmail:GmailError err=> io:println(err);
}
gmail:MessageBodyPart msg_body = msg["plainTextBodyPart"];
string msg_content = msg["raw"];

当我在ballerina/Gmail包的消息资源中使用'plainTextBodyPart'属性时,它会正确返回消息正文。但是如果我使用与上述相同资源的'raw'属性,它会返回一个空值。错误是什么我的代码?

4

1 回答 1

3

Ballerina GmailConnector[1] 的 readMessage() 函数接受 4 个参数,其中 2 个是可选的。formatmetadataHeaders参数是可选的。您也可以参考 Gmail API 文档 [2]。

在您的情况下,由于您没有为format传递任何值,因此您的 readMessage 请求将具有默认格式,即“FORMAT_FULL” [3]。API 文档[1] 中也对此进行了说明。因此,您从 Gmail API 获得的响应将没有“原始”字段,并且连接器的消息资源的“原始”字符串字段将为空 [4]。因此,当您尝试将其作为msg["raw"]访问时,您会得到一个空字符串。

您得到的是空字符串还是空值?因为理想情况下它应该为您的代码返回一个空字符串,并且当我尝试相同的代码时,我得到了一个空字符串作为“原始”字段的预期。

如果您想使用“raw”字段以 RFC 2822 格式和 base64url 编码的字符串获取整个电子邮件,请通过提供格式为FORMAT_RAW来调用 readMessage 函数,如下所示,

var response = gmailEP->readMessage(userId, messageId, format = gmail:FORMAT_RAW);

让我知道这是否对您有帮助。

[1] https://central.ballerina.io/wso2/gmail

[2] https://developers.google.com/gmail/api/v1/reference/users/messages/get

[3] https://github.com/wso2-ballerina/package-gmail/blob/master/gmail/gmail_connector.bal#L75

[4] https://github.com/wso2-ballerina/package-gmail/blob/master/gmail/gmail_data_mappings.bal#L40

于 2018-07-07T19:03:24.283 回答