You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动