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

如何在ASP.NET C#中通过Microsoft Graph API设置退信接收地址

在ASP.NET C#中通过Microsoft Graph API设置退信接收地址

问题描述

在ASP.NET C#中使用Microsoft Graph API发送邮件时,希望将发送失败/被退回的邮件投递到指定邮箱,而非默认的发件人地址。此前已通过Chilkat实现该功能(设置mail.BounceAddress="bouncemail@email.com"),但在当前的Microsoft Graph API代码中找不到对应设置项,需了解如何添加类似的退信地址配置。


使用Chilkat实现的代码

Chilkat.Email mail = new Chilkat.Email();
mail.From = "abcdef@email.com";
mail.AddTo("", "abc@email.com");
mail.BounceAddress = "bouncemail@email.com";
mail.Subject = "Test Mail";
mail.Body = "This is a Test Message";
MailMan mman = new MailMan();
mman.SmtpHost = "smtp.office365.com";
mman.SmtpPort = 587;
mman.SmtpUsername = "abcdef@email.com";
mman.SmtpPassword = "******";
bool mailSend = mman.SendEmail(mail);
if (mailSend == true)
    Console.WriteLine("Message Sent Succesfully");
else
    Console.WriteLine(mman.LastErrorText.ToString());

当前使用的Microsoft Graph API代码

ClientSecretCredential credential = new(tenantId, clientId, clientSecret);
GraphServiceClient graphClient = new(credential);
var requestBody = new SendMailPostRequestBody
{
    Message = new Message
    {
        Subject = MailSubject,
        Body = new ItemBody
        {
            ContentType = BodyType.Text,
            Content = MailContent,
        },
        From = new Recipient { EmailAddress = new EmailAddress { Address = FromMailID } },
        ToRecipients = new List<Recipient>
            {
            new Recipient
            {
                EmailAddress = new EmailAddress
                {
                    Address = ToMailID,
                },
            },
            },
    },
    SaveToSentItems = true                    
};
await GraphClient.Me.SendMail.PostAsync(requestBody);
Console.WriteLine("Mail Sent Successfully");

解决方案

要实现类似Chilkat的退信地址指定功能,只需在Graph API的Message对象中添加自定义SMTP头Errors-To,该头是标准的退信接收地址指定字段,会告诉邮件服务器将投递失败的退信发送到指定邮箱,而非默认的发件人地址。

修改后的Microsoft Graph API代码如下:

ClientSecretCredential credential = new(tenantId, clientId, clientSecret);
GraphServiceClient graphClient = new(credential);
var requestBody = new SendMailPostRequestBody
{
    Message = new Message
    {
        Subject = MailSubject,
        Body = new ItemBody
        {
            ContentType = BodyType.Text,
            Content = MailContent,
        },
        From = new Recipient { EmailAddress = new EmailAddress { Address = FromMailID } },
        ToRecipients = new List<Recipient>
            {
            new Recipient
            {
                EmailAddress = new EmailAddress
                {
                    Address = ToMailID,
                },
            },
            },
        // 添加退信地址的自定义邮件头
        Headers = new Dictionary<string, string>
        {
            { "Errors-To", "bouncemail@email.com" }
        }
    },
    SaveToSentItems = true                    
};
await GraphClient.Me.SendMail.PostAsync(requestBody);
Console.WriteLine("Mail Sent Successfully");

补充说明:部分邮件系统也支持Return-Path头,但该头通常由发送邮件服务器最终控制和覆盖,因此使用Errors-To是更可靠的方式。

内容的提问来源于stack exchange,提问作者Pradeep VK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:59