Gmail API .NET:获取完整消息
Gmail API .NET: Get full message
如何使用 gmail 获取完整邮件而不仅仅是元数据 api?
我有一个服务帐户,我可以检索消息,但只能以元数据、原始格式和最小格式检索消息。如何以完整格式检索完整消息?以下代码工作正常
var request = service.Users.Messages.Get(userId, messageId);
request.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;
Message message = request.Execute();
但是,当我省略格式(因此我使用默认格式 FULL)或将格式更改为 UsersResource.MessagesResource.GetRequest.FormatEnum.Full
我收到错误:Metadata scope doesn't allow format FULL
我已经包含了以下范围:
https://www.googleapis.com/auth/gmail.readonly,
https://www.googleapis.com/auth/gmail.metadata,
https://www.googleapis.com/auth/gmail.modify,
https://mail.google.com/
如何获取完整消息?
来自 的用户有同样的错误。
先试试这个。
- 转到https://security.google.com/settings/security/permissions
- 选择您正在使用的应用程序。
- 单击“删除”>“确定”
- 下次,只需准确请求您需要的权限即可。
另一件事,尝试使用 gmailMessage.payload.parts[0].body.data
并将其解码为可读文本,从 SO post:
执行以下操作
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(gmailMessage.payload.parts[0].body.data)));
您还可以检查 以供进一步参考。
尝试这样的事情
public String getMessage(string user_id, string message_id)
{
Message temp =service.Users.Messages.Get(user_id,message_id).Execute();
var parts = temp.Payload.Parts;
string s = "";
foreach (var part in parts) {
byte[] data = FromBase64ForUrlString(part.Body.Data);
s += Encoding.UTF8.GetString(data);
}
return s
}
public static byte[] FromBase64ForUrlString(string base64ForUrlInput)
{
int padChars = (base64ForUrlInput.Length % 4) == 0 ? 0 : (4 - (base64ForUrlInput.Length % 4));
StringBuilder result = new StringBuilder(base64ForUrlInput, base64ForUrlInput.Length + padChars);
result.Append(String.Empty.PadRight(padChars, '='));
result.Replace('-', '+');
result.Replace('_', '/');
return Convert.FromBase64String(result.ToString());
}
我必须删除元数据的范围才能获得完整的消息格式。
如何使用 gmail 获取完整邮件而不仅仅是元数据 api?
我有一个服务帐户,我可以检索消息,但只能以元数据、原始格式和最小格式检索消息。如何以完整格式检索完整消息?以下代码工作正常
var request = service.Users.Messages.Get(userId, messageId);
request.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;
Message message = request.Execute();
但是,当我省略格式(因此我使用默认格式 FULL)或将格式更改为 UsersResource.MessagesResource.GetRequest.FormatEnum.Full
我收到错误:Metadata scope doesn't allow format FULL
我已经包含了以下范围:
https://www.googleapis.com/auth/gmail.readonly,
https://www.googleapis.com/auth/gmail.metadata,
https://www.googleapis.com/auth/gmail.modify,
https://mail.google.com/
如何获取完整消息?
来自
先试试这个。
- 转到https://security.google.com/settings/security/permissions
- 选择您正在使用的应用程序。
- 单击“删除”>“确定”
- 下次,只需准确请求您需要的权限即可。
另一件事,尝试使用 gmailMessage.payload.parts[0].body.data
并将其解码为可读文本,从 SO post:
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(gmailMessage.payload.parts[0].body.data)));
您还可以检查
尝试这样的事情
public String getMessage(string user_id, string message_id)
{
Message temp =service.Users.Messages.Get(user_id,message_id).Execute();
var parts = temp.Payload.Parts;
string s = "";
foreach (var part in parts) {
byte[] data = FromBase64ForUrlString(part.Body.Data);
s += Encoding.UTF8.GetString(data);
}
return s
}
public static byte[] FromBase64ForUrlString(string base64ForUrlInput)
{
int padChars = (base64ForUrlInput.Length % 4) == 0 ? 0 : (4 - (base64ForUrlInput.Length % 4));
StringBuilder result = new StringBuilder(base64ForUrlInput, base64ForUrlInput.Length + padChars);
result.Append(String.Empty.PadRight(padChars, '='));
result.Replace('-', '+');
result.Replace('_', '/');
return Convert.FromBase64String(result.ToString());
}
我必须删除元数据的范围才能获得完整的消息格式。