使用C#通过SMTP发送电子邮件

Sam*_*son 273 c# email smtpclient

我无法理解为什么这段代码不起作用.我收到一条错误消息,指出无法分配属性

MailMessage mail = new MailMessage();
SmtpClient client = new SmtpClient();            
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtp.gmail.com";
mail.To = "user@hotmail.com"; // <-- this one
mail.From = "you@yourcompany.com";
mail.Subject = "this is a test email.";
mail.Body = "this is my test email body";
client.Send(mail);
Run Code Online (Sandbox Code Playgroud)

MRB*_*MRB 361

mail.To并且mail.From只读.将它们移动到构造函数.

using System.Net.Mail;

...

MailMessage mail = new MailMessage("you@yourcompany.com", "user@hotmail.com");
SmtpClient client = new SmtpClient();
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtp.gmail.com";
mail.Subject = "this is a test email.";
mail.Body = "this is my test email body";
client.Send(mail);
Run Code Online (Sandbox Code Playgroud)

  • -1你的代码会起作用,但它们不是只读的 (59认同)
  • 那是因为它是一个集合.你可以调用添加它 (41认同)
  • @Oskar好的,所以我应该更具体一点.您无法将mail.to设置为特定地址.您必须使用构造函数或调用add.我只是解决了第一个编译器警告:错误CS0200:属性或索引器'System.Net.Mail.MailMessage.To'无法分配 - 它是只读的 (17认同)
  • mail.To是readonly,来自不是.public MailAddressCollection To {get; } (9认同)
  • @DougHauf您可以将SmtpClient类与受密码保护的smtp服务器一起使用.你的smtp服务器似乎是一个内部服务器,这意味着你的程序只能在网络上连接到那个smtp服务器.`client.Host ="mail.youroutgoingsmtpserver.com";``client.Credentials = new System.Net.NetworkCredential("yourusername","yourpassword");` (9认同)
  • SmtpClient实现了IDisposable,因此您应该将其更改为:using(SmtpClient client = new SmtpClient()){...} (4认同)
  • 顺便说一下,smtp服务器已改为"smtp.gmail.com" (3认同)
  • 您使用的是什么? (2认同)
  • 请注意`smtp.gmail.com`只接受SSL流量.所以使用端口"587"(TLS)或"465"(SSL). (2认同)

Mit*_*dir 261

这个 :

mail.To = "user@hotmail.com";
Run Code Online (Sandbox Code Playgroud)

应该:

mail.To.Add(new MailAddress("user@hotmail.com"));
Run Code Online (Sandbox Code Playgroud)

  • +1或者你可以在电子邮件的构造函数中发送它们 (7认同)

Sam*_*son 121

终于开始工作:)

using System.Net.Mail;
using System.Text;

...

// Command line argument must the the SMTP host.
SmtpClient client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("user@gmail.com","password");

MailMessage mm = new MailMessage("donotreply@domain.com", "sendtomyemail@domain.co.uk", "test", "test");
mm.BodyEncoding = UTF8Encoding.UTF8;
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

client.Send(mm);
Run Code Online (Sandbox Code Playgroud)

抱歉以前拼写不好

  • 587是安全的smtp. (6认同)
  • 不应该有mm.Dispose()? (5认同)
  • 谢谢!直到今天它仍然有效,但使用outlook.[client.Host ="smtp-mail.outlook.com";] (2认同)

Mny*_*kka 20

public static void SendMail(MailMessage Message)
{
    SmtpClient client = new SmtpClient();
    client.Host = "smtp.googlemail.com";
    client.Port = 587;
    client.UseDefaultCredentials = false;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.Credentials = new NetworkCredential("myemail@gmail.com", "password");
    client.Send(Message); 
}
Run Code Online (Sandbox Code Playgroud)

  • 这根本不能解决OP无法完成对"MailMessage"属性的赋值的原因. (3认同)

小智 17

这就是它对我有用的方式.希望你觉得它有用

MailMessage objeto_mail = new MailMessage();
SmtpClient client = new SmtpClient();
client.Port = 25;
client.Host = "smtp.internal.mycompany.com";
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("user", "Password");
objeto_mail.From = new MailAddress("from@server.com");
objeto_mail.To.Add(new MailAddress("to@server.com"));
objeto_mail.Subject = "Password Recover";
objeto_mail.Body = "Message";
client.Send(objeto_mail);
Run Code Online (Sandbox Code Playgroud)


Sid*_*ted 12

首先转到https://myaccount.google.com/lesssecureapps并将"允许不太安全的应用" 设为true.

然后使用以下代码.以下代码仅在您的电子邮件地址来自gmail时才有效.

static void SendEmail()
    {
        string mailBodyhtml =
            "<p>some text here</p>";
        var msg = new MailMessage("from@gmail.com", "to1@gmail.com", "Hello", mailBodyhtml);
        msg.To.Add("to2@gmail.com");
        msg.IsBodyHtml = true;
        var smtpClient = new SmtpClient("smtp.gmail.com", 587); //**if your from email address is "from@hotmail.com" then host should be "smtp.hotmail.com"**
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new NetworkCredential("from@gmail.com", "password");
        smtpClient.EnableSsl = true;
        smtpClient.Send(msg);
        Console.WriteLine("Email Sent Successfully");
    }
Run Code Online (Sandbox Code Playgroud)


Doo*_*ana 7

如果您希望您的电子邮件和密码不会出现在您的代码中,并希望您的公司电子邮件客户端服务器使用您的Windows凭据,请使用以下内容.

client.Credentials = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)

资源