使用MailKit设置返回路径

问题描述

我遇到了以下线程Sending Email with return-path not functioning,该线程如何设置发件人和返回路径。 我正在使用Mailkit,这就是我尝试的方法

var mailMessage = new MimeMessage();
mailMessage.From.Add(new MailBoxAddress("firstname lastname","[email protected]"));
mailMessage.Sender = new MailBoxAddress("firstname lastname","[email protected]");
mailMessage.To.Add(new MailBoxAddress("firstname lastname","[email protected]"));
mailMessage.Subject = "Hello there!";
mailMessage.Body = new TextPart("plain")
{
    Text = "test email!"
};

using (var smtpClient = new SmtpClient())
{
    smtpClient.Connect("smtp.gmail.com",587);
    smtpClient.Authenticate("[email protected]","password");
    smtpClient.Send(mailMessage);
    smtpClient.disconnect(true);
}

但是它不起作用。我正在使用Blazor服务器端。 返回路径不会更改返回路径:[email protected] 。关于如何设置它的任何想法,我也欢迎其他.net框架。

感谢您的帮助

编辑: 非常感谢@jstedfast的参与,并抽出宝贵的时间来提供帮助。

我要实现的目标是检测未送达的收据或退回邮件一个解决方案(我发现的)是重写“ Return-Path”。根据 简单邮件传输协议 Page 51 RF 源自消息的SMTP系统不应发送以下消息: 已经包含一个Return-path标头。 SMTP服务器执行 中继功能不得检查消息数据,尤其是不能 以确定是否存在Return-path标头的程度。 最终交付的SMTP服务器可以删除返回路径标头 在添加自己的内容之前。

我尝试添加到页眉(并在位置0处插入),所有操作都添加了第三个“ Return-Path”,但没有覆盖原来的2,这导致了预期的工作。

我找到了另一个解决方案,但我不知道如何实现:

  • 返回路径的主要目的是将地址指定为 哪些消息指示未送达或其他邮件系统故障 将被发送。为了做到这一点,只有一条返回路径 传递消息时应存在。 使用RFC的系统 带有非SMTP传输的822语法应明确指定 与运输信封相关的地址,该地址错误 报告(例如,未送达的邮件)应发送。*

Variable envelope return path (VERP)用于启用自动检测和删除无法传递的电子邮件地址。通过为邮件的每个收件人使用不同的返回路径(也称为“信封发件人”)来工作。

解决方法

现在,我更好地理解了您的问题(由于对此答案进行了后续评论),听起来您正在尝试替换(?)Return-Path:中现有的MimeMessage标头,然后然后再次发送它以查看SMTP服务器是否注意到Return-Path:标头并决定不传递它?

如果是这样,则为了将Return-Path:标头插入标头块的顶部,您需要执行以下操作:

mailMessage.Headers.Insert (0,"Return-Path","value");

如果要替换现有的Return-Path:标头,则可以使用Replace()方法,但要警告如果Return-Path:标头不存在,则会添加它到标头块的 end ,而不是其开头。

现在您知道如何设置(或替换)Return-Path:标头,其余的问题将处理page 51 of rfc2821。我不确定您是否期望MailKit的SmtpClient.Send()方法是否基于Return-Path:标头的存在而拒绝该消息,但我认为不应该。我还可以确认(作为MailKit的作者),它当前不拒绝此类消息。这取决于SMTP服务器和/或使用MailKit进行决定的应用程序。