在C#中使用无密码的SMTP发送电子邮件

我有一个使用ASP.net和C#的Web应用程序,一步到位需要用户向附带附件的人发送电子邮件。 我的问题是当用户发送电子邮件时我不想每次用户发送时都输入密码。 我想发送一封没有发件人密码的电子邮件。 使用SMTP的任何方式吗? 这是我的代码“不是全部”的样本。 当我输入密码时,代码工作正常,但没有它,它不起作用,我需要一种方法来发送电子邮件,而不是输入密码,但同时使用smtp协议。

private void button1_Click(object sender, EventArgs e) { string smtpAddress = "smtp.office365.com"; int portNumber = 587; bool enableSSL = true; string emailFrom = "my email"; string password = "******"; string emailTo = "receiver mail"; string subject = "Hello"; string body = "Hello, I'm just writing this to say Hi!"; using (MailMessage mail = new MailMessage()) { mail.From = new MailAddress(emailFrom); mail.To.Add(emailTo); mail.Subject = subject; mail.Body = body; mail.IsBodyHtml = true; // Can set to false, if you are sending pure text. // mail.Attachments.Add(new Attachment("C:\\SomeFile.txt")); // mail.Attachments.Add(new Attachment("C:\\SomeZip.zip")); using (SmtpClient smtp = new SmtpClient(smtpAddress,portNumber)) { smtp.UseDefaultCredentials = true; smtp.Credentials = new NetworkCredential(emailFrom, password); smtp.EnableSsl = enableSSL; smtp.Send(mail); } MessageBox.Show("message sent"); } } 

我相信这可以轻松完成,但有一些限制。

查看有关在配置文件中配置SMTP的MSDN文章 。

如果您的SMTP服务器允许,您的电子邮件对象的地址可能不需要与用于连接SMTP服务器的凭据相同。

因此,设置电子邮件对象的发件人地址,如下所示:

 mail.From = new MailAddress(emailFrom); 

但是,配置smtp连接有两种方法:

  1. 将您的应用设置为在有权访问SMTP服务器的帐户下运行
  2. 在配置中包含SMTP服务器的凭据, 如下所示 。

然后,做这样的事情:

 using (SmtpClient smtp = new SmtpClient()) { smtp.Send(mail); } 

让配置文件处理为您设置SMTP。 这也很棒,因为如果切换服务器,则无需更改任何代码。

请记住要小心配置文件中的任何敏感设置! (AKA,不要将它们检入公共github回购)