C# smptclient:使用成员资格表中保存的电子邮件发送邮件

C# smptclient:使用成员资格表中保存的电子邮件发送邮件,c#,.net,C#,.net,我正在使用一项功能,用户可以使用asp.net webApp发送邮件。其想法是使用保存在成员表中的地址发送邮件。使用下面的当前代码,我得到的是使用该地址发送的邮件testUser@gmail.com,但我想要的是使用成员表中存储的电子邮件地址发送邮件。 先谢谢你 var email = new MailMessage(mailContent.From, mailContent.To, mailContent.Subject, mailContent.Body); public st

我正在使用一项功能,用户可以使用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>

一旦您从成员资格表中获得了用户详细信息(这由您自己决定),您可以在发送之前为SMTP客户端指定一些凭据:

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

从成员资格表中获得用户详细信息后(由您自己决定),您可以在发送之前为SMTP客户端指定一些凭据:

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

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

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


    System.Net.Mail
    提供了一个非常干净、漂亮的界面和API,但您必须根据自己的需要解决使用问题。我去过那里,做过那件事。我的意思是同样的情况。

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

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


    System.Net.Mail
    提供了一个非常干净、漂亮的界面和API,但您必须根据自己的需要解决使用问题。我去过那里,做过那件事。我是说同样的情况。

    请不要只是要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获得一篇您确实需要阅读的优秀文章。这不是一篇修复文章,但请看以下内容:@JohnSaunders感谢您的良好反馈,帮助您改进问题。顺便说一句,我不同意你在这个问题上的努力。你没有试图设置地址。请不要只是要求我们为你解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获得一篇您确实需要阅读的优秀文章。这不是一篇修复文章,但请看以下内容:@JohnSaunders感谢您的良好反馈,帮助您改进问题。顺便说一句,我不同意你在这个问题上的努力。你没有试图设置地址。是的。。。嗯,我能理解唯一可行的方法是知道用户的用户名和密码。。。在某种程度上,我相信我可以使用任何电子邮件地址创建邮件…是的。。。嗯,我能理解唯一可行的方法是知道用户的用户名和密码。。。在某种程度上,我相信我可以使用任何电子邮件地址创建邮件…谢谢你的说教性解释!:)很清楚!:)我将在邮件正文中添加正确的电子邮件地址。再次感谢。我必须补充一点,我所描述的经历来自于一个经典的Windows域控制的ActiveDirectory环境,具有