如何使用Microsoft Graph从Azure Active Directory中的任意邮箱发送邮件(含“Send As”功能代码实现)
实现Microsoft Graph代发(Send As)邮件的解决方案
嘿,我来帮你搞定这个代发邮件的需求!你现有的代码是创建当前用户的邮件草稿,要实现从任意Azure AD邮箱代发,需要做两个关键修改,我一步步给你说:
1. 替换“当前用户”为目标邮箱
原来的graphClient.Me只能操作授权用户自己的邮箱,要指定其他邮箱,直接把Me换成目标邮箱的用户主体名称(UPN)或者用户ID就行,比如graphClient.Users["target-user@yourdomain.com"]。
2. 使用正确的发送邮件方法
你之前的Messages.AddAsync是创建草稿,不是直接发送邮件。要发送邮件(包括代发),得用SendMail方法,它会直接触发邮件发送,还能控制是否保存到代发邮箱的发件箱。
完整代码示例
下面是修改后的完整代码,你可以直接套用:
// 首先构造要发送的邮件内容 var message = new Message { Subject = "你的邮件主题", Body = new ItemBody { ContentType = BodyType.Html, Content = "<p>这里是邮件的HTML内容,也可以用PlainText类型</p>" }, ToRecipients = new List<Recipient> { new Recipient { EmailAddress = new EmailAddress { Address = "recipient@target-domain.com" } } }, // 可选:添加抄送/密送 CcRecipients = new List<Recipient> { new Recipient { EmailAddress = new EmailAddress { Address = "cc-recipient@domain.com" } } } }; // 构造发送请求的参数,SaveToSentItems控制是否保存到发件箱 var sendMailParams = new SendMailPostRequestBody { Message = message, SaveToSentItems = true // 设为false则不保存,根据需求调整 }; // 替换这里的"target-mailbox@yourdomain.com"为你要代发的邮箱UPN或用户ID await graphClient.Users["target-mailbox@yourdomain.com"] .SendMail(sendMailParams) .Request() .PostAsync();
权限相关的注意事项
因为你已经拿到了管理员同意的Mail.Send权限,这里要分两种情况确认:
- 如果是应用权限(Application Permission):这个代码直接就能用,应用权限的
Mail.Send允许你以任何Azure AD用户的身份发送邮件,天然支持Send As功能。注意这种情况要使用客户端凭据流(Client Credentials Flow)获取访问令牌,不能用授权码流。 - 如果是委托权限(Delegated Permission):除了
Mail.Send,还需要确保当前授权用户对目标邮箱有Azure AD层面的Send As权限(管理员需要在Azure AD的用户设置里给当前用户配置这个权限)。
最后再给你提个醒:测试的时候可以先找一个测试邮箱试手,确保权限配置和代码逻辑都没问题再正式使用哦!
内容的提问来源于stack exchange,提问作者Jashvita




