从邮件中的用户名设置?

时间:2011-08-20 17:17:49

标签: c# .net email

我按照这种模式发送邮件:

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;
}

我不是将主题设置为“您的新密码 - 网站”,而是将“从用户名”设置为“网站”,而将主题设置为“您的新密码”。但我无法弄清楚如何设置来自用户名。

smtp中的web.config元素如下所示:

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

2 个答案:

答案 0 :(得分:4)

查看MSDN上的MailDefinition.CreateMailMessage Method定义。

它指定第二个参数(IDictionary对象,示例代码中的变量“data”)应包含在电子邮件中替换的字符串。

使用此对象,您可以添加from地址的替换,如下所示:

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

然而,由于能够使用SMTP伪造发件人地址,几乎所有邮件交换者都将使用电子邮件验证系统(例如Sender Policy Framework (SPF))来确保收到的电子邮件是从有效来源发送的。

因此,如果您希望收件人收到您的电子邮件,则无法在“发件人”字段中使用任何电子邮件地址。您必须使用与您发送的域匹配的电子邮件地址。还需要DNS更改才能进行必要的检查。

结帐此链接:An Overview of the Sender Policy Framework

它声明:

  

SPF很容易理解。 “Internet”使用DNS(域名   系统)解析域名(例如www.msexchange.org)   到IP地址。 DNS还用于指导不同的请求   电子邮件和Web服务器等服务。对于周围的每个域   世界必须存在MX(邮件交换器)记录。一条MX记录告诉了   用于接收邮件的目标服务器所在的电子邮件发件人。

     

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

     

电子邮件的收件人现在可以检查这些记录以确保这一点   电子邮件来自此域中的“受信任”发件人。

     

这些“反向MX”记录可以在DNS中轻松发布。它需要   DNS中只有一行可以满足所有要求。我会给你一个   本文后面的例子。

     

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

     

传入邮件的MAIL FROM:参数HELO或EHLO   发送SMTP服务器的参数(用于Mailer-Deamon跳出   发送空白MAIL FROM)发送SMTP的IP地址   服务器


修改

在创建时无法将发件人别名(显示名称)传递给MailDefinition,我不知道如何将数据添加到IDictionary对象,但以下内容应该有效(在发送扩展方法中):

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

希望这有帮助。

答案 1 :(得分:0)

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);
}