You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:27:04