为何Gmail API对部分用户会忽略设置的From字段值?
Gmail API发送邮件From字段失效问题解决
核心发送代码
public class SendMail { public void Send() { var stream = new StringWriter(); stream.NewLine = "\r\n"; stream.WriteLine($"From:{_from}"); if (_to.Any()) stream.WriteLine($"To:{_to.ToCSV()}"); if (_cc.Any()) stream.WriteLine($"Cc:{_cc.ToCSV()}"); if (_bcc.Any()) stream.WriteLine($"Bcc:{_bcc.ToCSV()}"); stream.WriteLine($"Subject:{_subject}"); stream.WriteLine($"Reply-to:{_replyTo}"); stream.WriteLine($"Domain:{User.Domain}"); stream.WriteLine($"Content-type:text/html;charset=UTF-8"); stream.WriteLine($"Company:Knowledge and Technology Joyfully Engaged"); stream.WriteLine(""); stream.WriteLine($"{_body}"); stream.WriteLine(""); stream.WriteLine("With kind regards,<br />"); stream.WriteLine($"<a href=\"mailto:{User.Email}\">{User.DisplayName}</a>, {User.Occupations.Last()}<br />"); foreach (var org in User.Companies.Where(c => !string.IsNullOrWhiteSpace(c.Domain))) { stream.WriteLine($"<a href=\"https://www.{org.Domain}\">{org.Name}</a><br />"); } var msg = stream.ToString(); string message = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(msg)); try { User.GMail.Users.Messages.Send(new Message { Raw = message, }, "me").Execute(); Console.WriteLine($"User {User.DisplayName} with subject {_subject} sent."); Console.WriteLine($"{msg.Split("\r\n\r\n").First()}"); } catch (Exception ex) { Console.WriteLine($"User {User.DisplayName} with subject {_subject} results in error {ex.Message} with these headers:"); Console.WriteLine($"{msg.Split("\r\n\r\n").First()}\r\n"); } } // More stuff, but boring... }
问题现象
这是一款内部应用,通过User.GMail.Users.Messages.Send(new Message { Raw = message, }, "me").Execute();为已认证用户发送每日更新邮件,整体运行正常。但部分用户遇到问题:设置的From字段被忽略,期望显示「显示名称 alias@example.com」,实际却显示为「domain@example.com」。
原因及解决方法
排查后确认,问题根源是这些用户未在自己的Gmail账户中添加对应发件地址作为别名。只需在用户的Gmail账户中创建该地址的别名,即可让From字段正常显示预期内容。
内容的提问来源于stack exchange,提问作者Wim ten Brink
相关产品推荐
相关产品推荐

