Ich versuche, die SMTP-E-Mail-Benachrichtigung einzurichten. Ich konnte sehen, dass der Gmail-Teil gut funktioniert. Ich möchte es für mein Office 365 konfigurieren.
SMTP-Server = SMTP-Büro 365.com
Wir haben kein SSL konfiguriert. Stattdessen verwenden wir TLS. Wie kann ich das TLS in den Jenkins einstellen? Es gibt nur eine Check-Schaltfläche, die die Verwendung von SSL vorschlägt. Wenn ich es deaktiviere, was soll es verwenden?
Ich erhalte folgende Fehler -
Failed to send out e-mail
javax.mail.MessagingException: Could not connect to SMTP Host: smtp.office365.com, port: 587;
nested exception is:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1934)
at com.Sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.Java:638)
at javax.mail.Service.connect(Service.Java:317)
at javax.mail.Service.connect(Service.Java:176)
at javax.mail.Service.connect(Service.Java:125)
at javax.mail.Transport.send0(Transport.Java:194)
at javax.mail.Transport.send(Transport.Java:124)
at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.Java:499)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:616)
at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.Java:298)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.Java:161)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.Java:96)
at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.Java:120)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:728)
at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:858)
at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.Java:248)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:728)
at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:858)
at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:631)
at org.kohsuke.stapler.Stapler.service(Stapler.Java:225)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:848)
at org.Eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.Java:686)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1494)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.Java:96)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.Java:88)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.Java:48)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:84)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.Java:76)
at hudson.security.HudsonFilter.doFilter(HudsonFilter.Java:164)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.Java:46)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.Java:81)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1474)
at org.Eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.Java:499)
at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:137)
at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:533)
at org.Eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.Java:231)
at org.Eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.Java:1086)
at org.Eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.Java:428)
at org.Eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.Java:193)
at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:1020)
at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:135)
at org.Eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.Java:116)
at org.Eclipse.jetty.server.Server.handle(Server.Java:370)
at org.Eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.Java:489)
at org.Eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.Java:960)
at org.Eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.Java:1021)
at org.Eclipse.jetty.http.HttpParser.parseNext(HttpParser.Java:865)
at org.Eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.Java:240)
at org.Eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.Java:82)
at org.Eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.Java:668)
at org.Eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.Java:52)
at winstone.BoundedExecutorService$1.run(BoundedExecutorService.Java:77)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1146)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
at Java.lang.Thread.run(Thread.Java:679)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at Sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.Java:542)
at Sun.security.ssl.InputRecord.read(InputRecord.Java:374)
at Sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.Java:850)
at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.Java:1190)
at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1217)
at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1201)
at com.Sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.Java:507)
at com.Sun.mail.util.SocketFetcher.getSocket(SocketFetcher.Java:238)
at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1900)
... 63 more
Öffnen Sie für Jenkins unter Windows die Datei jenkins.xml, und ändern Sie den Argumentenknoten
-Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable = true -jar "% BASE%\jenkins.war" --httpPort = 8080
Office 365 erfordert tatsächlich authentifiziertes SMTP mit TLS. Die SSL-Option in der Jenkins-Konfiguration hilft nicht, lassen Sie sie nicht aktiviert. Fügen Sie stattdessen die folgende Systemeigenschaft der Jenkins-VM hinzu:
-Dmail.smtp.starttls.enable=true
Für den Standalone-Server legt Jenkins die Datei in jenkins.xml aus dem Installationsordner ein und für Tomcat aktualisieren Sie das Startskript.
Starten Sie dann Jenkins neu und Sie können loslegen.
Ich betreibe Jenkins unter Ubuntu Server 14.04 und musste die vorherige Antwort anpassen, die die CentOS-Distribution anspricht.
Bei den meisten Linux-Distributionen befindet sich die Konfigurationsdatei für Jenkins unter /etc/default/jenkins
( siehe diesen Link ). Ich benutze Jenkins 2.7 und füge -Dmail.smtp.starttls.enable=true
an die vorhandene Einstellungsvariable Java_ARGS
an. Zum Schluss endete ich damit:
Java_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
Hier ist es gelungen, Jenkins auf CentOS zu betreiben. Bearbeiten Sie /etc/sysconfig/jenkins
und fügen Sie die Option -Dmail.smtp.starttls.enable=true
zu JENKINS_Java_OPTIONS
hinzu.
Wenn bereits eine andere Variable vorhanden ist, hängen Sie -Dmail.smtp.starttls.enable=true
an, so dass sie der folgenden ähnelt:
JENKINS_Java_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
starten Sie Jenkins mit service jenkins restart
neu, und Sie sollten sich auf den Weg machen
Danke für die Antworten, ich habe es behoben. Zunächst unterstützt Java standardmäßig nur SSL. Daher müssen Jenkins Java-Optionen festgelegt werden, um TLS zu aktivieren. Starten Sie anschließend den Jenkins-Dienst. Das Problem dieses Berechtigungsproblems tritt auf, wenn Sie die E-Mail-Adresse des Systemadministrators nicht in der Spalte für die Position von Jenkins angeben. Dies ist bei Google Mail SMTP nicht der Fall. Ich denke, Office 365 hat eine hohe Sicherheit. So kann nur der registrierte Benutzer die E-Mails senden.
Das Hinzufügen von "-Dmail.smtp.starttls.enable = true" zu Java-Optionen funktionierte für mich nicht sofort - Jenkins versuchte, eine Verbindung zum SMTP herzustellen, aber in den Protokollen unter/var/log/maillog (CentOS) 7.2) Ich habe gesehen, dass die Verbindung hergestellt ist, und Postfix hat nach einiger Zeit (vermutlich nach Zeitüberschreitung) gemeldet, dass die Verbindung nach CONNECT von {Host_Name} verloren gegangen ist. Ich habe auch eine Verbindung über TLS. Nach einigen Nachforschungen habe ich mich entschlossen, einen anderen Port zu verwenden - 587 - anstelle von Standard 465 und voila! - Schließlich wurde die Test-E-Mail gesendet.