smptclient:使用保存在成员表中的电子邮件发送邮件
本文关键字:电子邮件 保存 成员 存在 smptclient | 更新日期: 2023-09-27 18:29:27
我正在开发一个功能,用户可以使用asp.net网络应用程序发送邮件。这个想法是使用保存在会员表中的地址发送邮件。根据下面的当前代码,我收到的是使用该地址发送的邮件testUser@gmail.com,但是我想要的是使用存储在成员表中的电子邮件地址发送邮件。提前感谢。
var email = new MailMessage(mailContent.From, mailContent.To, mailContent.Subject, mailContent.Body);
public static SendEmailResult SendEmail(MailMessage message)
{
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
var mailClient = new SmtpClient();
var log = new SendEmailResult() { Message = message };
try
{
mailClient.Send(message);
}
catch (Exception ex)
{
log.Exception = ex;
}
return log;
}
我的网络配置
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network enableSsl="true"
defaultCredentials="false"
host="smtp.gmail.com"
port="587"
userName="testUser@gmail.com"
password="myultrasecretpassword" />
</smtp>
</mailSettings>
</system.net>
幸运的是,我认为不可能仅仅以他人的名义(使用他人的凭据)发送电子邮件。
- 正如@DGibbs所示,您需要知道特定用户的凭据。但是你没有密码
- SMTP协议本身不会阻止您在"发件人"字段中使用任何类型的发件人电子邮件地址,但.NET
SmtpClient
会引发异常(SmtpException
http://msdn.microsoft.com/en-us/library/swas0fwc.aspx) - 实际上,只有当运行的软件(或NetworkCredentials提供的)凭据与发件人地址的用户匹配时,
SmtpClient
才会愿意发送电子邮件 - 如果使用
UseDefaultCredentials
,则凭据(默认凭据)仍应与电子邮件地址的用户匹配,并且应获得授权 - 你可以做的是设置一个邮件帐户,用于自动发送邮件。即使在这种情况下,软件也很有可能以其他用户的名义运行,因此系统管理员必须在邮件服务器中配置该自动邮件帐户,以便允许软件用户以自动帐户的名义发送。如果您愿意,自动邮件的主题或正文可以引用用户名和电子邮件
所有这些都是因为今天有很多机制可以防止垃圾邮件。这个系统甚至阻止你自己做任何不好的事情。从安全角度来看,以任何人的名义发送电子邮件都不是一个好主意,即使业务需求需要这样做
System.Net.Mail
提供了一个非常干净和漂亮的接口和API,但您必须根据自己的需要使用它。我去过那里,做到了。我的意思是同样的情况。
一旦您从Membership表中获得了用户详细信息(这取决于您自己),您就可以在发送之前为SMTP客户端指定一些凭据:
var mailClient = new SmtpClient();
mailClient.Credentials = new System.Net.NetworkCredential("username", "password");
//etc...