Ответ 1
Имя хоста для SMTP-сервера Google - smtp.gmail.com, и если вы используете SSL, то правильный порт - 465.
POP-сервер обычно предназначен только для получения писем, а не для отправки писем.
Я попытался настроить 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
Имя хоста для SMTP-сервера Google - smtp.gmail.com, и если вы используете SSL, то правильный порт - 465.
POP-сервер обычно предназначен только для получения писем, а не для отправки писем.
Ниже представлена обновленная конфигурация сервера 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
Эта конфигурация отлично работает для меня.
Указанная выше конфигурация не работала из-за дополнительных мер безопасности в Google. Дополнительная настройка требуется в учетной записи Gmail, с которой запускается почта. Этот шаг разрешает приложениям, таким как Jenkins, использовать учетную запись Gmail.
https://support.google.com/accounts/answer/6010255
Перейдите в раздел "Менее безопасные приложения" в разделе "Моя учетная запись". Рядом с "Доступ для менее безопасных приложений" выберите "Включить". (Примечание для пользователей G Suite: этот параметр скрыт, если ваш администратор заблокировал менее безопасный доступ к учетной записи приложения.)
После успешного запуска этих писем.
Получить специальный пароль для приложения
Войдите в учетную запись gmail → перейдите к настройкам → параметры конфиденциальности и безопасности
настройте настройки двухэтапной аутентификации (потому что без двухэтапной аутентификации мы не сможем создать специальный пароль для приложения)
после настройки двухэтапного подтверждения в учетной записи gmail перейдите к настройкам безопасности и конфиденциальности
нажмите на специальный пароль для приложения → укажите имя приложения в раскрывающемся списке как Jenkins (у Google по умолчанию не установлен какой-либо специальный пароль для Jenkins) → это сгенерирует пароль с паролем генерируется
Примечание. Поскольку пароль имеет общий контроль над раскрывающимся аккаунтом gmail, это может привести к серьезным последствиям.
Настройка конфигурации SMTP для отправки gmail
перемещаться по следующему пути из панели мониторинга после входа в систему
управлять Jenkins
→ configure system
→ scroll 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 >
нажмите на тестовую конфигурацию, которая отправит тестовую почту на идентификатор электронной почты получателя
На следующем снимке экрана показана конфигурация электронной почты, которую вам необходимо сделать для отправки электронной почты из GMail.
ВНИМАНИЕ
В последнем почтовом плагине версии 1.24 есть ошибка, которая вызывает сбой конфигурации теста (требуется аутентификация), даже если у вас правильная конфигурация. Загрузите версию 1.23 (файл .hpi) с официального сайта, затем загрузите ее с веб-сайта manage plugin-> advanced. Перезапустите Дженкинс, все должно работать хорошо.
Нужно только включить менее безопасный доступ к приложению, нет необходимости открывать двухэтапную проверку.
Я успешно сделал это с Zapier на их свободном уровне (без необходимости включать "менее безопасные приложения" в gmail
PS. У меня нет причин рекомендовать Zapier, кроме того, что он работает для меня, и там есть решение без учета моей учетной записи gmail.
Не удалось подключиться к 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)