Настройка уведомления электронной почты Jenkins с помощью gmail

Я попытался настроить jenkins для отправки уведомлений по электронной почте с помощью gmail в качестве поставщика POP, но я не смог добиться успеха

SMTP server - pop.gmail.com
Default user e-mail suffix - @gmail.com
Sender E-mail Address - Foobar CI <[email protected]>

Use SMTP Authentication - yes
User Name - your.email
Password - p******d

Use SSL - yes
SMTP Port - 995
Reply-To Address - [email protected]
Charset - UTF-8

Сбой теста: соединение отклонено

javax.mail.MessagingException: Не удалось подключиться к узлу SMTP: pop.gmail.com, порт: 995; Вложенное исключение:   java.net.ConnectException: соединение отклонено: connect

Ответ 1

Имя хоста для SMTP-сервера Google - smtp.gmail.com, и если вы используете SSL, то правильный порт - 465.

POP-сервер обычно предназначен только для получения писем, а не для отправки писем.

Ответ 2

Ниже представлена ​​обновленная конфигурация сервера SMTP gmail:

Gmail SMTP server address: smtp.gmail.com
Gmail SMTP user name: Your full Gmail address (e.g. [email protected])
Gmail SMTP password: Your Gmail password
Gmail SMTP port: 465
Gmail SMTP TLS/SSL required: yes

Эта конфигурация отлично работает для меня.

Ответ 3

Указанная выше конфигурация не работала из-за дополнительных мер безопасности в Google. Дополнительная настройка требуется в учетной записи Gmail, с которой запускается почта. Этот шаг разрешает приложениям, таким как Jenkins, использовать учетную запись Gmail.

https://support.google.com/accounts/answer/6010255

Перейдите в раздел "Менее безопасные приложения" в разделе "Моя учетная запись". Рядом с "Доступ для менее безопасных приложений" выберите "Включить". (Примечание для пользователей G Suite: этот параметр скрыт, если ваш администратор заблокировал менее безопасный доступ к учетной записи приложения.)

После успешного запуска этих писем.

Ответ 4

  • Получить специальный пароль для приложения

    • Войдите в учетную запись gmail → перейдите к настройкам → параметры конфиденциальности и безопасности

    • настройте настройки двухэтапной аутентификации (потому что без двухэтапной аутентификации мы не сможем создать специальный пароль для приложения)

    • после настройки двухэтапного подтверждения в учетной записи gmail перейдите к настройкам безопасности и конфиденциальности

    • нажмите на специальный пароль для приложения → укажите имя приложения в раскрывающемся списке как Jenkins (у Google по умолчанию не установлен какой-либо специальный пароль для Jenkins) → это сгенерирует пароль с паролем генерируется

Примечание. Поскольку пароль имеет общий контроль над раскрывающимся аккаунтом gmail, это может привести к серьезным последствиям.

  1. Настройка конфигурации SMTP для отправки gmail

    • перемещаться по следующему пути из панели мониторинга после входа в систему управлять Jenkinsconfigure systemscroll down to email notification section

    • введите следующие параметры

      smtp server : smtp.gmail.com
      default user email suffix : @gmail.com
      
    • выберите расширенный

    • проверить проверку подлинности smtp

      username : (Your gmail id)
      password : (application specific password generated from previous step)
      
    • проверить использование SSL

      SMTP port : 465
      Reply to address : [email protected](optional)
      Charset : UTF-8 (by default it is UTF-8)
      
    • выберите тестовую конфигурационную почту

      Test e-mail recipient : <enter recipient email id >
      

нажмите на тестовую конфигурацию, которая отправит тестовую почту на идентификатор электронной почты получателя

Ответ 5

На следующем снимке экрана показана конфигурация электронной почты, которую вам необходимо сделать для отправки электронной почты из GMail.

The following screenshot illustrates the e-mail configuration you'd need to do to send e-mails from GMail.

Ответ 6

ВНИМАНИЕ

В последнем почтовом плагине версии 1.24 есть ошибка, которая вызывает сбой конфигурации теста (требуется аутентификация), даже если у вас правильная конфигурация. Загрузите версию 1.23 (файл .hpi) с официального сайта, затем загрузите ее с веб-сайта manage plugin-> advanced. Перезапустите Дженкинс, все должно работать хорошо.

Нужно только включить менее безопасный доступ к приложению, нет необходимости открывать двухэтапную проверку.

Ответ 7

Я успешно сделал это с Zapier на их свободном уровне (без необходимости включать "менее безопасные приложения" в gmail

  1. Установите Jenkins Notification Plugin. Возможно, вам придется перезапустить Jenkins
  2. Перейдите в Zapier и создайте триггер Jenkins
  3. В Jenkins в вашем проекте: Настроить → Уведомления о работе, заполните параметры. Использование JSON, похоже, сработало для меня.
  4. Добавьте действие Gmail в Zapier. Вы должны установить это с помощью единого входа в своей учетной записи gmail.

PS. У меня нет причин рекомендовать Zapier, кроме того, что он работает для меня, и там есть решение без учета моей учетной записи gmail.

Ответ 8

Не удалось подключиться к smtp.После получения ниже ошибки Не удалось отправить электронную почту

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. z9sm1520688pfd.99 - gsmtp


at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)

at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)

at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)

at javax.mail.Transport.send0(Transport.java:195)

at javax.mail.Transport.send(Transport.java:124)

at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:585)

at java.lang.invoke.MethodHandle.invokeWithArguments(Unknown Source)

at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)

at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)

at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)

at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)

at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)

at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:130)

at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)

at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:739)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:870)

at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:253)

at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)

at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:739)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:870)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:668)

at org.kohsuke.stapler.Stapler.service(Stapler.java:238)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)

at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)

at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128)

at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)

at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)

at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:99)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)

at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)

at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)

at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)

at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)

at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)

at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340)

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at org.eclipse.jetty.server.Server.handle(Server.java:503)

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)

at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)

at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)

at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)

at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)

at java.lang.Thread.run(Unknown Source)