I\'m trying to perform a simple Reply to email with Gmail API.
I\'m receiving the following error:
Google.GoogleApiException: \'Google.Apis.Re
Note that Users.messages: send method supports an /upload URI and accepts uploaded media with the following characteristics:
Also, you may want to check details given in Sending Email,
Emails are sent as base64url encoded strings within the
raw
property of a message resource. The high-level workflow to send an email is to:
- Create the email content in some convenient way and encode it as a base64url string.
- Create a new message resource and set its
raw
property to the base64url string you just created.- Call
messages.send
, or, if sending a draft,drafts.send
to send the message.
With these, try adding the raw
parameter in your request body with value set to a base64 encoded email.
Just for additional insights (as these are not C# related), see these related SO posts
You could resort to using third party MIME library with below steps:
Have a look at this solution on SO https://stackoverflow.com/a/26599752/2637802
Using the MimeKit library heres sample code:
var msgRequest = service.Users.Messages.Get("me", msg.Id);
msgRequest.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
var msgDetails = msgRequest.Execute();
using (MemoryStream rawInStream = new MemoryStream(Base64FUrlDecode(msgDetails.Raw)))
using (MemoryStream rawOutStream = new MemoryStream())
{
var message = MimeKit.MimeMessage.Load(rawInStream);
message.To.Clear();
message.To.Add(new MimeKit.MailboxAddress("", "<email address>"));
message.Subject = "Edited Subject";
message.WriteTo(rawOutStream);
msgDetails.Raw = Base64UrlEncode(rawOutStream.ToArray());
}
service.Users.Messages.Send(msgDetails, "me").Execute();
private static byte[] Base64FUrlDecode(string input)
{
int padChars = (input.Length % 4) == 0 ? 0 : (4 - (input.Length % 4));
StringBuilder result = new StringBuilder(input, input.Length + padChars);
result.Append(String.Empty.PadRight(padChars, '='));
result.Replace('-', '+');
result.Replace('_', '/');
return Convert.FromBase64String(result.ToString());
}
private static string Base64UrlEncode(byte[] input)
{
// Special "url-safe" base64 encode.
return Convert.ToBase64String(input)
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
}