2013-02-11 8 views
5

Staram się tylko, aby mój serwer hmailowy wysłał pocztę z mojego programu C#. Częścią, która mnie zabija, jest część SSL.Hmailserver C# SMTP

I początkowo dostał ten błąd: The SMTP server requires a secure connection or the client was not authenticated. The server response was: SMTP authentication is required.

więc dodałem: smtp.EnableSsl = true; i teraz dostaję Server does not support secure connections.

Oto mój kod, to doprowadza mnie do szału. Czy muszę utworzyć własny protokół SSL lub czy istnieje sposób wyłączenia protokołu SSL po stronie hmailserwera?

MailMessage mail = new MailMessage("[email protected]", "com", "NEW Item", emailBody); 
SmtpClient smtp = new SmtpClient("1.1.1.250"); 
smtp.Port = 25; 
NetworkCredential login = new NetworkCredential("[email protected]", "dg"); 
smtp.Credentials = login; 
smtp.EnableSsl = true; 
smtp.UseDefaultCredentials = false; 
smtp.Send(mail); 
+0

Może grasz z opcjami hmailserwera? Używam hmailserwera od lat bez ssl z moich programów C#. –

+0

@UweKeim OK jakie opcje? Nie chcę SSL Chcę tylko wysłać pocztę na inne konto. –

Odpowiedz

4

Ahh OK, co musisz zrobić, to w HMailServer przejść do zakresów zaawansowanych IP. Utwórz nowy zakres adresów IP, na przykład, jeśli 192.168.1.2, musisz ustawić zakres 192.168.1.1-192.168.1.3, a następnie od dołu odznacz wszystkie wymagane pola uwierzytelniania SMTP.

Annoying ...

+0

Wiem, że to stary wątek, ale dla przyszłych googlersów po prostu chcę dodać, że musisz także zadbać o priorytet zakresów IP. Jeśli wiele zakresów się zgadza, używany jest ten o najwyższym priorytecie. – Hintham

0

Aby włączyć bezpieczne połączenie, aby wysłać e-mail throught dostawcę usług poczty elektronicznej, trzeba zmienić numer portu.

 MailMessage mail = new MailMessage("[email protected]", "com", "NEW Item", emailBody); 
     SmtpClient smtp = new SmtpClient("1.1.1.250"); 
     //smtp.Port =25; 
     smtp.Port =587; 
     NetworkCredential login = new NetworkCredential("[email protected]", "dg"); 
     smtp.Credentials = login; 
     smtp.EnableSsl = true; 
     smtp.UseDefaultCredentials = false; 
     smtp.Send(mail); 
0

miałem ten problem, co zrobiłem użyto localhost ip i enableSSL do fałszywego

SmtpClient smtpClient = new SmtpClient(); 
      smtpClient.Host = "127.0.0.1"; 
      smtpClient.Credentials = new NetworkCredential("[email protected]", "pass123"); 
      smtpClient.EnableSsl = false; 

     // then your other statements like: from, to, body, to send mail 

this poradnik pomoże Ci Ustawienia niestandardowe NetworkCredentials w HMailServer stosowany powyżej, nadzieja pomaga kogoś.

0

Natknąłem się na to pytanie podczas próby skonfigurowania hMailServer do pracy na wysyłanie wiadomości e-mail z C#. Próbowałem następujące:

  • C# smtpclient - nie działa z niejawnego SSL - zobacz ten question i odpowiedzi
  • AegisImplicitMail z here - nie mogła ona pracować z UTF-8 ciągi (mam znaków diakrytycznych w moim strings)
  • MailKit z here - bardzo mocne i dojrzałe, żadnych problemów używając go

ja skierowane na następujące cele:

  • przyzwoite bezpieczeństwo
  • możliwość wysyłania wiadomości e-mail do głównych dostawców usług poczty elektronicznej (np.Google, Yahoo) i dotrzeć do skrzynki odbiorczej
  • możliwość odbierania e-maili od głównego nurtu dostawców e-mail

kod C#

public void MailKitSend(string senderEmail, string senderName, string subject, string bodyText, string receivers, string receiversCc) 
    { 
     // no receivers, no e-mail is sent 
     if (string.IsNullOrEmpty(receivers)) 
      return; 

     var msg = new MimeMessage(); 
     msg.From.Add(new MailboxAddress(Encoding.UTF8, senderName, senderEmail)); 
     msg.Subject = subject; 
     var bb = new BodyBuilder {HtmlBody = bodyText}; 
     msg.Body = bb.ToMessageBody(); 

     IList<string> receiversEmails = receivers.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
     foreach (string receiver in receiversEmails) 
      msg.To.Add(new MailboxAddress(Encoding.UTF8, "", receiver)); 

     if (!string.IsNullOrEmpty(receiversCc)) 
     { 
      IList<string> receiversEmailsCc = receiversCc.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
      foreach (string receiverCc in receiversEmailsCc) 
       msg.Cc.Add(new MailboxAddress(Encoding.UTF8, "", receiverCc)); 
     } 

     try 
     { 
      var sc = new MailKit.Net.Smtp.SmtpClient(); 
      if (!string.IsNullOrWhiteSpace(SmtpUser) && !string.IsNullOrWhiteSpace(SmtpPassword)) 
      { 
       sc.Connect(SmtpServer, 465); 
       sc.Authenticate(SmtpUser, SmtpPassword); 
      } 

      sc.Send(msg); 
      sc.Disconnect(true); 
     } 
     catch (Exception exc) 
     { 
      string err = $"Error sending e-mail from {senderEmail} ({senderName}) to {receivers}: {exc}"; 
      throw new ApplicationException(err); 
     } 
    } 

konfiguracja hMailServer

1) Otwarte porty - 25, 143, 465, 995 są otwarte, abyś mógł wysyłać i odbierać wiadomości e-mail

2) Konfiguracja protokołu TCP/porty IP

SMTP/0.0.0.0/port 25/no security (allow receiving start process) 
SMTP/0.0.0.0/port 465/SSL/TLS security (must define a SSL certificate) 
POP3/0.0.0.0/port 995/SSL/TLS security (use the same SSL certificate) 

3) pre C# testowanie

Run Diagnostics z hMailServer Administrator

pomocą klienta e-mail, który pozwala na ręczną konfigurację różnych ustawień, takich jak porty dla każdego protokołu, bezpieczeństwo. Użyłem Thunderbirda. Dołącz wysyłanie wiadomości e-mail do zewnętrznych dostawców i odbieranie z nich wiadomości e-mail (próbowałem za pomocą Gmaila).

Nie wprowadziłem żadnych zmian w zakresach adresów IP i opuściłem domyślne (Mój komputer i Internet).