如何在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
相关产品推荐
相关产品推荐

