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

时间:2017-03-16 21:25:25

标签: c# email 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");
}
} 

1 个答案:

答案 0 :(得分:2)

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

查看MSDN article on configuring SMTP in your config file

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

因此,请按原样设置电子邮件对象的发件人地址:

mail.From = new MailAddress(emailFrom);

但是,请使用以下两种方法之一配置smtp连接:

  1. 将您的应用设置为在有权访问SMTP服务器的帐户下运行
  2. 在配置中包含SMTP服务器的凭据like this
  3. 然后,做这样的事情:

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

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

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