Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我会得到';无法分配属性";发送SMTP电子邮件时?_C#_Email_Smtpclient - Fatal编程技术网

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);
        }
    }