私の会社のSMTPサーバーを使用してビルド通知を電子メールで送信するようにJenkinsを設定しようとしています。ポート587の暗号化方法としてTLSを使用しています。ただし、電子メール通知が正しく機能しないようです。
これが私のHudson.Tasks.Mailer.xmlファイルですので、私の構成を確認できます(念のため、SMTP認証ユーザーとパスワードを削除し、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を実行しているマシン))についてはあまり詳しくありませんが、上記の回避策を使用して問題を解決できると思いました。しかし、回避策なので、私はそれをここに入れてみました:/ライブラリ/ Application Support/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サーバーを使用したほうがいいです。
SMTPポートを587から465に変更すると、この問題は解決しました。
SMTP server: smtp.mandrill.com
Use SMTP Authentication: true
Use SSL: true
SMTP Port: 465
(免責事項:私は決してHudson/Jenkinsの専門家ではありません)Hudson/Jenkins電子メールプラグインはSSL暗号化されたSMTP通信をサポートしていますが、この実装では通信が必要です最初から暗号化されています。
ポート587で接続する場合、反対側のサーバーはSTARTTLSコマンドを予期している可能性があります(この SSL vs TLS vs STARTTLS の記事を参照)。このコマンドは、SSL/TLSを使用するように接続を「アップグレード」するためにプレーンテキストを使用して送信されます。
Hudson/Jenkinsは代わりにポート587でSSLのネゴシエーションを開始しようとしますが、これはすぐに拒否され、次のエラーが発生します。
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電子メールプラグインは、「SSL-ポート465」の「SMTP認証を使用する」オプションをチェックすると、常に送信者の電子メール認証であるSMTP認証が必要になりますまたは「非SSL-ポート587」構成。
私はジェンキンスで同じ問題を抱えていましたが、私はApple OSではなくCentosにインストールされています。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
Windows上のJenkinsの場合
Jenkins.xmlを開き、argumentsノードを変更します
-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
バグ自体に記載されている回避策を試してください。
http://issues.hudson-ci.org/browse/HUDSON-2206
Javaの場合:
props.put("mail.smtp.starttls.enable","true");
Tomcatの場合:
追加 Java_OPTS=-Dmail.smtp.starttls.enable="true"
to Tomcat設定ファイル。
これは、上記の解決策がどれも機能しない場合に最適な解決策です。
ジェンキンスと2.134
以下は私のために働きました:
Java_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
Use SSL
!Red Hat Enterprise Linux Serverリリース7.4(Maipo)上のJenkinsの場合、/ etc/sysconfig/jenkinsを編集して追加します
Jenkinsサービス構成ファイルには、マシンへのrootアクセスが必要です。 CloudBees Jenkins Enterpriseでは、このファイルは次の場所にあります。
-Dmail.smtp.starttls.enable = trueをJava_OPTSの引数として追加すると問題が解決しました
Jenkinsがスタンドアロンモードで実行されている場合は、/ etc/sysconfig/jenkinsのJava_OPTSを更新します。jenkinsがTomcatで実行されている場合は、Java_OPTSを更新します。