我按照这种模式发送邮件:
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>
答案 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);
}