smtpclient:使用保存在会员表中的电子邮件发送邮件

时间:2013-08-29 16:06:29

标签: c# .net

我正在使用一个功能,用户可以使用asp.net webApp发送邮件。这个想法是使用保存在其成员资格表中的地址发送邮件。使用当前代码,我收到的是使用地址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>

2 个答案:

答案 0 :(得分:1)

幸运的是,我认为不可能以别人的名义发送电子邮件(使用其他人的凭据)。

  1. 正如@DGibbs所示,您需要知道特定用户的凭据。但是你没有密码。
  2. 单独的SMTP协议不会阻止您在“发件人”字段中使用任何类型的发件人电子邮件地址,但.NET SmtpClient将引发异常(SmtpException {{ 3}})。
  3. 如果正在运行的软件(或由NetworkCredentials提供)凭据与来自地址的用户匹配,SmtpClient实际上只愿意发送电子邮件。
  4. 如果您使用UseDefaultCredentials,凭据(默认凭据)仍应与电子邮件地址的用户匹配,并且应获得授权。
  5. 您可以做的是为自动邮件设置邮件帐户。即使在这种情况下,软件很有可能以其他用户的名义运行,因此系统管理员必须在邮件服务器中配置该自动邮件帐户,以便它愿意让软件的用户以名义发送自动帐户。如果您愿意,自动邮件的主题或正文可以引用用户的姓名和电子邮件。
  6. 所有这一切都是因为今天存在许多防止垃圾邮件的机制。该系统甚至可以让你自己做任何不是一个好主意的事情。即使业务要求需要,从安全的角度发送电子邮件也不是一个好主意。

    System.Net.Mail提供了一个非常干净和漂亮的界面和API,但你必须解决你想要的用法。我去过那里,做到了。我的意思是同样的情况。

答案 1 :(得分:0)

从“成员资格”表中获取用户详细信息后(您可以执行此操作),您可以在发送之前为SMTP客户端指定一些凭据:

var mailClient = new SmtpClient();
mailClient.Credentials = new System.Net.NetworkCredential("username", "password");
//etc...