2017-06-27 39 views
-1

我希望我的系统在单击按钮时发送电子邮件,但是我每次都会在smtp.send(消息)中发现问题,没有任何错误或任何内容,它只是虽然它仍然在运行,但它仍然冻结。我写了4次尝试,都不成功。无法使用c#中的smtp发送电子邮件#

1日尝试:

try 
{ 
    MailMessage mail = new MailMessage(); 
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); 

    mail.From = new MailAddress("[email protected]"); 
    mail.To.Add("[email protected]"); 
    mail.Subject = "Test Mail"; 
    mail.Body = "This is for testing SMTP mail from GMAIL"; 

    SmtpServer.Port = 25; 
    SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password"); 
    SmtpServer.EnableSsl = true; 

    SmtpServer.Send(mail); 
    MessageBox.Show("mail Send"); 
    MessageBox.Show("Email sent successfully"); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

第2次尝试:

try 
{ 
    //string s = $"User {edtID} has failed to login"; 

    MailMessage message = new MailMessage(); 
    message.To.Add("[email protected]"); 
    message.Subject = "Employee login failure"; 
    message.From = new MailAddress("[email protected]"); 
    message.Body = "Hello"; 
    SmtpClient smtp = new SmtpClient("smtp.saix.net"); 
    smtp.Send(message); 
    MessageBox.Show("mail Sent"); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

SmtpClient smtp = new SmtpClient(); 
smtp.Port = 25; 
smtp.Credentials = new System.Net.NetworkCredential("username", "password"); 
smtp.EnableSsl = true; 
MailMessage mailMessage = new MailMessage(); 
mailMessage.To.Add(new MailAddress("[email protected]", "ME")); 
mailMessage.Subject = "Some Subject"; 
mailMessage.Body = "Test"; 
smtp.Send(mailMessage); 

第三尝试:

// string s = $"User {edtID} has failed to login"; 
MailMessage mail = new MailMessage(); 
SmtpClient SmtpServer = new SmtpClient(); 
mail.To.Add("[email protected]"); 
mail.From = new MailAddress("[email protected]"); 
mail.Subject = "Employee login failure"; 
mail.IsBodyHtml = true; 
mail.Body = "Hello"; 
SmtpServer.Host = "smtp.saix.net"; 
SmtpServer.Port = 25; 
SmtpServer.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; 
try 
{ 

    SmtpServer.Send(mail); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Exception Message: " + ex.Message); 
    if (ex.InnerException != null) 
     MessageBox.Show("Exception Inner: " + ex.InnerException); 

} 

第四尝试:

var sysLogin = "[email protected]"; 
var sysPass = "[email protected]"; 
var sysAddress = new MailAddress(sysLogin, "Message from me!"); 

var receiverAddress = new MailAddress("mymail#gmail.com"); 

var smtp = new SmtpClient 
{ 
    Host = "smtp.gmail.com", //gmail example 
    Port = 587, 
    EnableSsl = false, 
    DeliveryMethod = SmtpDeliveryMethod.Network, 
    UseDefaultCredentials = false, 
    Credentials = new System.Net.NetworkCredential(sysLogin, sysPass) 
}; 


using (var message = new MailMessage(sysAddress, receiverAddress) { Subject = "Some subject", Body = "Some text" }) 
{ 
    smtp.Send(message); 
} 
MessageBox.Show("Success"); 
+1

如果你的代码全部被注释掉了,你如何期待它做任何事情?如果您使用'SmtpClient',如何“使用SQL发送电子邮件”?你为什么要将'SmtpClient'的实例称为'SmtpServer'?这似乎倒退了。 – mason

+0

它的全部注释,因为我是单独尝试每个人,它贯穿一切,但在smtp.Send(消息)失败; – Armee

+0

查看以下网址:https://support.google.com/accounts/answer/185833?hl = zh_CN https://support.google.com/accounts/answer/6010255?hl = zh_CN –

回答

1

你试过吗?看起来你所有的尝试都有SSL + 25或587 + NoSSL。 SSL应与端口587

var smtpClient = new SmtpClient("smtp.gmail.com") 
{ 
       Port = 587, 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       EnableSsl = true, 
       Credentials = new NetworkCredential("[email protected]", "MyPassword") 
}; 
+1

此外,gmail现在对SMTP访问非常挑剔。如果启用了“安全性较低的应用程序”(如果您未使用双因素身份验证),或者您使用的是应用程序特定的密码(如果您使用的是双因素身份验证),则此功能才可用。 –

1

我曾经有一个问题,我的电子邮件客户端将冻结上使用STMP设置Gmail时发送邮件。然后,我必须在Gmail帐户设置中创建应用程序密码,并在stmp设置中使用该应用程序密码才能使我的客户端正常工作。试试这个,希望它修复冻结问题

  1. 转到https://security.google.com/settings/security/apppasswords
  2. 选择和应用[自定义,如果有的话],设备[自定义,如果有的话],然后点击生成。
  3. 将生成一个类似如下的密码:kxyo gmnz dais wcau
  4. 使用此应用程序密码而不是您现在在stmp设置中使用的密码。
+0

谢谢拉胡尔。你有没有可能给我指导如何实现这一点? – Armee

+0

对此的需求取决于您是否启用了双因素身份验证。如果你有2FA,你需要这个应用特定的密码。如果您不使用2FA,则需要启用“安全性较低的应用程序”,或者更新您的C#代码以使用OAuth(而不是微不足道的)。 –

+0

@Armee我更新了我的答案,但我的解决方案要求您的帐户启用两步验证。那么只有这样才行 –