2016-03-29 12 views
2

Ich habe eine Konsole App und ich versuche, Mail von ihm zu senden.So senden Sie E-Mails vom Smtp-Client?

Mein Code.

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

Dieses erhielt von here

ich etwas fehlen muss, da bin ich immer:

Fehler beim Senden von E-Mail.

Was mache ich hier falsch?

EDIT: innere Ausnahme.

Innerexception = { "Der Remote-Name nicht aufgelöst werden konnte: 'smtp.google.com'"}

+0

Die Ausnahme enthält mehr Informationen als nur die '.Message' Eigenschaft. Untersuchen Sie diese Informationen auf Details, warum dies fehlgeschlagen ist. – David

+0

Welchen tatsächlichen Fehler bekommen Sie? – BugFinder

+0

Check edits plz – ThunD3eR

Antwort

2

Sie können versuchen,

smtp.gmail.com 

statt

zu verwenden
smtp.google.com 

Versuchen Sie auch sicherzustellen, dass Sie die richtigen Anmeldeinformationen bereitstellen zusammen mit dem richtigen Port. Ein Server-Parameter-Info:

enter image description here

Source

So können Sie so etwas wie dieses

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

auch ich war ziemlich sicher, dass es Benutzername Authentifizierung benötigen würde, so muss auf einem anderen Port sein .. und Anmeldeinformationen liefern. – BugFinder

+0

In Ordnung, das scheint der Weg zu sein, den ich gehen möchte. Allerdings mache ich dies auf einer lokalen App und ich bin über eine gesicherte Internet-Verbindung sitzen. Ich nehme an, dass in dieser Situation andere Anmeldeinformationen benötigt werden, da ich folgendes bekomme: "ex = {" Der SMTP Server benötigt eine sichere Verbindung oder der Client wurde nicht authentifiziert. "}" – ThunD3eR

+0

@ Ra3IDeN: - In der Tat brauchen Sie die Referenzen! :) –

1

@ Ra3IDeN versuchen ... hey Bruder versuchen, diese ...

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]")); 
mail.CC.Add(new MailAddress("[email protected]")); 

smtpClient.Send(mail); 
+0

Ich ging nicht mit diesem, aber ich danke Ihnen für die Aufklärung über die cc-Eigenschaft – 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

Wenn Sie versuchen, E-Mails von einer Konsolenanwendung zu senden (Ihr Problem auf höherer Ebene), empfehle ich die Verwendung von PostMark. Warum:

  • NuGet - Sie können die Poststempel NuGet Paket erhalten und E-Mail mit einem schönen API senden. Praktisch und einfach.
  • Nicht als SPAM markiert - Sie können Ihren "Server" mit Verifizierung konfigurieren (einschließlich SPF und Signieren). Ihre E-Mail-Adresse erreicht also eher das Ziel im Posteingang als die SPAM-Box.
  • Frei - zu einem Punkt. Ich denke es sind 1000 E-Mails gratis und dann 1 pro 1000. Das ist also ziemlich gut. Vergleichen Sie das mit einem anderen Vanilla-SMTP-Server, den Sie mieten können. PostMark ist billig
  • Konsequent - Von Workstation DEV zu Server LIVE, ist die PostMark API durchgängig zugänglich. Ich kann nicht betonen, wie gut das ist.Oft wird ein Server-Host einen SMTP-Server-Endpunkt anbieten, aber er funktioniert nur von innerhalb seines Netzwerks, was bedeutet, dass Sie einen anderen SMTP-Server konfigurieren müssen, wenn Sie DEV-Arbeiten an Ihrer Workstation ausführen (oder einfach nicht funktionieren).
  • Async-Schnittstelle - Ich bin nicht sicher, ob eingebauten SMTP-Client in .NET async ist ...
  • Verfolgung - suchen Hey an, dass sie eine Tracking-Funktion eingebaut. Das ist schlau.

Beispielcode für das Senden (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

Dies könnte eine Überlegung wert sein. Ich werde die obige Lösung für den Moment verwenden, aber das ist etwas, was ich in Zukunft definitiv versuchen werde. +1 – ThunD3eR

+0

@ Ra3IDeN wie wäre es mit ich Beispiel Code zu feiern :) – Todd

+0

Wenn ich höher wählen könnte, würde ich, danke :) yay Feier! – ThunD3eR

Verwandte Themen