2016-03-29 71 views
2

我有一个控制台应用程序,我试图从它发送邮件。如何从Smtp客户端发送邮件?

我的代码。

MailMessage message = new MailMessage(MailSender, "[email protected]"); 

    message.Subject = "Using the new SMTP client."; 
    message.Body = @"Using this new feature, you can send an e-mail message from an application very easily."; 
    SmtpClient client = new SmtpClient(); 
    client.Port = 25; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network; 
    client.UseDefaultCredentials = false; 
    client.Host = "smtp.google.com"; 

    try 
    { 
     client.Send(message); 
    } 
    catch (Exception ex) 
    { 
     string t = ex.Message; 
    } 

here

得到这个我必须失去了一些东西,因为我得到:

发送邮件失败。

我在这做错了什么?编辑: 内部执行。

的InnerException = { “远程名称无法解析: 'smtp.google.com'”}

+0

的异常包含不仅仅是'.Message'属性的更多信息。检查该信息以了解其失败原因的详细信息。 – David

+0

你会得到什么样的实际错误? – BugFinder

+0

检查编辑plz – ThunD3eR

回答

2

你可以尝试使用

smtp.gmail.com 

,而不是

smtp.google.com 

还尝试确保您提供正确的凭据以及正确的端口。一个服务器参数信息:

enter image description here

Source

所以,你可以尝试这样的事情

MailMessage message = new System.Net.Mail.MailMessage(); 
string fromEmail = "[email protected]"; 
string password = "yourPassword"; 
string toEmail = "[email protected]"; 
message.From = new MailAddress(fromEmail); 
message.To.Add(toEmail); 
message.Subject = "Using the new SMTP client."; 
message.Body = "Using this new feature, you can send an e-mail message from an application very easily."; 
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 

using(SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587)) 
{ 
    smtpClient.EnableSsl = true; 
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
    smtpClient.UseDefaultCredentials = false; 
    smtpClient.Credentials = new NetworkCredential(fromEmail, password); 

    smtpClient.Send(message.From.ToString(), message.To.ToString(), message.Subject, message.Body); 
} 
+0

也我很确定它需要用户名认证,所以需要在另一个端口..并提供凭据。 – BugFinder

+0

好吧,这似乎是我想要去的方式。不过,我正在通过本地应用程序进行此操作,而我正在坐在安全公司的互联网连接上。 我假设有这种情况下需要其他凭据,因为我得到这个:“ex = {”SMTP服务器需要一个安全的连接或客户端未验证。“}” – ThunD3eR

+0

@ Ra3IDeN: - 的确,你需要证书! :) –

1

@ Ra3IDeN ......哎哥试试这个...

SmtpClient smtpClient = new SmtpClient("mail.yourwebsitename.com", 25); 

smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "yourIdPassword"); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 
MailMessage mail = new MailMessage(); 

//code for: From ,CC & To 
mail.From = new MailAddress("[email protected]", "yourwebsite"); 
mail.To.Add(new MailAddress("[email protected]bsitename.com")); 
mail.CC.Add(new MailAddress("[email protected]")); 

smtpClient.Send(mail); 
+0

没有与这个一起去,但感谢你启发我关于cc财产 – ThunD3eR

0
MailMessage msg = new MailMessage("[email protected]", "[email protected]"); 


     msg.Subject = message.Subject; 

     msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("Message Content here as HTML", null, MediaTypeNames.Text.Html)); 

     SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", Convert.ToInt32(587)); 
     System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("[email protected]", "YourPassword"); 
     smtpClient.EnableSsl = true; 
     System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object s, 
        System.Security.Cryptography.X509Certificates.X509Certificate certificate, 
        System.Security.Cryptography.X509Certificates.X509Chain chain, 
        System.Net.Security.SslPolicyErrors sslPolicyErrors) 
     { 
      return true; 
     }; 


     smtpClient.Credentials = credentials; 
smtpClient.Send(msg); 
1

如果您尝试从控制台应用程序发送电子邮件(您的高级问题),我建议使用PostMark。为什么:

  • 的NuGet - 你可以得到邮戳NuGet包和一个漂亮的API发送电子邮件。方便简单。
  • 未标记为垃圾邮件 - 您可以使用验证(包括spf和签名)配置您的“服务器”。因此,您的电子邮件将更有可能到达收件箱中的目的地,而不是其垃圾邮件框。
  • 免费 - 一个点。我认为这是免费的1000封电子邮件,然后每1000美元1美元。所以这非常好。将它与任何其他香草SMTP服务器进行比较。 PostMark便宜
  • 一致 - 从工作站DEV到服务器LIVE,PostMark API始终可访问。我不能说这有多好。通常,服务器主机将提供SMTP服务器端点,但它只能在其网络内部工作,这意味着当您在工作站上进行DEV工作时(或者它无法工作),您必须配置另一个SMTP服务器。
  • 异步接口 - 我不知道,如果自带的SMTP客户端.NET是异步...
  • 跟踪 - 嘿,看看那个,他们有一个跟踪功能内置。这很时髦。用于发送

实施例的代码(source):

var message = new PostmarkMessage() 
{ 
    To = "[email protected]", 
    From = "[email protected]", 
    TrackOpens = true, 
    Subject = "A complex email", 
    TextBody = "Plain Text Body", 
    HtmlBody = "<html><body><img src=\"cid:embed_name.jpg\"/></body></html>", 
    Tag = "business-message", 
    Headers = new HeaderCollection{ 
     {"X-CUSTOM-HEADER", "Header content"} 
    } 
}; 

var imageContent = File.ReadAllBytes("test.jpg"); 
message.AddAttachment(imageContent, "test.jpg", "image/jpg", "cid:embed_name.jpg"); 

var client = new PostmarkClient("server token"); 
var sendResult = await client.SendMessageAsync(message); 
+0

这可能是值得considiration。现在将使用上面的soloution,但这是我将在未来定义的尝试。 +1 – ThunD3eR

+0

@ Ra3IDeN我怎么样包括示例代码来庆祝:) – Todd

+0

如果我可以投票更高,我会,谢谢你:)庆祝活动! – ThunD3eR

相关问题