Jenkins SMTP TLS
Я пытаюсь настроить Jenkins на использование нашего SMTP-сервера нашей компании для отправки уведомлений по электронной почте. Мы используем TLS в качестве метода шифрования на порту 587. Я не могу заставить почтовое уведомление работать исправно, хотя.
Вот мой файл Hudson.Tasks.Mailer.xml, чтобы вы могли видеть мою конфигурацию (я удалил пользователя и пароль SMTP auth и немного изменил smtpHost на всякий случай)
<hudson.tasks.Mailer_-DescriptorImpl>
<helpRedirect/>
<defaultSuffix></defaultSuffix>
<hudsonUrl>http://localhost:8080/</hudsonUrl>
<smtpAuthUsername></smtpAuthUsername>
<smtpAuthPassword></smtpAuthPassw$
<adminAddress></adminAddress>
<smtpHost>pod#####.outlook.com</smtpHost>
<useSsl>true</useSsl>
<smtpPort>587</smtpPort>
<charset>UTF-8</charset>
</hudson.tasks.Mailer_-DescriptorImpl>
Похоже, это известная проблема: http://issues.hudson-ci.org/browse/HUDSON-2206
Я не очень хорошо знаком с Apple OS (это машина, на которой работает Jenkins), но я подумал, что могу решить проблему, используя упомянутый обходной путь. Я не был точно уверен, где установить это обходное решение, поэтому я попытался поставить его здесь:
/Library/ Поддержка приложений /Jenkins/jenkins -runner.sh
defaults="defaults read /Library/Preferences/org.jenkins-ci"
war=`$defaults war` || war="/Applications/Jenkins/jenkins.war"
javaArgs="-Dmail.smtp.starttls.enable=\"true\""
heapSize=`$defaults heapSize` && javaArgs="$javaArgs -Xmx${heapSize}"
permGen=`$defaults permGen` && javaArgs="$javaArgs -XX:MaxPermSize=${permGen}"
home=`$defaults JENKINS_HOME` && export JENKINS_HOME="$home"
add_to_args() {
val=`$defaults $1` && args="$args --${1}=${val}"
}
args=""
add_to_args prefix
add_to_args httpPort
add_to_args httpListenAddress
add_to_args httpsPort
add_to_args httpsListenAddress
add_to_args ajp13Port
add_to_args ajp13ListenAddress
echo "JENKINS_HOME=$JENKINS_HOME"
echo "Jenkins command line for execution"
echo /usr/bin/java $javaArgs -jar "$war" $args
exec /usr/bin/java $javaArgs -jar "$war" $args
Это не помогло решить проблему. Я вижу этот вызов в консоли, когда Jenkins запущен, но когда я пытаюсь настроить тестовую конфигурацию, я получаю следующую ошибку:
Failed to send out e-mail
javax.mail.MessagingException: Could not connect to SMTP host: pod#####.outlook.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)
Любые идеи о том, что еще я могу попробовать? Я попытался переключить учетную запись электронной почты, чтобы использовать gmail smtp-сервер, и это работает нормально, но я бы предпочел использовать его с помощью нашего smtp-сервера, если смогу.
Ответы
Ответ 1
![enter image description here]()
Изменение порта SMTP с 587 на 465 решило эту проблему для меня:
SMTP server: smtp.mandrill.com
Use SMTP Authentication: true
Use SSL: true
SMTP Port: 465
Из того, что я могу сказать (отказ от ответственности: я ни в коем случае не являюсь экспертом по Hudson/Jenkins), плагин электронной почты Hudson/Jenkins поддерживает SMTP-связь с шифрованием SSL - однако эта реализация требует, чтобы сообщения шифровались с самого начала.
При подключении через порт 587 сервер на другом конце может ожидать команду STARTTLS (см. Эту статью SSL против TLS против STARTTLS). Эта команда отправляется с помощью простого текста, чтобы "обновить" соединение для использования SSL/TLS.
Вместо этого Хадсон/Дженкинс пытается начать согласование SSL на порту 587, который быстро отклоняется, что приводит к следующей ошибке:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
Я попытался добавить предложенные параметры JAVA "-Dmail.smtp.starttls.enable = true", чтобы включить TLS:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
К сожалению, это не решило проблему для меня.
После изменения порта на 465, согласование SSL прошло правильно, и связь прошла успешно.
Надеюсь, это поможет.
Примечание. Плагину Jenkins для электронной почты всегда нужны учетные данные SMTP, которые часто являются учетными данными отправителя, когда вы устанавливаете флажок "Использовать проверку подлинности SMTP" для любой конфигурации "SSL - порт 465" или "не SSL - порт 587".
Ответ 2
У меня была такая же проблема с Дженкинсом, но моя была установлена на Centos, а не на Apple OS. Я все еще думал разместить здесь решение, потому что A) вы могли бы внести необходимые корректировки в решение, и B) пользователи Linux и Jenkins могли бы воспользоваться этим.
Во всяком случае, найдите конфигурационный файл Jenkins (в CENTOS его в /etc/sysconfig/jenkins )
В нем найдите переменную JENKINS_JAVA_OPTIONS и добавьте следующую опцию "-Dmail.smtp.starttls.enable = true"
В моем случае это то, что я имел раньше:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
И это после:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
перезапустить сервер Jenkins (в Linux)
/etc/init.d/jenkins restart
Ответ 3
Для Jenkins в Windows
Откройте jenkins.xml и измените аргументы node
-Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable = true -jar "% BASE%\jenkins.war" --httpPort = 8080
Для smtp.live.com:
Установите SMTP-порт на 587 и снимите флажок Use SSL
Ответ 4
Даже после установки -Dmail.smtp.starttls.enable=true
, как упоминалось в @nsof ответах в файле /etc/default/jenkins
(debian/ubuntu), это не сработало для меня.
Трюк состоял в том, чтобы установить SMTP-порт на 587 и снять отметку Use SSL
, как показано ниже, после чего письмо было успешно отправлено.
![введите описание изображения здесь]()
Ответ 5
Попробуйте обходное решение, упомянутое в самой ошибке:
http://issues.hudson-ci.org/browse/HUDSON-2206
В Java:
props.put("mail.smtp.starttls.enable","true");
В Tomcat:
Добавить JAVA_OPTS=-Dmail.smtp.starttls.enable="true"
в файл конфигурации tomcat.
Ответ 6
Добавление -Dmail.smtp.starttls.enable = true, поскольку аргументы JAVA_OPTS решили мою проблему
Если ваши jenkins работают в автономном режиме, обновите JAVA_OPTS в /etc/sysconfig/jenkins
Если ваши jenkins запущены в обновлении tomcat JAVA_OPTS
- catalina.sh для unix
- catalina.bat для Windows
Ответ 7
Для Дженкинса на Ubuntu 16.04:
1 - отредактируйте файл конфигурации:
sudo nano /etc/default/jenkins
2 - Прокомментируйте существующий JAVA_ARGS, добавьте новый, показанный ниже:
#JAVA_ARGS="-Djava.awt.headless=true"
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
3 - Перезапустить Дженкинса
sudo service jenkins restart
![введите описание изображения здесь]()
Ответ 8
Для Jenkins на Red Hat Enterprise Linux Server версии 7.4 (Maipo)
отредактируйте /etc/sysconfig/jenkins, чтобы добавить
![введите описание изображения здесь]()
Конфигурационный файл службы Jenkins требует корневого доступа к машине.
В CloudBees Jenkins Enterprise вы можете найти этот файл под:
- /etc/default/jenkins: расположение большинства дистрибутивов Linux.
- /etc/sysconfig/jenkins: место для дистрибутива RedHat/CentOS.
- C:\Program Files\Jenkins\jenkins.xml: местоположение по умолчанию для Windows
Ответ 9
С Jenkins 2.134
у меня работало следующее:
-
JAVA_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
- Снимите флажок
Use SSL
!
Ответ 10
Это лучшее из возможных решений, если ни одно из перечисленных выше решений не работает.
https://issues.jenkins-ci.org/browse/JENKINS-47939