C# 为什么我会得到';无法分配属性";发送SMTP电子邮件时?
我不明白为什么这个代码不起作用。我收到一个错误,说明无法分配属性C# 为什么我会得到';无法分配属性";发送SMTP电子邮件时?,c#,email,smtpclient,C#,Email,Smtpclient,我不明白为什么这个代码不起作用。我收到一个错误,说明无法分配属性 MailMessage mail = new MailMessage(); SmtpClient client = new SmtpClient(); client.Port = 25; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.Host = "smtp.g
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);
MailMessage mail=newmailmessage();
SmtpClient=新的SmtpClient();
客户端端口=25;
client.DeliveryMethod=SmtpDeliveryMethod.Network;
client.UseDefaultCredentials=false;
client.Host=“smtp.gmail.com”;
mail.To=”user@hotmail.com"; // 这:
mail.To = "user@hotmail.com";
应该是:
mail.To.Add(new MailAddress("user@hotmail.com"));
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);
终于开始工作了:)
很抱歉之前拼写不好我就是这样写的。希望你觉得有用
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);
}
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);
如果您希望您的电子邮件和密码不显示在代码中,并且希望您的公司电子邮件客户端服务器使用下面使用的windows凭据,请查看更多详细信息
client.Credentials = CredentialCache.DefaultNetworkCredentials;
使用发件人和收件人的电子邮件地址初始化邮件。应该是这样的
string from = "codeforwin@gmail.com"; //Senders email
string to = "reciever@gmail.com"; //Receiver's email
MailMessage msg = new MailMessage(from, to);
阅读的完整代码片段,这样也可以
string your_id = "your_id@gmail.com";
string your_password = "password";
try
{
SmtpClient client = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new System.Net.NetworkCredential(your_id, your_password),
Timeout = 10000,
};
MailMessage mm = new MailMessage(your_iD, "recepient@gmail.com", "subject", "body");
client.Send(mm);
Console.WriteLine("Email Sent");
}
catch (Exception e)
{
Console.WriteLine("Could not end email\n\n"+e.ToString());
}
查看视频:
//希望你觉得它有用,它包含的东西太多了
字符串smtpAddress=“smtp.xyz.com”;
int端口号=587;
bool enablesl=true;
字符串m_userName=”support@xyz.com";
字符串m_UserpassWord=“56436578”;
公共无效发送电子邮件(客户_客户)
{
字符串emailID=gghdgfh@gmail.com;
字符串userName=DemoUser;
字符串emailFrom=”qwerty@gmail.com";
字符串密码=“qwerty”;
字符串emailTo=emailID;
//你们可以把邮件的主题放在这里
string subject=“注册”;
//正文
字符串体=”;
正文+=“Aspen报告工具”;
正文+=“
”;
正文+=“亲爱的”+用户名+“,”;
正文+=“
”;
身体+=“”;
body+=“感谢您的注册”;
正文+=“完成注册过程””;
正文+=“
”;
body+=“谢谢”;
正文+=“
”;
身体+=“团队”;
正文+=”;
//这是使用System.Net.Mail和System.Net完成的;
使用(MailMessage mail=newmailmessage())
{
mail.From=新邮件地址(emailFrom);
mail.To.Add(emailTo);
mail.Subject=主题;
mail.Body=Body;
mail.IsBodyHtml=true;
//如果发送纯文本,则可以设置为false。
使用(SmtpClient smtp=新SmtpClient(smtpAddress,端口号))
{
smtp.Credentials=新的网络凭据(emailFrom,密码);
smtp.EnableSsl=启用SSL;
smtp.发送(邮件);
}
}
}
只需尝试一下:
string smtpAddress = "smtp.gmail.com";
int portNumber = 587;
bool enableSSL = true;
string emailFrom = "companyemail";
string password = "password";
string emailTo = "Your email";
string subject = "Hello!";
string body = "Hello, Mr.";
MailMessage mail = new MailMessage();
mail.From = new MailAddress(emailFrom);
mail.To.Add(emailTo);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
{
smtp.Credentials = new NetworkCredential(emailFrom, password);
smtp.EnableSsl = enableSSL;
smtp.Send(mail);
}
首先转到并使“允许较不安全的应用程序”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");
}
static void sendmail()
{
字符串mailBodyhtml=
“这里有一些文字”;
var msg=新邮件消息(“from@gmail.com", "to1@gmail.com“,”你好“,mailBodyhtml);
msg.To.Add(“to2@gmail.com");
msg.IsBodyHtml=true;
var smtpClient=new smtpClient(“smtp.gmail.com”,587);//**如果您的发件人电子邮件地址为“from@hotmail.com那么主机应该是“smtp.hotmail.com”**
smtpClient.UseDefaultCredentials=true;
smtpClient.Credentials=新的网络凭据(“from@gmail.com“,”密码“);
smtpClient.EnableSsl=true;
smtpClient.Send(msg);
Console.WriteLine(“成功发送电子邮件”);
}
从2017年3月起,这对我来说就起作用了。
从上面的解决方案开始,“终于开始工作了:)”一开始不起作用
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("<me>@gmail.com", "<my pw>");
MailMessage mm = new MailMessage(from_addr_text, to_addr_text, msg_subject, msg_body);
mm.BodyEncoding = UTF8Encoding.UTF8;
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
client.Send(mm);
SmtpClient=new SmtpClient();
client.Port=587;
client.Host=“smtp.gmail.com”;
client.enablesl=true;
client.Timeout=10000;
client.DeliveryMethod=SmtpDeliveryMethod.Network;
client.UseDefaultCredentials=false;
client.Credentials=new System.Net.NetworkCredential(“@gmail.com”,”);
MailMessage mm=新邮件消息(从地址文本到地址文本、消息主题、消息正文);
mm.BodyEncoding=UTF8Encoding.UTF8;
mm.DeliveryNotificationOptions=DeliveryNotificationOptions.OnFailure;
客户端发送(mm);
MailKit是一个开源的跨平台.NET邮件客户端库,它基于MimeKit并针对移动设备进行了优化。
它比System.Net.Mail具有更多和更高级的功能
通过MimeKit提供Microsoft TNEF支持
从下载nuget软件包
请参见此示例,您可以发送邮件
MimeMessage mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress(senderName, sender@address.com));
mailMessage.Sender = new MailboxAddress(senderName, sender@address.com);
mailMessage.To.Add(new MailboxAddress(emailid, emailid));
mailMessage.Subject = subject;
mailMessage.ReplyTo.Add(new MailboxAddress(replyToAddress));
mailMessage.Subject = subject;
var builder = new BodyBuilder();
builder.TextBody = "Hello There";
try
{
using (var smtpClient = new SmtpClient())
{
smtpClient.Connect("HostName", "Port", MailKit.Security.SecureSocketOptions.None);
smtpClient.Authenticate("user@name.com", "password");
smtpClient.Send(mailMessage);
Console.WriteLine("Success");
}
}
catch (SmtpCommandException ex)
{
Console.WriteLine(ex.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
这个答案的特点是:
- 尽可能使用“使用”(接口)
- 使用
- 将SmtpConfig提取到外部类(根据需要进行调整)
以下是提取的代码:
public async Task SendAsync(string subject, string body, string to)
{
using (var message = new MailMessage(smtpConfig.FromAddress, to)
{
Subject = subject,
Body = body,
IsBodyHtml = true
})
{
using (var client = new SmtpClient()
{
Port = smtpConfig.Port,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Host = smtpConfig.Host,
Credentials = new NetworkCredential(smtpConfig.User, smtpConfig.Password),
})
{
await client.SendMailAsync(message);
}
}
}
类SmtpConfig:
public class SmtpConfig
{
public string Host { get; set; }
public string User { get; set; }
public string Password { get; set; }
public int Port { get; set; }
public string FromAddress { get; set; }
}
通过smtp发送电子邮件
public void EmailSend(string subject, string host, string from, string to, string body, int port, string username, string password, bool enableSsl)
{
try
{
MailMessage mail = new MailMessage();
SmtpClient smtpServer = new SmtpClient(host);
mail.Subject = subject;
mail.From = new MailAddress(from);
mail.To.Add(to);
mail.Body = body;
smtpServer.Port = port;
smtpServer.Credentials = new NetworkCredential(username, password);
smtpServer.EnableSsl = enableSsl;
smtpServer.Send(mail);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
mail.To是只读的,from不是。publicmailaddresscollection到{get;}这是因为它是一个集合。您可以直接调用add toit@Oskar好吧,我应该说得更具体些。无法将mail.to设置为特定地址。必须使用构造函数或调用add。我只是在处理第一个编译器警告:错误CS0200:无法将属性或索引器'System.Net.Mail.MailMessage.To'分配给--它已被读取only@DougHauf可以将SmtpClient类与受密码保护的smtp服务器一起使用。您的smtp服务器似乎是一个内部服务器,这意味着您的程序只能在网络上连接到该smtp服务器client.Host=“mail.youroutgoingsmtpserver.com”
client.Credentials=new System.Net.NetworkCredential(“您的用户名”、“您的密码”)代码>SmtpClient实现IDisposable,因此您可能应该将其更改为:using(SmtpClient=new SmtpClient()){…}不应该
MimeMessage mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress(senderName, sender@address.com));
mailMessage.Sender = new MailboxAddress(senderName, sender@address.com);
mailMessage.To.Add(new MailboxAddress(emailid, emailid));
mailMessage.Subject = subject;
mailMessage.ReplyTo.Add(new MailboxAddress(replyToAddress));
mailMessage.Subject = subject;
var builder = new BodyBuilder();
builder.TextBody = "Hello There";
try
{
using (var smtpClient = new SmtpClient())
{
smtpClient.Connect("HostName", "Port", MailKit.Security.SecureSocketOptions.None);
smtpClient.Authenticate("user@name.com", "password");
smtpClient.Send(mailMessage);
Console.WriteLine("Success");
}
}
catch (SmtpCommandException ex)
{
Console.WriteLine(ex.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
public async Task SendAsync(string subject, string body, string to)
{
using (var message = new MailMessage(smtpConfig.FromAddress, to)
{
Subject = subject,
Body = body,
IsBodyHtml = true
})
{
using (var client = new SmtpClient()
{
Port = smtpConfig.Port,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Host = smtpConfig.Host,
Credentials = new NetworkCredential(smtpConfig.User, smtpConfig.Password),
})
{
await client.SendMailAsync(message);
}
}
}
public class SmtpConfig
{
public string Host { get; set; }
public string User { get; set; }
public string Password { get; set; }
public int Port { get; set; }
public string FromAddress { get; set; }
}
public void EmailSend(string subject, string host, string from, string to, string body, int port, string username, string password, bool enableSsl)
{
try
{
MailMessage mail = new MailMessage();
SmtpClient smtpServer = new SmtpClient(host);
mail.Subject = subject;
mail.From = new MailAddress(from);
mail.To.Add(to);
mail.Body = body;
smtpServer.Port = port;
smtpServer.Credentials = new NetworkCredential(username, password);
smtpServer.EnableSsl = enableSsl;
smtpServer.Send(mail);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}