C#调用Google Email API报400错误:提示需提供收件人地址怎么解决?
问题根因
你遇到的Recipient address required报错是升级类库后MimeKit的使用方式不对导致生成的MIME邮件内容不完整:
- MimeKit的
MimeMessage.ToString()默认仅输出邮件头摘要,不会输出完整的MIME报文,导致最终编码后的Raw字段缺少收件人、发件人等必要信息,Gmail接口无法识别。部分旧版MimeKit的ToString()实现会输出完整内容,这也是升级类库后才出现报错的核心原因。
修正方案
替换MIME内容的获取方式,改用WriteTo方法输出完整报文:
using Message = Google.Apis.Gmail.v1.Data.Message; using System.IO; public bool SendTestEmail(string From, string Subject, string Body) { try { MailMessage mail = new MailMessage(); mail.Subject = Subject; mail.Body = Body; mail.From = new MailAddress(From); mail.IsBodyHtml = false; mail.To.Add(new MailAddress(From)); MimeKit.MimeMessage mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(mail); // 修正:通过流输出完整MIME报文内容 using var memoryStream = new MemoryStream(); mimeMessage.WriteTo(memoryStream); var mimeBytes = memoryStream.ToArray(); Message message = new Message(); message.Raw = Base64UrlEncode(mimeBytes); var result = m_Service.Users.Messages.Send(message, "me").Execute(); } catch (Exception ex) { SimpleLog.Log(ex); return false; } return true; } // 同步修改Base64编码方法,直接接收字节数组避免二次编码错误 private string Base64UrlEncode(byte[] inputBytes) { return Convert.ToBase64String(inputBytes) .Replace('+', '-') .Replace('/', '_') .Replace("=", ""); }
额外校验点
如果修改后仍报错,可以按以下步骤排查:
- 确认传入的
From参数是有效的完整邮箱地址,包含@后缀 - 可以临时输出解码后的Raw字段内容,检查是否存在To、From等标准邮件头
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

