2011-08-20 33 views
1

我送下面这个模式的邮件:从邮件中的用户名设置?

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.configsmtp元素看起来是这样的:

<smtp deliveryMethod="Network" from="[email protected]"> 
    <network host="localhost" port="25" userName="[email protected]" password="******" /> 
</smtp> 
+1

无论如何,不​​要返回true/false,而是使用void并在需要时抛出异常 – abatishchev

+1

您不想通过邮件发送密码。这不是必要的和安全风险! – ccellar

回答

4

采取MSDN上看起来的MailDefinition.CreateMailMessage Method定义。

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

使用这个对象,你可以对从地址添加更换,像这样:由于使用SMTP几乎所有的邮件交换伪造发件人地址的能力

data.Add("<%From%>", "[email protected]"); 

但是会使用电子邮件验证系统,如Sender Policy Framework (SPF)以确保收到的电子邮件已从有效来源发送。

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

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

它指出:

SPF是很容易理解。 “互联网”使用DNS(域名 系统)将域名(作为示例www.msexchange.org) 解析为IP地址。 DNS也用于指导不同 服务(如电子邮件和Web服务器)的请求。对于围绕 世界的每个域,MX(邮件交换器)记录必须存在。 MX记录告诉 电子邮件发件人接收邮件的目标服务器位于何处。

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

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

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

SPF工作在SMTP事务的水平,并在 最多三条信息要求:

的MAIL FROM:邮件接收的参数所使用的HELO或EHLO 参数发送SMTP服务器(对梅勒 - 守护进程反弹 其发送空白MAIL FROM)发送SMTP服务器


编辑的IP地址

没有办法将发件人别名(显示名称)传递给创建时的MailDefinition,并且我不确定如何将数据添加到IDictionary对象,但以下内容应该可用(在发送扩展方法中):

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

希望这会有所帮助。

+0

我不想更改邮件地址,我只是想命名它。对于isntance邮件是[email protected],名称是“No Replies” – bevacqua

+0

好的,所以你想改变发件人别名? – jdavies

+0

是的,“显示名称”我不知道这个确切的实际术语。 – bevacqua

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

呃......这不会改变'从'的名称从**没有回复**到**网站** – bevacqua

相关问题