从邮件中的用户名设置

本文关键字:用户 设置 | 更新日期: 2023-09-27 18:06:07

我按照以下模式发送邮件:

public static bool SendPasswordMail(MembershipUser user, Control owner, string password)
{
    var definition = new MailDefinition { BodyFileName = string.Concat(AccountRoot, "password.htm"), IsBodyHtml = true };
    var subject = "Your new password - {0}".FormatWith(ApplicationConfiguration.ApplicationName);
    var data = ExtendedData(DefaultData, subject, user);
    data.Add("<%Password%>", password);
    return definition.CreateMailMessage(user.Email, data, owner).Send(subject);
}
public static bool Send(this MailMessage message, string subject)
{
    try
    {
        using (message)
        {
            message.Subject = subject;
            using (var client = new SmtpClient())
            client.Send(message);
        }
    }
    catch
    {
        return false;
    }
    return true;
}

与其将主题设置为"您的新密码-网站",不如将从用户名设置为"网站",主题设置为"您的新密码"。但是我不知道如何设置用户名。

我的web.config中的smtp元素看起来像这样:

<smtp deliveryMethod="Network" from="noreply@site.com">
     <network host="localhost" port="25" userName="noreply@site.com" password="******" />
</smtp>

从邮件中的用户名设置

看一下MailDefinition。MSDN上的CreateMailMessage方法定义。

它指定第二个参数(一个字典对象,在示例代码中的变量"data")应该包含在电子邮件消息中被替换的字符串。

使用这个对象,你可以添加一个替代的from地址,如下所示:

data.Add("<%From%>", "fromaddress@domain.com");

然而,由于使用SMTP伪造发件人地址的能力,几乎所有的邮件交换器都将使用电子邮件验证系统,如发件人策略框架(SPF),以确保收到的电子邮件是从一个有效的来源发送的。

因此,如果您希望收件人接收您的电子邮件,则不能在from字段中使用任何电子邮件地址。您必须使用与您发送的域名匹配的电子邮件地址。还需要更改DNS以使必要的检查成为可能。

查看此链接:发送方策略框架概述

:

SPF很容易理解。"互联网"使用DNS(域名)系统)来解析域名(以www.msexchange.org为例)转换为IP地址。DNS还用于定向不同的请求电子邮件和网络服务器等服务。对于周围的每个域必须存在MX(邮件交换器)记录。MX记录告诉我们用于接收邮件的目标服务器所在的电子邮件发件人。

SPF正在DNS中发布"反向MX"记录,这告诉邮件发件人哪些机器从域发送邮件。

电子邮件的接收者现在可以检查这些记录以确保电子邮件来自该域的"受信任"发件人。

这些"反向MX"记录可以很容易地在DNS中发布。这需要只需DNS中的一行即可满足所有要求。我会给你一个示例。

SPF在SMTP事务级别上运行,并且需要at最多条信息:

The MAIL FROM:接收邮件的参数。HELO或EHLO发送SMTP服务器的参数(用于mailer - daemon的反弹)发送SMTP的IP地址服务器


编辑

没有办法在创建时将发件人别名(显示名)传递给MailDefinition,我不确定如何将数据添加到字典对象,但以下应该工作(在Send扩展方法中):

message.Subject = subject;
message.From = new MailAddress(message.From.Address, "Display Name");

SendPasswordMail更改为以下内容:

public static bool SendPasswordMail(MembershipUser user, Control owner, string password)
{
    var definition = new MailDefinition { BodyFileName = string.Concat(AccountRoot, "password.htm"), IsBodyHtml = true };
    var subject = "Your new password";
    var data = ExtendedData(DefaultData, subject, ApplicationConfiguration.ApplicationName);
    data.Add("<%Password%>", password);
    return definition.CreateMailMessage(user.Email, data, owner).Send(subject);
}