CINXE.COM

<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="generator" content="Gatsby 5.14.1"/><meta data-react-helmet="true" content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta data-react-helmet="true" charSet="utf-8"/><meta data-react-helmet="true" content="width=device-width, initial-scale=1" name="viewport"/><meta data-react-helmet="true" content="ie=edge" http-equiv="x-ua-compatible"/><meta data-react-helmet="true" content="#2b5797" name="msapplication-TileColor"/><meta data-react-helmet="true" content="#ffffff" name="theme-color"/><meta data-react-helmet="true" content="@JenkinsCI" name="twitter:site"/><meta data-react-helmet="true" content="article" property="og:type"/><meta data-react-helmet="true" name="description" content="This plugin is a replacement for Jenkins&amp;#39;s email publisher. It allows to configure every aspect of email notifications: when an email is sent, who should receive it and what the email says"/><meta data-react-helmet="true" name="image" content="https://jenkins.io/images/logo-title-opengraph.png"/><meta data-react-helmet="true" property="og:url" content="https://plugins.jenkins.io/email-ext"/><meta data-react-helmet="true" property="og:site_name" content="Email Extension"/><meta data-react-helmet="true" property="og:title" content="Email Extension"/><meta data-react-helmet="true" property="apple-mobile-web-app-title" content="Email Extension"/><meta data-react-helmet="true" property="og:description" content="This plugin is a replacement for Jenkins&amp;#39;s email publisher. It allows to configure every aspect of email notifications: when an email is sent, who should receive it and what the email says"/><meta data-react-helmet="true" property="og:image" content="https://jenkins.io/images/logo-title-opengraph.png"/><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"/><meta data-react-helmet="true" name="twitter:creator" content="@JenkinsCI"/><meta data-react-helmet="true" name="twitter:title" content="Email Extension"/><meta data-react-helmet="true" name="twitter:description" content="This plugin is a replacement for Jenkins&amp;#39;s email publisher. It allows to configure every aspect of email notifications: when an email is sent, who should receive it and what the email says"/><meta data-react-helmet="true" name="twitter:image" content="https://jenkins.io/images/logo-title-opengraph.png"/><style data-href="/styles.80c65199d86590c1acd7.css" data-identity="gatsby-global-css">@import url(https://www.jenkins.io/assets/bower/bootstrap/css/bootstrap.min.css);@import url(https://www.jenkins.io/css/jenkins.css);@import url(https://www.jenkins.io/css/copy-to-clipboard.css);@import url(https://www.jenkins.io/stylesheets/styles.css);@import url(https://www.jenkins.io/css/footer.css);body .fixed.top{z-index:999}img{max-width:100%}body{overflow-x:hidden}body .showResults.item-finder>#plugin-search-form.HomeHeader{padding:.25rem .5rem}#plugin-search-form .SearchBox .SearchBtn,#plugin-search-form .SearchBox .ShowFilter{color:#fff!important}.SearchBox label.input-group{width:100%}.SearchBox .input-group .btn{border:1px solid #900}body .showResults.item-finder>.HomeHeader>.navbar{padding:0 10.5rem 0 0;width:100%}body .showResults.item-finder>.HomeHeader>.navbar>.nav,body .showResults.item-finder>.HomeHeader>.navbar>.nav>.SearchBox{padding:0!important;width:100%}body .showResults.item-finder>.HomeHeader>.navbar>.nav>.btn-group>button>i{line-height:1.5rem}body .showResults.item-finder>.HomeHeader>.navbar>.nav>.btn-group{position:absolute;right:0;top:0}body .showResults.item-finder>.HomeHeader>.navbar>.nav>.SearchBox .ShowFilter{max-width:10rem!important;width:18.6%!important}body .showResults.item-finder .filters{border-left:none;border-radius:0;border-top:none;box-shadow:-.25rem 0 #fff;left:.25rem;margin-top:-1px;padding-top:1rem!important;top:5px}body .showResults.item-finder .filters .row{border:none;padding:0}body .showResults.item-finder .filters .row>div{font-size:.75rem;overflow:hidden;padding:0 .5rem}body .showResults.item-finder .filters .row>div label{white-space:nowrap}body .showResults #plugin-search-form .nav>.btn-group{display:inline-block}body .showResults #plugin-search-form h1,body .showResults #plugin-search-form p,body .showResults #plugin-search-form:before{display:none}.page-link{cursor:pointer}.CategoryList,.CategoryList ul{list-style:none;margin:0;padding:0;vertical-align:middle}.CategoryList>li>label{font-weight:700}.CategoryList>li>ul{padding:0 0 1rem}.CategoryList>li{-moz-column-break-inside:avoid;break-inside:avoid-column;display:table;page-break-inside:avoid}h1 .anchor ion-icon,h2 .anchor ion-icon,h3 .anchor ion-icon,h4 .anchor ion-icon,h5 .anchor ion-icon,h6 .anchor ion-icon{visibility:hidden}h1 .anchor:focus ion-icon,h1:hover .anchor ion-icon,h2 .anchor:focus ion-icon,h2:hover .anchor ion-icon,h3 .anchor:focus ion-icon,h3:hover .anchor ion-icon,h4 .anchor:focus ion-icon,h4:hover .anchor ion-icon,h5 .anchor:focus ion-icon,h5:hover .anchor ion-icon,h6 .anchor:focus ion-icon,h6:hover .anchor ion-icon{visibility:visible}.filters .show-all{background:#168bb9;border:none;border-radius:2px;color:#fff;font-size:.67rem;font-weight:200;margin-left:.5rem;padding:.15rem .5rem}.isFiltered .filters .show-all{display:inline-block}#pluginDependencies h3{font-size:1.2rem;margin-top:.7rem}#pluginDependencies h2{margin-top:.7rem}.empty{opacity:.5}.NoLabels>.Categories label>input{display:none}.NoLabels>.Categories label>span{color:#0275d8;cursor:pointer;margin-left:0!important}h1.title{margin-right:2rem}:root{--code-background:#f6f8fa;--no-labels-background:#e5f8ff;--base-size-8:0.5rem;--base-size-16:1rem;--borderColor-default:#30363d;--borderColor-accent-emphasis:#1f6feb;--borderColor-success-emphasis:#238636;--borderColor-done-emphasis:#8957e5;--borderColor-attention-emphasis:#9e6a03;--borderColor-danger-emphasis:#da3633;--fgColor-accent:#4493f8;--fgColor-success:#3fb950;--fgColor-done:#a371f7;--fgColor-attention:#d29922;--fgColor-danger:#f85149}body #grid-box .NoLabels{background:#e5f8ff;background:var(--no-labels-background);padding:2rem 0}body #grid-box .NoLabels .CategoryList{font-size:.875rem}body #grid-box .NoLabels .CategoryList label>span{margin-left:.5rem}body #grid-box .NoLabels .Entry-box{display:block;font-size:.875rem;line-height:1rem;padding:.25rem 0}body #grid-box .NoLabels .Entry-box a{cursor:pointer}body #grid-box .NoLabels legend{font-size:1.1rem}#cb-item-finder-grid-box>.grid>.no-results{color:rgba(0,0,0,.667);display:block;padding:.5rem}.not-found-box{text-align:center}.not-found{display:inline-block;margin:6rem 0;padding:1.5rem 0 1.5rem 8rem;position:relative;text-align:left}.not-found h3{margin-bottom:.25rem}.not-found i{color:rgba(0,0,0,.25);display:block;font-size:8rem;left:0;line-height:8rem;position:absolute;top:0;vertical-align:middle}.not-found i.icon-plug{color:#000;font-size:6rem;left:.5rem;transform:scaleX(-1)}.markdown-alert{border-left:.25em solid #30363d;border-left:.25em solid var(--borderColor-default);color:inherit;margin-bottom:16px;padding:.5rem 1rem;padding:var(--base-size-8) var(--base-size-16)}.markdown-alert .markdown-alert-title{align-items:center;display:flex;font-weight:600;line-height:1}.octicon{fill:currentcolor;display:inline-block;margin-right:8px;overflow:visible!important;vertical-align:text-bottom}.markdown-alert>:first-child{margin-top:0}.markdown-alert.markdown-alert-note{border-left-color:#1f6feb;border-left-color:var(--borderColor-accent-emphasis)}.markdown-alert.markdown-alert-note .markdown-alert-title{color:#4493f8;color:var(--fgColor-accent)}.markdown-alert.markdown-alert-tip{border-left-color:#238636;border-left-color:var(--borderColor-success-emphasis)}.markdown-alert.markdown-alert-tip .markdown-alert-title{color:#3fb950;color:var(--fgColor-success)}.markdown-alert.markdown-alert-important{border-left-color:#8957e5;border-left-color:var(--borderColor-done-emphasis)}.markdown-alert.markdown-alert-important .markdown-alert-title{color:#a371f7;color:var(--fgColor-done)}.markdown-alert.markdown-alert-warning{border-left-color:#9e6a03;border-left-color:var(--borderColor-attention-emphasis)}.markdown-alert.markdown-alert-warning .markdown-alert-title{color:#d29922;color:var(--fgColor-attention)}.markdown-alert.markdown-alert-caution{border-left-color:#da3633;border-left-color:var(--borderColor-danger-emphasis)}.markdown-alert.markdown-alert-caution .markdown-alert-title{color:#f85149;color:var(--fgColor-danger)}#plugin-spinner{color:rgba(0,0,0,.33);cursor:pointer;display:block;left:0;padding:5rem 0;position:absolute;right:0;text-align:center;text-shadow:0 1px 1px #fff}#plugin-spinner>.swing{display:inline-block;padding:1rem}#plugin-spinner .icon-jenkins{display:block;font-size:10.5rem}.swing div{background:#fff;border:1px solid #69c;border-radius:50%;box-shadow:inset 0 0 1px #039,inset 0 0 0 1px #fff,0 5px 3px -2px rgba(0,0,0,.15),inset -5px -5px 7px 1px #168bb9,inset -4px -6px 10px 10px #69c;display:inline-block;height:32px;width:32px}.spinner-wrapper{margin:2rem auto auto;width:2rem}@keyframes ball-l{0%,50%{transform:rotate(0) translateX(0)}to{transform:rotate(0deg) translateX(-2.5em)}}@keyframes ball-r{0%{transform:rotate(0deg) translateX(2.5em)}50%,to{transform:rotate(0) translateX(0)}}@keyframes shadow-l-n{0%,50%{opacity:.5;transform:translateX(0)}to{opacity:.125;transform:translateX(-1.75em)}}@keyframes shadow-r-n{0%{opacity:.125;transform:translateX(1.75em)}50%,to{opacity:.5;transform:translateX(0)}}.swing-l{animation:ball-l .425s ease-in-out infinite alternate}.swing-r{animation:ball-r .425s ease-in-out infinite alternate}.maintainers>.maintainer{display:block}#pluginPage #grid-box .sidebar>.btn{display:block;margin-bottom:1rem;padding:.5rem 1rem .75rem 3.5rem;position:relative;text-align:left}#pluginPage #grid-box .sidebar>.btn i{font-size:2.25rem;left:.75rem;position:absolute;top:.5rem}#pluginPage #grid-box .sidebar>.btn>span{font-size:1.1rem;font-weight:500;line-height:1.3rem}#pluginPage #grid-box .sidebar>.btn>.v{display:block;font-size:.75rem;font-weight:200;white-space:normal}#pluginPage #grid-box .sidebar .lbl{display:inline-block;margin-right:.5rem}##pluginPage #grid-box .sidebar .label-link a{display:block;line-height:1.5rem;padding:4px 0}#pluginPage #grid-box .sidebar .chart{margin:1rem 0 0}.sidebar .sidebarSection{border-top:1px solid #aaa;margin-top:1rem;padding-top:.5rem}#pluginPage #grid-box{font-size:.875rem;margin-left:15px;margin-right:15px}#pluginPage #grid-box .download{margin:2rem 0 2rem -.5rem}#pluginPage #grid-box .alert>.alert-icon{background-position:top;background-repeat:no-repeat;background-size:3rem;display:inline-block;height:3rem;left:1rem;opacity:.54;position:absolute;top:calc(50% - 1.5rem);width:3rem}#grid-box .pluginContainer{margin:auto;max-width:72rem}.alert-warning .alert-icon .main-path{fill:#856404}.alert-danger .alert-icon .main-path{fill:#721c24}#pluginPage #grid-box .alert-with-icon{min-height:4rem;padding-left:5rem}#pluginPage #grid-box .security-warning-list{list-style:none;padding-left:0}#pluginPage #grid-box .active-warning{font-size:1rem;font-weight:bolder;margin-bottom:0}.row.flex{display:flex}.title-wrapper{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin:1rem auto 0;max-width:72rem;padding-left:15px;padding-right:15px}.plugin-id{margin-bottom:.5rem;opacity:.7}.content h1{font-size:2rem;margin:1.5rem 0 1rem}.content h2{font-size:1.5rem;margin-top:1.5rem}.content h3{font-size:1.25rem}.content h4{font-size:1.1rem}.filters .mask li>label{opacity:.5;position:relative}.filters .mask li>label:hover{color:#168bb9;opacity:1}.filters .mask li>label:before{background:#168bb9;content:"";display:block;font-size:0;height:.5rem;margin:.25rem .4rem;position:absolute;width:.5rem}.filters .mask li input[type=checkbox]{visibility:hidden}.filters label{cursor:pointer}.filterOptions{display:none}body .item-finder.Tiles .Entry-box{display:inline-block}.categories-box .list-group{box-shadow:0 3px 2px -1px rgba(0,0,0,.1);margin-top:-2.75rem;position:relative;z-index:2}.categories-box .list-group>.label{background:rgba(0,0,0,.5);border:none;border-radius:0;border-top-right-radius:10px;display:block}.categories-box .list-group>.label>.list-group-item{background:none;border:none;color:#fff;font-size:1rem;text-align:left}button.nav-link{background:#f9f9f9;border:1px solid #ccc;border-radius:3px;box-shadow:0 2px 4px -3px rgba(0,0,0,.25)}button.nav-link b{color:#666}.form-inline>.form-control.nav-link{background:#f9f9f9;border:1px solid #ccc;border-radius:3px;box-shadow:inset 0 2px 4px -2px rgba(0,0,0,.25);margin:0;padding:.25rem;width:11rem}.Tile,body .item-finder.Tiles a.item{background:#fff;border:.1rem solid #ccc;border-radius:3px;box-sizing:border-box;color:#666;display:block;font-size:.875rem;height:16.5rem;margin:.25rem;opacity:.9;padding:.67rem;-webkit-text-decoration:none!important;text-decoration:none!important;width:13rem}body .item-finder.Tiles .grid-box>div{padding:.5rem 0 2rem .5rem;text-align:left}body .item-finder.List a.item>div,body .item-finder.Tiles a.item>div{display:block;left:auto;position:relative;top:auto;width:auto}.Tile:hover,body .item-finder.Tiles a.item:hover{border:.1rem solid #999;box-shadow:0 2px 3px rgba(0,0,0,.25);opacity:1;-webkit-text-decoration:none;text-decoration:none}.Tile:hover h4,body .item-finder.Tiles a.item .Title:hover h4{color:#069}.Tile .Icon,body .item-finder.Tiles a.item .Icon{bottom:0;display:block;opacity:.75;position:absolute;right:.75rem}body .item-finder.Tiles a.item:hover .Icon{opacity:1}.Tile .Icon>i,body .item-finder.List a.item .Icon>i,body .item-finder.Tiles a.item .Icon>i{border-radius:3px;color:#fff;display:inline-block;font-size:1.33rem;font-style:normal;height:3rem;line-height:3rem;margin:-1px 0 0 -1px;text-shadow:rgba(0,0,0,.5) 1px 2px 1px;width:3rem}body .item-finder.Tiles a.item .Icon>i{margin-bottom:1rem}.Tile .Score,body .item-finder a.item .Score{margin:0 0 .67rem}.Tile .Score>.scr_4:after,body .item-finder a.item .Score>.scr_4:after{content:"\2605 \2605 \2605 \2605 \2606";display:block;text-align:center}.Tile .Downloads,body .item-finder a.item .Downloads{color:#999;font-size:.75rem;margin:0}.Tile .Labels,body .item-finder.Tiles a.item .Labels{line-height:.75rem;margin:.25rem 0;max-height:2rem;min-height:1rem;overflow:hidden}.Tile .Version span,body .item-finder.Tiles a.item .Version span{margin-right:.25rem}.Tile .Version span.v,body .item-finder.Tiles a.item .Version span.v{display:none;margin-right:1rem}.Tile .Version span.c:after,body .item-finder.Tiles a.item .Version span.c:after{content:"+"}body div .item-finder a.item>.Wiki{display:none}.Tile .Excerpt,body .item-finder.Tiles a.item .Excerpt{height:4.4rem;line-height:1.1rem;margin:0;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:normal}body .item-finder a.item .Excerpt a{color:#666;-webkit-text-decoration:none;text-decoration:none}.Tile .Excerpt div,.Tile .Excerpt p,body .item-finder.Tiles a.item .Excerpt div,body .item-finder.Tiles a.item .Excerpt p{display:inline}.Tile .Excerpt:after,.Tile h4:after,body .item-finder.Tiles a.item .Excerpt:after,body .item-finder.Tiles a.item h4:after{bottom:0;box-shadow:inset -250px 0 250px -200px #fff;content:" ";display:block;height:19px;height:1.1rem;position:absolute;right:0;width:100%}.Tile h4,body .item-finder a.item h4{color:#000;font-size:1rem;font-weight:400;line-height:1.1rem;margin:0 0 .25rem;max-height:2.2rem;overflow:hidden;position:relative}body .item-finder.Tiles a.item h4{min-height:2.2rem}.Tile .Authors>div,body .item-finder.List a.item .Authors>div,body .item-finder.List a.item .Labels>span,body .item-finder.List a.item .Version,body .item-finder.Tiles a.item .Authors>div,body .item-finder.Tiles a.item .Labels>span,body .item-finder.Tiles a.item .Version{color:var(--link-color);font-size:.75rem;line-height:1rem;margin-right:.5rem}body .item-finder.Tiles a.item .Authors{bottom:1rem;max-width:8rem;overflow:hidden;position:absolute;white-space:nowrap}.VirtualScroll>div>div{display:inline-block;height:auto!important;padding:.25rem;position:static!important;text-align:left;vertical-align:top;width:auto!important}.VirtualScroll>div>div.spinner{height:40px!important;margin:100px auto!important;overflow:hidden;position:relative!important;text-indent:999rem;white-space:nowrap;width:40px!important}.spinner .double-bounce2{animation:sk-bounce 2s ease-in-out infinite;background-color:rgba(0,0,0,.2);border-radius:50%;height:100%;left:0;opacity:.6;position:absolute;top:0;width:100%}.double-bounce2{animation-delay:-1s}@keyframes sk-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.tbody{display:table}.tbody>.thead{display:table-header-group}.tbody>.thead>.tr{display:table-row}.tbody>.thead>.tr>div{border-bottom:1px solid #ccc;display:table-cell;padding:.25rem}.tbody>.Row,body .item-finder.Table .Entry-box{display:table-row-group}.tbody>.Row>.Tile,body .item-finder.Table a.Entrty{display:table-row;height:auto;margin:0;padding:0;width:auto}.tbody>.Row>.Tile>div,body .item-finder.Table a.Entry>div{border-bottom:1px solid #eee;display:table-cell;height:auto;max-height:3.3rem;padding:.25rem}body .item-finder.Table a.Entry>div.Score{font-size:.875rem;margin:0;position:static}body .item-finder.Table a.Entry>div.Wiki{display:none}.tbody>.Row>.Tile>div.Title,body .item-finder.Table a.Entry>div.Title{width:20%}body .item-finder.Table a.Entry>div.Title>h4{color:#369;font-size:.875rem;font-weight:700}.tbody>.Row>.Tile>div.Icon,body .item-finder.Table a.Entry>div.Icon{display:none}.tbody>.Row>.Tile>div.Authors>div,body .item-finder.Table a.Entry>div.Authors>div{white-space:nowrap}.list>.list>.thead{display:none}.list>.item>.Tile,body .item-finder.List a.Entry{display:block;height:auto;padding:.5rem .5rem .5rem 6rem;position:relative;text-align:left;width:auto}.list>.item>.Tile>.Icon,.list>.item>.Tile>.Score,body .item-finder.List a.Entry .Icon,body .item-finder.List a.Entry .Score{left:.5rem;position:absolute;width:5rem}.list>.item>.Tile>.Score,body .item-finder.List a.Entry .Score{top:4rem}.list>.item>.Tile>.Excerpt,body .item-finder.List a.Entry .Excerpt{height:auto;margin:.5rem 0;max-height:3.3rem}.list>.item>.Tile>.Authors,body .item-finder.List a.Entry .Authors{margin:0}.list>.item>.Tile>.Authors>div,body .item-finder.List a.Entry .Authors>div{display:inline-block}.overview{padding-top:1.5rem}.overview p{font-size:1.1rem}body .btn-primary{background:#d24939;border-color:#900;color:#fff}body .btn-primary:hover{background:#335061;border-color:#88c5cc}nav .nav-item.active{box-shadow:inset 0 -2px #d33833}#cb-grid-toolbar .navbar-nav .nav-item{margin-left:.5rem}#cb-grid-toolbar .navbar-nav .nav-link{padding:.33rem}#cb-grid-toolbar .nav-link.dropdown-toggle{padding:.25rem .5rem}.categories-box .filter-keys.dropdown-menu{background:#f9f9f9;border-color:#ccc;border-radius:0;display:block;float:none;margin:-1px 0 0;max-width:9999rem;padding:0;position:static;width:auto}.categories-box .filter-keys.dropdown-menu a{color:#999;display:block;font-size:.875rem;padding:1px 2px;position:relative;width:auto}.categories-box .filter-keys.dropdown-menu a:hover{box-shadow:inset 0 100px rgba(0,0,0,.06)}.categories-box .filter-keys.dropdown-menu a:nth-child(odd){background:#eee}.categories-box .filter-keys.dropdown-menu a span{color:#369;display:inline-block;padding:.25rem 0 .25rem 2.25rem}.categories-box .filter-keys.dropdown-menu a .count{padding:.25rem .75rem;position:absolute;right:0;text-align:right;width:5rem}body .list-group>li>a.active,body .list-group>li>a.active:active,body .list-group>li>a.active:hover{background:#fff!important;box-shadow:inset 0 99rem rgba(200,240,255,.67);color:#000!important}#download-menu>.dropdown-menu{padding:2rem;width:50rem}nav .form-inline .input-group>.form-control{border-color:#900;transition:all .5s ease}form.showFilter nav .form-inline .ShowFilter{background:#900}nav .form-inline .input-group>.form-control:focus{border-color:red}form.search{float:right;opacity:.9}nav form.search .input-group:focus>input.form-control,nav form.search .input-group:hover>input.form-control,nav form.search .input-group>input.form-control:focus{opacity:1;width:12rem}.cardGroup{display:flex;overflow:hidden}.cardGroup__card{border:none;border-radius:0;flex:1 1 0%}a.card:hover{background-color:#eef3f5}.cardGroup__card+.cardGroup__card{border-left:1px solid #d7dbdd}.cardGroup__cardDescription{flex:1 1 auto}.card{border:1px solid #cad0d2;border-radius:4px;overflow:hidden}.card,.card__description{display:flex;flex-direction:column}.card__description{align-items:center;justify-content:center;padding:15px 0}.svg-icon{fill:#168bb9}.header .svg-icon{fill:#fff}.card__descriptionIcon{font-size:32px;margin-bottom:10px}.card__descriptionText{color:#57727c;font-size:18px;max-width:calc(100% - 30px);text-align:center}.card--fixedWidth{max-width:120px}.featureListItem{align-items:center;display:flex;padding:10px}.featureListItem+.featureListItem{border-top:1px solid #d7dbdd}.featureListItem--reverse{flex-direction:row-reverse}.featureListItem__description,.featureListItem__icon{padding:5px 15px}.featureListItem__icon{font-size:50px;line-height:0}.featureListItem__description{color:#000;width:100%}.formFooter{display:flex;overflow:hidden;width:100%}.formFooter__section{flex:1 1 100%}.formFooter__item+.formFooter__item{margin-left:5px}.underline{border-bottom:1px solid #cad0d2;border-radius:4px}#pluginPage #grid-box .content .main table{border:1px solid silver}#pluginPage #grid-box .content .main td{padding:1em}#grid-box .content{padding-top:1rem;word-break:break-word}#grid-box .content table{word-break:normal}.code-wrapper pre,.markdown-body pre{background-color:#f6f8fa;background-color:var(--code-background);border-radius:4px;padding:16px}.markdown-body clipboard-copy{display:none}@media (min-width:576px){.modal-dialog.wide{margin:.5rem auto;max-width:none}}@media (min-width:776px){.modal-dialog.wide{max-width:700px}}@media (prefers-color-scheme:dark){body{--no-labels-background:#212529;--code-background:#111;--search-background:#313539;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}.btn-close{filter:var(--bs-btn-close-white-filter)}}@font-face{font-family:ji;font-style:normal;font-weight:400;src:url(/static/ji-06ec8f35b7fcf628bc6eadd35a1af855.ttf) format("truetype"),url(/static/ji-d09d228cf69136a06df3444806157d4d.woff) format("woff"),url(/static/ji-351ec2c6ddd54431698e9cdfbc45c4bf.svg#ji) format("svg")}@font-face{font-family:icomoon;font-style:normal;font-weight:400;src:url(/static/icomoon-067def7ea015b2fb62e5bc963c5eec42.eot);src:url(/static/icomoon-067def7ea015b2fb62e5bc963c5eec42.eot#iefix) format("embedded-opentype"),url(/static/icomoon-3539e0715542420d24bb9fd27f21d3f8.ttf) format("truetype"),url(/static/icomoon-341ea04290ca1f972b7316b4fecd09b9.woff) format("woff"),url(/static/icomoon-3456ed3433d20110c82d649f1f0c6fb6.svg#icomoon) format("svg")}[class*=" icon-"],[class^=icon-]{speak:none;font-feature-settings:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ji,sans-serif!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon-jira:before{content:"\e677"}.icon-hipchat:before{content:"\e67e"}.icon-AWS_Elastic_BeanStalk:before{content:"\e67b"}.icon-mercurial:before{content:"\e673"}.icon-bitbucket:before{content:"\e67f"}.icon-git-logo:before{content:"\e674"}.icon-github:before{content:"\e675"}.icon-subversion:before{content:"\e676"}.icon-pivotal:before{content:"\e660"}.icon-vmware:before{content:"\e65e"}.icon-ec2:before{content:"\e65f"}.icon-siren:before{content:"\e656"}.icon-cloudbees-logo:before{content:"\e64a"}.icon-code:before{content:"\e647"}.icon-docker:before{content:"\e640"}.icon-fingerprint:before{content:"\e63a"}.icon-groovy:before{content:"\e638"}.icon-grails:before{content:"\e637"}.icon-git:before{content:"\e635"}.icon-sbt:before{content:"\e636"}.icon-gradle:before{content:"\e634"}.icon-ant:before{content:"\e632"}.icon-service:before{content:"\e62a"}.icon-service-o:before{content:"\e62b"}.icon-menu:before{content:"\e620"}.icon-build-hand:before{content:"\e61b"}.icon-featured_play_list:before{content:"\e90e"}.icon-menu2:before{content:"\e66b"}.icon-content-paste:before{content:"\e666"}.icon-format-color-fill:before{content:"\e658"}.icon-puzzle:before{content:"\e64f"}.icon-lightbulb:before{content:"\e901"}.icon-flow-merge:before{content:"\e671"}.icon-flow-switch:before{content:"\e672"}.icon-thermometer:before{content:"\e659"}.icon-arrow-shuffle:before{content:"\e630"}.icon-arrow-right:before{content:"\e631"}.icon-chat-3:before{content:"\e680"}.icon-health:before{content:"\e657"}.icon-grid:before,.icon-icons:before{content:"\e90f"}.icon-book2:before{content:"\e909"}.icon-screwdriver:before{content:"\e668"}.icon-clipboard:before{content:"\e667"}.icon-calendar:before{content:"\e663"}.icon-maven:before{content:"\e633"}.icon-brick-menu-o:before{content:"\e62c"}.icon-brick-o:before{content:"\e62d"}.icon-gear-menu-o:before{content:"\e627"}.icon-gear-menu:before{content:"\e626"}.icon-brick-menu:before{content:"\e621"}.icon-folder-menu:before{content:"\e622"}.icon-jenkins-alt:before{content:"\e617"}.icon-jenkins:before{content:"\e618"}.icon-jenkins-o:before{content:"\e619"}.icon-brick:before{content:"\e61a"}.icon-checkbox-checked:before{content:"\e623"}.icon-bulb:before{content:"\e900"}.icon-phone:before{content:"\e642"}.icon-checkmark:before{content:"\e681"}.icon-map-pin-fill:before{content:"\e678"}.icon-box-add:before{content:"\e67d"}.icon-box-remove:before{content:"\e67c"}.icon-clock:before{content:"\e661"}.icon-plug:before{content:"\e64e"}.icon-refresh:before{content:"\e679"}.icon-search:before{content:"\e63f"}.icon-move:before{content:"\e615"}.icon-bug:before{content:"\e611"}.icon-tools:before{content:"\e669"}.icon-pulse:before{content:"\e655"}.icon-key:before{content:"\e653"}.icon-lock:before{content:"\e64b"}.icon-gear:before{content:"\e624"}.icon-repo-forked:before{content:"\e610"}.icon-issue-closed:before{content:"\e608"}.icon-lightning:before{content:"\e603"}.icon-rainy:before{content:"\e604"}.icon-cloud:before{content:"\e605"}.icon-cloudy:before{content:"\e606"}.icon-sun:before{content:"\e607"}.icon-office:before{content:"\e600"}.icon-pencil:before{content:"\e905"}.icon-quill:before{content:"\e62e"}.icon-book:before{content:"\e63c"}.icon-copy:before{content:"\e66e"}.icon-copy2:before{content:"\e66f"}.icon-tag:before{content:"\e61c"}.icon-support:before{content:"\e66c"}.icon-phone2:before{content:"\e66d"}.icon-map:before{content:"\e651"}.icon-stopwatch:before{content:"\e648"}.icon-mobile:before{content:"\e643"}.icon-users:before{content:"\e641"}.icon-wrench:before{content:"\e66a"}.icon-settings:before{content:"\e614"}.icon-hammer:before{content:"\e601"}.icon-aid:before{content:"\e654"}.icon-pie:before{content:"\e65b"}.icon-stats:before{content:"\e639"}.icon-bars:before{content:"\e65c"}.icon-rocket:before{content:"\e649"}.icon-remove:before{content:"\e664"}.icon-signup:before{content:"\e682"}.icon-list:before{content:"\e910"}.icon-download:before{content:"\e670"}.icon-globe:before{content:"\e652"}.icon-flag:before{content:"\e644"}.icon-bookmark:before{content:"\e906"}.icon-star:before{content:"\e907"}.icon-star2:before{content:"\e908"}.icon-cancel-circle:before{content:"\e665"}.icon-loop:before{content:"\e65d"}.icon-table:before{content:"\e911"}.icon-insert-template:before{content:"\e64d"}.icon-console:before{content:"\e628"}.icon-facebook:before{content:"\e902"}.icon-facebook2:before{content:"\e903"}.icon-twitter:before{content:"\e904"}.icon-file-css:before{content:"\e629"}.icon-grid-alt:before{content:"\e912"}.icon-menu3:before{content:"\e913"}.icon-list2:before{content:"\e914"}.icon-screen:before{content:"\e60b"}.icon--:before{content:"\e90a"}.icon-help:before{content:"\e67a"}.icon-feather-o:before{content:"\e62f"}.icon-compass:before{content:"\e61d"}.icon-graduation:before{content:"\e65a"}.icon-box:before{content:"\e63b"}.icon-logout:before{content:"\e90b"}.icon-flow-cascade:before{content:"\e61e"}.icon-flow-branch:before{content:"\e60c"}.icon-flow-tree:before{content:"\e60d"}.icon-list-ul:before{content:"\e915"}.icon-stethoscope:before{content:"\e90d"}.icon-code-fork:before{content:"\e90c"}.icon-calendar-o:before{content:"\e662"}.icon-ban:before{content:"\e64c"}.icon-flag-checkered:before{content:"\e645"}.icon-envelope-o:before{content:"\e63d"}.icon-envelope:before{content:"\e63e"}.icon-cog:before{content:"\e625"}.icon-puzzle-piece:before{content:"\e61f"}.icon-folder-open-o:before{content:"\e60e"}.icon-folder-o:before{content:"\e60f"}.icon-thumbs-o-down:before{content:"\e609"}.icon-thumbs-o-up:before{content:"\e60a"}.icon-enlarge:before{content:"\e650"}.icon-shield:before{content:"\e646"}.icon-factory:before{content:"\e616"}.icon-unlocked:before{content:"\e612"}.icon-locked:before{content:"\e613"}.icon-uniE602:before{content:"\e602"} /*! * GitHub Light v0.5.0 * Copyright (c) 2012 - 2017 GitHub, Inc. * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) */.pl-c{color:#6a737d}.pl-c1,.pl-s .pl-v{color:#005cc5}.pl-e,.pl-en{color:#6f42c1}.pl-s .pl-s1,.pl-smi{color:#24292e}.pl-ent{color:#22863a}.pl-k{color:#d73a49}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#032f62}.pl-smw,.pl-v{color:#e36209}.pl-bu{color:#b31d28}.pl-ii{background-color:#b31d28;color:#fafbfc}.pl-c2{background-color:#d73a49;color:#fafbfc}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{color:#22863a;font-weight:700}.pl-ml{color:#735c0f}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#005cc5;font-weight:700}.pl-mi{color:#24292e;font-style:italic}.pl-mb{color:#24292e;font-weight:700}.pl-md{background-color:#ffeef0;color:#b31d28}.pl-mi1{background-color:#f0fff4;color:#22863a}.pl-mc{background-color:#ffebda;color:#e36209}.pl-mi2{background-color:#005cc5;color:#f6f8fa}.pl-mdr{color:#6f42c1;font-weight:700}.pl-ba{color:#586069}.pl-sg{color:#959da5}.pl-corl{color:#032f62;-webkit-text-decoration:underline;text-decoration:underline}@media (prefers-color-scheme:dark){.pl-c{color:#959da5}/*! * GitHub Dark v0.5.0 * Copyright (c) 2012 - 2017 GitHub, Inc. * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) */.pl-c1,.pl-s .pl-v{color:#c8e1ff}.pl-e,.pl-en{color:#b392f0}.pl-s .pl-s1,.pl-smi{color:#f6f8fa}.pl-ent{color:#7bcc72}.pl-k{color:#ea4a5a}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#79b8ff}.pl-ml,.pl-v{color:#fb8532}.pl-bu{color:#d73a49}.pl-c2,.pl-ii{background-color:#d73a49;color:#fafbfc}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{color:#7bcc72;font-weight:700}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#0366d6;font-weight:700}.pl-mi{color:#f6f8fa;font-style:italic}.pl-mb{color:#f6f8fa;font-weight:700}.pl-md{background-color:#ffeef0;color:#b31d28}.pl-mi1{background-color:#f0fff4;color:#176f2c}.pl-mc{background-color:#fffdef;color:#b08800}.pl-mi2{background-color:#959da5;color:#2f363d}.pl-mdr{color:#b392f0;font-weight:700}.pl-mo{color:#0366d6}.pl-ba{color:#ffeef0}.pl-sg{color:#6a737d}.pl-corl{color:#79b8ff;-webkit-text-decoration:underline;text-decoration:underline}}.InstallViaCLI-module--root--e7571{line-height:2rem;position:relative}.InstallViaCLI-module--root--e7571 span{margin-right:5px}.InstallViaCLI-module--root--e7571 code{display:block;margin-right:3rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ClipboardButton-module--copy-wrapper--e75f0{bottom:0;min-height:2rem;position:absolute;right:0}.ClipboardButton-module--copy-wrapper--e75f0 img{opacity:.87}.ClipboardButton-module--copy-success--e2048{line-height:1rem;position:absolute;right:4rem;white-space:nowrap}@media (prefers-color-scheme:dark){.ClipboardButton-module--copy-wrapper--e75f0 img{filter:invert(1)}}.PluginWikiContent-module--lightbox--13a29{align-items:center;background-color:rgba(0,0,0,.5);display:flex;height:100%;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:9999}.PluginWikiContent-module--lightbox--13a29 img{box-shadow:0 0 20px rgba(0,0,0,.5);max-height:90%;max-width:90%}.PluginWikiContent-module--lightbox--13a29 img:hover{cursor:pointer}.pluginHealth>div:last-child{margin-bottom:2rem}#pluginHealth--score{align-items:center;display:flex;justify-content:space-evenly;line-height:1;padding:20px 0 30px}#pluginHealth--score #pluginHealth--score-value{font-size:64px}#pluginHealth--score #pluginHealth--score-unit{font-size:24px}#pluginHealth--score #pluginHealth--score-label{font-size:14px;text-align:center;text-transform:uppercase}.pluginHealth--score-section{border-top:1px solid silver;padding:13px 0}.pluginHealth--score-section:last-of-type{border-bottom:1px solid silver;margin-bottom:2rem}.pluginHealth--score-section--collapsible-icon{display:flex;justify-content:flex-end;width:24px}.pluginHealth--score-section--collapsible-icon ion-icon{width:14px}.pluginHealth--score-section--header{align-items:center;cursor:pointer;display:flex;font-size:1.5rem;height:3rem;line-height:3rem;margin-top:.5rem}.pluginHealth--score-section--header--icon{align-items:center;display:flex;width:24px}.pluginHealth-score-icon--incorrect{color:#e6001f}.pluginHealth-score-icon--correct{color:#1ea64b}.pluginHealth--score-section--header-title{flex-grow:1;font-size:2rem;font-weight:400}.pluginHealth--score-section--header-score{font-size:1.5rem;font-weight:400}.pluginHealth--score-section--header-icon{width:40px}.pluginHealth-score-components--list{padding-left:40px;padding-right:24px}.pluginHealth-score-components--list.collapse{visibility:collapse}.pluginHealth--score-component{align-items:flex-start;display:flex;line-height:1.75;margin:14px 0 16px}.pluginHealth--score-component--icon{line-height:1;margin-right:6px}.pluginHealth--score-component--reasons{align-items:flex-start;display:flex;flex-direction:column;flex-grow:1}.pluginHealth--score-component--reasons span{line-height:1}#pluginReleases--container{margin-top:10px}#pluginReleases--container .item{margin-bottom:10px}#pluginReleases--container .card-text h2{font-size:1.4rem}#pluginReleases--container .card-text h3{font-size:1.2rem}#pluginReleases--container .card-text h4{font-size:1.1rem}#pluginReleases--container .card-text h5{font-size:1rem}#pluginReleases--container .github-icon{margin-left:7px}:root{--plugin-icon-width:2.25em;--plugin-padding:0.25em;--search-background:#eae9e8}#searchpage #grid-box{background:#eae9e8;background:var(--search-background)}.SearchResults--GridBox{display:flex;flex-flow:row wrap;justify-content:center;margin:0 2rem}.SearchResults--ItemBox{background:var(--background);border:.1rem solid #ccc;border-radius:3px;box-sizing:border-box;color:var(--bs-secondary);display:block;flex:0 0 auto;font-size:.85rem;height:19.5rem;margin:.25rem;min-height:6rem;opacity:.9;padding:.67rem;position:relative;text-align:left;-webkit-text-decoration:none!important;text-decoration:none!important;width:13rem}@media (max-width:768px){.SearchResults--ItemBox{width:calc(100% - .4rem)}}.SearchResults--ItemBox:hover{border:.1rem solid #999;box-shadow:0 2px 3px rgba(0,0,0,.25);cursor:pointer;opacity:1;-webkit-text-decoration:none;text-decoration:none}.Plugin--PluginContainer{display:block;height:100%;position:relative}.Plugin--PluginContainer *{color:var(--color)}.Plugin--PluginContainer a,.Plugin--PluginContainer a:visited{color:var(--link-color)}.Plugin--PluginContainer:hover{-webkit-text-decoration:none;text-decoration:none}.Plugin--IconContainer{bottom:3rem;display:block;grid-area:icon;opacity:.75;position:absolute;right:.25rem;z-index:9}.Plugin--IconContainer i{border-radius:3px;color:#fff;display:inline-block;font-size:1.33rem;font-style:normal;height:3rem;line-height:3rem;margin:-1px 0 0 -1px;text-align:center;text-shadow:rgba(0,0,0,.5) 1px 2px 1px;width:2.25em;width:var(--plugin-icon-width)}.Plugin--IconContainer i *{color:inherit}.Plugin--TitleContainer{grid-area:title}.Plugin--TitleContainer h4{color:var(--color);font-size:1rem;font-weight:400;line-height:1.1rem;margin:0 0 .25rem;max-height:2.2rem;overflow:hidden;position:relative}.Plugin--InstallsContainer{color:#999;font-size:.75rem;grid-area:installs;margin:0;padding:0}.Plugin--VersionContainer{color:var(--link-color);font-size:.75rem;grid-area:version;line-height:1rem;margin-right:.5rem;white-space:nowrap}.Plugin--VersionContainer span{margin-right:.25rem}.Plugin--LabelsContainer{grid-area:labels;line-height:.75rem;margin:.25rem 0;max-height:2rem;min-height:1rem;overflow:hidden}.Plugin--LabelsContainer div{color:var(--link-color);display:inline;font-size:.75rem;line-height:1rem;margin-right:.25rem}.Plugin--LabelsContainer div:after{content:", "}.Plugin--LabelsContainer div:last-child:after{content:""}.Plugin--LabelsContainer .label-link{white-space:nowrap}.Plugin--ExcerptContainer{word-wrap:break-word;grid-area:excerpt;height:4.4rem;line-height:1.1rem;margin:0;max-height:4.4rem;min-height:.5rem;overflow:hidden;padding:0;position:relative;text-overflow:ellipsis;white-space:normal}.Plugin--AuthorsContainer{bottom:3rem;grid-area:authors;max-width:8rem;overflow:hidden;position:absolute;white-space:nowrap}.Plugin--AuthorsContainer div{font-size:.75rem;line-height:1rem;margin-right:.5rem}.Plugin--HealthScoreContainer{bottom:0;position:absolute;width:100%}.Plugin--HealthScoreContainer div{display:flex;font-size:1rem;font-weight:700;justify-content:space-between;row-gap:.5rem}.SearchResults--List .SearchResults--ItemBox{height:auto;min-height:0;min-height:auto;width:calc(100% - 1rem)}.SearchResults--List .Plugin--IconContainer{bottom:auto;left:.25em;left:var(--plugin-padding);right:auto;top:.25em;top:var(--plugin-padding)}.SearchResults--List .Plugin--PluginContainer{padding-left:5em;padding-left:calc(var(--plugin-padding) + var(--plugin-icon-width)*2 + var(--plugin-padding));position:relative}.SearchResults--List .Plugin--PluginContainer .Plugin--AuthorsContainer{position:static}.SearchResults--List .Plugin--ExcerptContainer{height:auto;margin-bottom:1rem}.SearchResults--List .Plugin--HealthScoreContainer{margin-top:10px;position:static}.Pagination--Container{align-items:center;display:flex;flex-flow:column wrap;justify-content:center;margin-top:1rem}.SearchResultsCount{text-align:center}.SearchBox--Container .form-group{width:100%}.add-m{margin-left:8rem}@media only screen and (max-width:768px){.add-m{margin-left:1rem;margin-right:1rem}}.IndexPage--Container{align-items:start;background:#168bb9;border-radius:0;color:#fff;display:grid;grid-template-areas:"logo content";justify-content:center;justify-items:center;margin:0;min-height:350px;place-items:start center;text-align:center;transition:all .5s ease-in}.IndexPage--Container .logo{display:inline-block;grid-area:logo;height:294px;width:271px}.IndexPage--Container .content{grid-area:content;max-width:1024px}@media (max-width:992px){.IndexPage--Container{grid-template-areas:"logo" "content"}}.IndexPage--Container p{box-sizing:content-box;font-size:1.1rem;margin:1rem;text-align:center}.IndexPage--Container h1{font-feature-settings:normal;font-family:Georgia,Times,Times New Roman,serif;font-size:64px;font-style:normal;font-variant:normal;font-weight:700;line-height:70px}.IndexPage--Container fieldset{display:block;margin:1em 10%;text-align:center}.IndexPage--Container .input-group>.form-control{max-width:75%}.thank-you-note-container{padding:40px 16px}.thank-you-note-container,.thank-you-note-contents{align-items:center;display:flex;justify-content:center}.thank-you-note-contents{background-color:hsla(33,21%,82%,.3);border-radius:40px;height:-moz-fit-content;height:fit-content;max-width:-moz-fit-content;max-width:fit-content;padding:24px}@media (max-width:768px){.thank-you-note-contents{padding:16px}}.thank-you-note-card{align-items:center;display:flex;flex-direction:row;gap:24px;justify-content:center}@media (max-width:768px){.thank-you-note-card{gap:8px}}.thank-you-note-img-container{align-items:center;display:flex;justify-content:center}.thank-you-note-img{margin-bottom:auto;margin-top:auto}.thank-you-note-text{font-size:medium}@media (max-width:768px){.thank-you-note-text{font-size:small}}.Filters--Container{background:var(--background);border:1px solid rgba(0,0,0,.2);border-radius:3px;box-shadow:0 1px .5rem rgba(0,0,0,.15);font-size:.85rem;font-weight:200;padding:0 1rem 1.5rem;position:relative;text-align:left}.Filters--Container fieldset{margin-bottom:1rem}.Filters--Container legend{font-size:1rem}.Filters--Container label{display:block;float:none}.Filters--Container li>label>input,.Filters--Container li>label>span{display:inline-block;margin-left:.25rem}.Filters--Container .headerContainer{border-top:1px solid rgba(0,0,0,.1);padding:1rem}.ActiveFilters--FilterBox{text-align:center;white-space:nowrap;width:100%}.ActiveFilters--FilterBox div{display:inline-block;margin-right:.5rem;padding-right:.5rem;white-space:nowrap}.ActiveFilters--FilterBox .nav-link{cursor:pointer;display:inline-block;margin:0 .5rem 0 0}.ActiveFilters--FilterBox .nav-link:before{border:1px solid #ccc;border-radius:2;content:"x ";display:inline-block;font-size:.75rem;line-height:1em;margin:-.133rem .25rem 0 -.75rem;padding:0 0 .1rem;text-align:center;vertical-align:middle;width:1.3em}.SearchByAlgolia-module--root--26db9{padding-left:1em}</style><style type="text/css"> .anchor.before { position: absolute; top: 0; left: 0; transform: translateX(-100%); padding-right: 4px; } .anchor.after { display: inline-block; padding-left: 4px; } h1 .anchor svg, h2 .anchor svg, h3 .anchor svg, h4 .anchor svg, h5 .anchor svg, h6 .anchor svg { visibility: hidden; } h1:hover .anchor svg, h2:hover .anchor svg, h3:hover .anchor svg, h4:hover .anchor svg, h5:hover .anchor svg, h6:hover .anchor svg, h1 .anchor:focus svg, h2 .anchor:focus svg, h3 .anchor:focus svg, h4 .anchor:focus svg, h5 .anchor:focus svg, h6 .anchor:focus svg { visibility: visible; } </style><script> document.addEventListener("DOMContentLoaded", function(event) { var hash = window.decodeURI(location.hash.replace('#', '')) if (hash !== '') { var element = document.getElementById(hash) if (element) { var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop var clientTop = document.documentElement.clientTop || document.body.clientTop || 0 var offset = element.getBoundingClientRect().top + scrollTop - clientTop // Wait for the browser to finish rendering before scrolling. setTimeout((function() { window.scrollTo(0, offset - 0) }), 0) } } }) </script><style>.gatsby-image-wrapper{position:relative;overflow:hidden}.gatsby-image-wrapper picture.object-fit-polyfill{position:static!important}.gatsby-image-wrapper img{bottom:0;height:100%;left:0;margin:0;max-width:none;padding:0;position:absolute;right:0;top:0;width:100%;object-fit:cover}.gatsby-image-wrapper [data-main-image]{opacity:0;transform:translateZ(0);transition:opacity .25s linear;will-change:opacity}.gatsby-image-wrapper-constrained{display:inline-block;vertical-align:top}</style><noscript><style>.gatsby-image-wrapper noscript [data-main-image]{opacity:1!important}.gatsby-image-wrapper [data-placeholder-image]{opacity:0!important}</style></noscript><script type="module">const e="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;e&&document.body.addEventListener("load",(function(e){const t=e.target;if(void 0===t.dataset.mainImage)return;if(void 0===t.dataset.gatsbyImageSsr)return;let a=null,n=t;for(;null===a&&n;)void 0!==n.parentNode.dataset.gatsbyImageWrapper&&(a=n.parentNode),n=n.parentNode;const o=a.querySelector("[data-placeholder-image]"),r=new Image;r.src=t.currentSrc,r.decode().catch((()=>{})).then((()=>{t.style.opacity=1,o&&(o.style.opacity=0,o.style.transition="opacity 500ms linear")}))}),!0);</script><title data-react-helmet="true">Email Extension | Jenkins plugin</title><link data-react-helmet="true" href="https://www.jenkins.io/favicon.ico" rel="shortcut icon" type="image/x-icon"/><link data-react-helmet="true" href="https://www.jenkins.io/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><link data-react-helmet="true" href="https://www.jenkins.io/favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link data-react-helmet="true" href="https://www.jenkins.io/favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link data-react-helmet="true" href="/site.webmanifest" rel="manifest"/><link data-react-helmet="true" color="#5bbad5" href="https://www.jenkins.io/safari-pinned-tab.svg" rel="mask-icon"/><link data-react-helmet="true" href="https://plugins.jenkins.io/email-ext" rel="canonical"/><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/jquery/jquery.min.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/js/copy-to-clipboard.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/anchor-js/anchor.min.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/@popperjs/core/umd/popper.min.js"></script><script data-react-helmet="true" src="https://www.jenkins.io/assets/bower/bootstrap/js/bootstrap.min.js"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/lit@3.2.1/polyfill-support.js"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2.8.0/webcomponents-loader.js"></script><script data-react-helmet="true" data="ionicons" src="https://cdnjs.cloudflare.com/ajax/libs/ionicons/7.4.0/ionicons/ionicons.esm.js" type="module"></script><script data-react-helmet="true" data="ionicons" src="https://cdnjs.cloudflare.com/ajax/libs/ionicons/7.4.0/ionicons/ionicons.js"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/@jenkinsci/jenkins-io-components/+esm" type="module"></script><script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/@jenkinsci/jenkins-io-components/"></script><style data-react-helmet="true">html { min-height:100%; position: relative; }</style><link rel="sitemap" type="application/xml" href="/sitemap-index.xml"/><link rel="canonical" href="https://plugins.jenkins.io/email-ext/" data-baseprotocol="https:" data-basehost="plugins.jenkins.io"/><link rel="preconnect" href="https://jenkins-matomo.do.g4v.dev"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div id="pluginPage"><jio-navbar class="fixed-nav" theme="auto" property="https://plugins.jenkins.io/"></jio-navbar><div id="grid-box"><div class="title-wrapper"><h1 class="title">Email Extension</h1><button class="app-button">How to install</button></div><div class="row flex pluginContainer flex-column-reverse flex-md-row"><div class="col-md-9 main"><ul class="nav nav-pills"><li class="nav-item"><a aria-current="page" class="nav-link active" href="/email-ext/">Documentation</a></li><li class="nav-item"><a class="nav-link" href="/email-ext/releases/">Releases</a></li><li class="nav-item"><a class="nav-link" href="/email-ext/issues/">Issues</a></li><li class="nav-item"><a class="nav-link" href="/email-ext/dependencies/">Dependencies</a></li><li class="nav-item"><a class="nav-link" href="/email-ext/healthscore/">Health Score</a></li></ul><div><div class="content"><div><div id="plugin-content-readme" class="adoc" data-path="README.adoc"> <article class="markdown-body entry-content container-lg" itemprop="text"> <div class="markdown-heading" dir="auto"> </div> <div id="plugin-content-user-content-preamble" dir="auto"> <div dir="auto"> <div dir="auto"> <p dir="auto"><a href="https://ci.jenkins.io/job/Plugins/job/email-ext-plugin/job/main/" rel="nofollow"><span><img src="https://camo.githubusercontent.com/ea1301eeb2d0b9728b9121fe195c900f7bcb4ff5bbd9d22b58687e4fe4c49f4a/68747470733a2f2f63692e6a656e6b696e732e696f2f6a6f622f506c7567696e732f6a6f622f656d61696c2d6578742d706c7567696e2f6a6f622f6d61696e2f62616467652f69636f6e" alt="Build Status" data-canonical-src="https://ci.jenkins.io/job/Plugins/job/email-ext-plugin/job/main/badge/icon" style="max-width: 100%;"></span></a> <a href="https://github.com/jenkinsci/email-ext-plugin/graphs/contributors"><span><img src="https://camo.githubusercontent.com/68e17516c85e93d574bd38123e92681f1eb13010558b747c568d5cba7b45105f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6a656e6b696e7363692f656d61696c2d6578742d706c7567696e2e737667" alt="Contributors" data-canonical-src="https://img.shields.io/github/contributors/jenkinsci/email-ext-plugin.svg" style="max-width: 100%;"></span></a> <a href="https://plugins.jenkins.io/email-ext" rel="nofollow"><span><img src="https://camo.githubusercontent.com/570f3bd7b83ca4722e08163033b1b54af5ab5a70f46d88009e13bbcf6498fcf3/68747470733a2f2f696d672e736869656c64732e696f2f6a656e6b696e732f706c7567696e2f762f656d61696c2d6578742e737667" alt="Jenkins Plugin" data-canonical-src="https://img.shields.io/jenkins/plugin/v/email-ext.svg" style="max-width: 100%;"></span></a> <a href="https://github.com/jenkinsci/email-ext-plugin/releases/latest"><span><img src="https://camo.githubusercontent.com/bf7bf55c8910c9943ae442c815eecd517296ef08dc9947afc7699c02d2ea9413/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6a656e6b696e7363692f656d61696c2d6578742d706c7567696e2e7376673f6c6162656c3d6368616e67656c6f67" alt="GitHub release" data-canonical-src="https://img.shields.io/github/release/jenkinsci/email-ext-plugin.svg?label=changelog" style="max-width: 100%;"></span></a> <a href="https://plugins.jenkins.io/email-ext" rel="nofollow"><span><img src="https://camo.githubusercontent.com/6037febb96eda1f92dc01618a48839a6787bace6234ebc0468e674b61718fb9b/68747470733a2f2f696d672e736869656c64732e696f2f6a656e6b696e732f706c7567696e2f692f656d61696c2d6578742e7376673f636f6c6f723d626c7565" alt="Jenkins Plugin Installs" data-canonical-src="https://img.shields.io/jenkins/plugin/i/email-ext.svg?color=blue" style="max-width: 100%;"></span></a></p> </div> <div dir="auto"> <p dir="auto">This plugin allows you to configure every aspect of email notifications. You can customize when an email is sent, who should receive it, and what the email says.</p> </div> <div id="plugin-content-user-content-toc" dir="auto"> <div id="plugin-content-user-content-toctitle" dir="auto"></div> <ul dir="auto"> <li><a href="#plugin-content-introduction">Introduction</a></li> <li><a href="#plugin-content-questions-and-issues">Questions and issues</a></li> <li><a href="#plugin-content-documentation">Documentation</a></li> <li><a href="#plugin-content-getting-started">Getting started</a> <ul dir="auto"> <li><a href="#plugin-content-system-wide-configuration">System-wide configuration</a></li> <li><a href="#plugin-content-project-configuration">Project configuration</a></li> <li><a href="#plugin-content-pipeline-step">Pipeline step</a></li> </ul> </li> <li><a href="#plugin-content-usage">Usage</a> <ul dir="auto"> <li><a href="#plugin-content-pre-send-scripts-and-post-send-scripts">Pre-send scripts and post-send scripts</a></li> <li><a href="#plugin-content-triggers">Triggers</a></li> <li><a href="#plugin-content-tokens">Tokens</a></li> <li><a href="#plugin-content-jelly-script-content-templates">Jelly script content templates</a></li> <li><a href="#plugin-content-groovy-script-content-templates">Groovy script content templates</a></li> <li><a href="#plugin-content-attachments">Attachments</a></li> <li><a href="#plugin-content-jive-formatter">Jive formatter</a></li> </ul> </li> <li><a href="#plugin-content-related-plugins">Related plugins</a></li> </ul> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h2 id="plugin-content-introduction" class="heading-element" dir="auto" style="position: relative">Introduction<a href="#plugin-content-introduction" aria-label="introduction permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div dir="auto"> <div dir="auto"> <p dir="auto">This plugin extends the <a href="https://plugins.jenkins.io/mailer/" rel="nofollow">Mailer plugin</a>'s functionality by giving you more control. It provides customization of three areas:</p> </div> <div dir="auto"> <dl> <dt> Triggers </dt> <dd> <p dir="auto">Select the conditions that should cause an email notification to be sent.</p> </dd> <dt> Content </dt> <dd> <p dir="auto">Specify the content of each triggered email’s subject and body.</p> </dd> <dt> Recipients </dt> <dd> <p dir="auto">Specify who should receive an email when it is triggered.</p> </dd> </dl> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h2 id="plugin-content-questions-and-issues" class="heading-element" dir="auto" style="position: relative">Questions and issues<a href="#plugin-content-questions-and-issues" aria-label="questions and issues permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div dir="auto"> <div dir="auto"> <p dir="auto">If you need help, please post on the <a href="https://jenkins.io/mailing-lists/" rel="nofollow">Jenkins users mailing list</a> or <a href="https://stackoverflow.com/questions/tagged/email-ext" rel="nofollow">Stack Overflow</a>.</p> </div> <div dir="auto"> <p dir="auto">Report bugs and requests for enhancement in the <a href="https://issues.jenkins.io/" rel="nofollow">Jenkins issue tracker</a> (no support tickets, please). Use the <code>email-ext-plugin</code> component in the <code>JENKINS</code> project.</p> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h2 id="plugin-content-documentation" class="heading-element" dir="auto" style="position: relative">Documentation<a href="#plugin-content-documentation" aria-label="documentation permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div dir="auto"> <div dir="auto"> <ul dir="auto"> <li> <p dir="auto"><a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/docs/recipes.adoc">Recipes</a></p> </li> <li> <p dir="auto"><a href="https://github.com/jenkinsci/.github/blob/main/CONTRIBUTING.md">Contribution guidelines</a></p> </li> <li> <p dir="auto"><a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/CHANGELOG.adoc">Changelog</a></p> </li> </ul> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h2 id="plugin-content-getting-started" class="heading-element" dir="auto" style="position: relative">Getting started<a href="#plugin-content-getting-started" aria-label="getting started permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div dir="auto"> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-system-wide-configuration" class="heading-element" dir="auto" style="position: relative">System-wide configuration<a href="#plugin-content-system-wide-configuration" aria-label="system wide configuration permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">Before using this plugin from a project, you must first configure some system-wide settings. Go to the Jenkins system-wide configuration page (<strong>Manage Jenkins</strong>, <strong>Configure System</strong>).</p> </div> <div dir="auto"> <p dir="auto">The configuration for this plugin can be found in the section entitled <strong>Extended E-mail Notification</strong>. This configuration should match the settings for your SMTP mail server. This section mirrors that of the <a href="https://plugins.jenkins.io/mailer/" rel="nofollow">Mailer plugin</a> in the <strong>E-mail Notification</strong> section; however, there are a few additions. The fields labeled <strong>Default Subject</strong> and <strong>Default Content</strong> allow you to configure the subject and content on a system-wide level. The field labeled <strong>Default Recipients</strong> can be used to set a default list of email addresses for all projects using this plugin (and can be overridden at the project level); this can be used to greatly simplify the configuration you need to do for all projects.</p> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-project-configuration" class="heading-element" dir="auto" style="position: relative">Project configuration<a href="#plugin-content-project-configuration" aria-label="project configuration permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">For a project to use this plugin, you need to enable it in the project configuration page. In the <strong>Post-build Actions</strong> section, click on <strong>Add post-build action</strong> and then select <strong>Editable Email Notification</strong>.</p> </div> <div dir="auto"> <p dir="auto">There are three main fields that you can edit when this plugin is enabled:</p> </div> <div dir="auto"> <dl> <dt> Project Recipient List </dt> <dd> <p dir="auto">This is a comma (or whitespace) separated list of email recipients. Allows you to specify a single recipient list for each email that is sent.</p> </dd> <dt> Default Subject </dt> <dd> <p dir="auto">This allows you to configure a token (more about tokens later) that can be used to easily configure all email subjects for the project.</p> </dd> <dt> Default Content </dt> <dd> <p dir="auto">Same as <strong>Default Subject</strong>, but for the email body instead of the subject.</p> </dd> </dl> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-pipeline-step" class="heading-element" dir="auto" style="position: relative">Pipeline step<a href="#plugin-content-pipeline-step" aria-label="pipeline step permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">This plugin can be used from <a href="https://www.jenkins.io/doc/book/pipeline/" rel="nofollow">Pipeline</a> via the <a href="https://jenkins.io/doc/pipeline/steps/email-ext/" rel="nofollow"><code>emailext</code></a> step:</p> </div> <div dir="auto"> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="emailext body: &#x27;Test Message&#x27;, subject: &#x27;Test Subject&#x27;, to: &#x27;test@example.com&#x27;"> <pre>emailext <span class="pl-c1">body</span>: <span class="pl-s"><span class="pl-pds">'</span>Test Message<span class="pl-pds">'</span></span>, <span class="pl-c1">subject</span>: <span class="pl-s"><span class="pl-pds">'</span>Test Subject<span class="pl-pds">'</span></span>, <span class="pl-c1">to</span>: <span class="pl-s"><span class="pl-pds">'</span>test@example.com<span class="pl-pds">'</span></span></pre> </div> </div> </div> <div dir="auto"> <p dir="auto">Use the <code>recipientProviders</code> parameter to add additional recipients. For example, to add all the people who caused a change in the change set and the user who initiated the build:</p> </div> <div dir="auto"> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="emailext body: &#x27;Test Message&#x27;, recipientProviders: [developers(), requestor()], subject: &#x27;Test Subject&#x27;, to: &#x27;test@example.com&#x27;"> <pre>emailext <span class="pl-c1">body</span>: <span class="pl-s"><span class="pl-pds">'</span>Test Message<span class="pl-pds">'</span></span>, <span class="pl-c1">recipientProviders</span>: [developers(), requestor()], <span class="pl-c1">subject</span>: <span class="pl-s"><span class="pl-pds">'</span>Test Subject<span class="pl-pds">'</span></span>, <span class="pl-c1">to</span>: <span class="pl-s"><span class="pl-pds">'</span>test@example.com<span class="pl-pds">'</span></span></pre> </div> </div> </div> <div dir="auto"> <p dir="auto">The recipient providers from this plugin can also be used with the <a href="https://plugins.jenkins.io/mailer/" rel="nofollow">Mailer plugin</a>. For example, to add culprits and the user who initiated the build:</p> </div> <div dir="auto"> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="step([$class: &#x27;Mailer&#x27;, notifyEveryUnstableBuild: true, recipients: emailextrecipients([culprits(), requestor()])])"> <pre>step([$<span class="pl-c1">class</span>: <span class="pl-s"><span class="pl-pds">'</span>Mailer<span class="pl-pds">'</span></span>, <span class="pl-c1">notifyEveryUnstableBuild</span>: <span class="pl-c1">true</span>, <span class="pl-c1">recipients</span>: emailextrecipients([culprits(), requestor()])])</pre> </div> </div> </div> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h2 id="plugin-content-usage" class="heading-element" dir="auto" style="position: relative">Usage<a href="#plugin-content-usage" aria-label="usage permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div dir="auto"> <div dir="auto"> <p dir="auto">To see the advanced configuration for this plugin, click on the <strong>Advanced</strong> button. This section allows you to specify recipients for each type of email trigger as well as a pre-send script that can be used to modify the email prior to sending.</p> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-pre-send-scripts-and-post-send-scripts" class="heading-element" dir="auto" style="position: relative">Pre-send scripts and post-send scripts<a href="#plugin-content-pre-send-scripts-and-post-send-scripts" aria-label="pre send scripts and post send scripts permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">This feature allows you to write a script that can modify the <a href="https://eclipse-ee4j.github.io/mail/docs/api/jakarta.mail/jakarta/mail/internet/MimeMessage.html" rel="nofollow"><code>MimeMessage</code></a> object before or after sending the email. This allows adding custom headers, modifying the body, etc. Predefined variables include:</p> </div> <div dir="auto"> <dl> <dt> <code>msg</code> ( <a href="https://eclipse-ee4j.github.io/mail/docs/api/jakarta.mail/jakarta/mail/internet/MimeMessage.html" rel="nofollow"><code>jakarta.mail.internet.MimeMessage</code></a>) </dt> <dd> <p dir="auto">The MIME email message object, which can be modified.</p> </dd> <dt> <code>logger</code> ( <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html" rel="nofollow"><code>java.io.PrintStream</code></a>) </dt> <dd> <p dir="auto">A <code>PrintStream</code> that can be used to log messages to the build log.</p> </dd> <dt> <code>build</code> ( <a href="https://javadoc.jenkins.io/hudson/model/AbstractBuild.html" rel="nofollow"><code>hudson.model.AbstractBuild</code></a>) </dt> <dd> <p dir="auto">The build this message belongs to (only use with Freestyle projects).</p> </dd> <dt> <code>run</code> ( <a href="https://javadoc.jenkins.io/hudson/model/Run.html" rel="nofollow"><code>hudson.model.Run</code></a>) </dt> <dd> <p dir="auto">The build this message belongs to (may be used with Freestyle projects or Pipeline).</p> </dd> <dt> <code>cancel</code> (boolean) </dt> <dd> <p dir="auto">When set to true, cancels the sending of the email.</p> </dd> </dl> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-triggers" class="heading-element" dir="auto" style="position: relative">Triggers<a href="#plugin-content-triggers" aria-label="triggers permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">By default, the only trigger configured is the <strong>Failure - Any</strong> trigger. To add more triggers, select one from the drop-down and it will be added to the list. To see what conditions must be met for this plugin to send an email, click on the "?" (question mark) next to the trigger.</p> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h4 id="plugin-content-extended-email-publisher-triggers" class="heading-element" dir="auto" style="position: relative">Extended Email Publisher Triggers<a href="#plugin-content-extended-email-publisher-triggers" aria-label="extended email publisher triggers permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <div dir="auto"> <p dir="auto">The following triggers are available as part of the Extended Email Publisher plugin, other plugins can provide triggers as well through the extension point defined in the Extended Email Publisher:</p> </div> <div dir="auto"> <dl> <dt> Aborted </dt> <dd> <p dir="auto">An email will be sent if the build status is "Aborted". A build is aborted via the UI or API, but normally requires some sort of user intervention to occur. An aborted build is stopped during its execution.</p> </dd> <dt> Always </dt> <dd> <p dir="auto">Always triggers an email after the build, regardless of the status of the build.</p> </dd> <dt> Before Build </dt> <dd> <p dir="auto">An email will be sent when the build begins, but after SCM polling has completed.</p> </dd> <dt> Failure → Unstable (Test Failures) </dt> <dd> <p dir="auto">An email will be sent any time the build goes from failing (compilation or build step failures), to unstable (unit test failures). This basically means that all the builds steps were successful, but there are still tests failing.</p> </dd> <dt> Failure - Any </dt> <dd> <p dir="auto">An email will be sent any time the build fails. If the "Failure - Still" trigger is configured, and the previous build status was "Failure", then the "Failure - Still" trigger will send an email instead.</p> </dd> <dt> Failure - 1st </dt> <dd> <p dir="auto">An email will be sent when the build status changes from "Success" to "Failure".</p> </dd> <dt> Failure - 2nd </dt> <dd> <p dir="auto">An email will be sent when the build fails twice in a row after a successful build.</p> </dd> <dt> Failure - Still </dt> <dd> <p dir="auto">An email will be sent if the build status is "Failure" for two or more builds in a row.</p> </dd> <dt> Failure - X </dt> <dd> <p dir="auto">An email will be sent when the build fails X times in a row after a successful build</p> </dd> <dt> Fixed </dt> <dd> <p dir="auto">An email will be sent when the build status changes from "Failure" or "Unstable" to "Success".</p> </dd> <dt> Not Built </dt> <dd> <p dir="auto">An email will be sent if the build status is "Not Built". This status code is used in a multi-stage build (like maven2) where a problem in earlier stage prevented later stages from building.</p> </dd> <dt> Script - After Build </dt> <dd> <p dir="auto">Allows the user to define a script that is executed to determine if an email should be sent <strong>AFTER</strong> the build occurs. The last line of the script should resolve to true to send an email, or false to not send an email. See <a href="#plugin-content-script_trigger_options">Script Trigger Options</a> below for parameters available to the script.</p> </dd> <dt> Script - Before Build </dt> <dd> <p dir="auto">Allows the user to define a script that is executed to determine if an email should be sent <strong>BEFORE</strong> the build occurs. The last line of the script should resolve to true to send an email, or false to not send an email. See <a href="#plugin-content-script_trigger_options">Script Trigger Options</a> below for parameters available to the script.</p> </dd> <dt> Status Changed </dt> <dd> <p dir="auto">An email will be sent if the build status changes.</p> </dd> <dt> Success </dt> <dd> <p dir="auto">An email will be sent if the build status is "Successful". If the "Fixed" trigger is configured, and the previous build status was "Failure" or "Unstable", then the "Fixed" trigger will send an email instead.</p> </dd> <dt> Test Improvement </dt> <dd> <p dir="auto">An email will be sent any time there is an improvement. A build is considered to have improved whenever it has fewer test failures than the previous build. If the current failure count went to 0 (no more test failures) this trigger will NOT send an email.</p> </dd> <dt> Test Regression </dt> <dd> <p dir="auto">An email will be sent any time there is a regression. A build is considered to regress whenever it has more failures than the previous build, or if there are new tests that failed.</p> </dd> <dt> Unstable (Test Failures) </dt> <dd> <p dir="auto">An email will be sent any time the build is unstable. A build is unstable if there are test failures, but all the build steps completed successfully. If the "Unstable - Still" trigger is configured, and the previous build status was "Unstable", then the "Unstable - Still" trigger will send an email instead.</p> </dd> <dt> Unstable (Test Failures) - 1st </dt> <dd> <p dir="auto">An email will be sent when the build status changes from anything to "Unstable".</p> </dd> <dt> Unstable (Test Failures) - Still </dt> <dd> <p dir="auto">An email will be sent if the build status is "Unstable" for two or more builds in a row. A build is unstable if there are test failures, but all the build steps completed successfully.</p> </dd> <dt> Unstable (Test Failures)/Failure → Success </dt> <dd> <p dir="auto">An email will be sent when the build status changes from "Failure" or "Unstable" to "Success". Intermediate "Aborted" builds are ignored.</p> </dd> </dl> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h4 id="plugin-content-common-trigger-options" class="heading-element" dir="auto" style="position: relative">Common Trigger Options<a href="#plugin-content-common-trigger-options" aria-label="common trigger options permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <div dir="auto"> <p dir="auto">Once you have added a trigger, you have several common options (there may be additional options available depending on the trigger implementation):</p> </div> <div dir="auto"> <dl> <dt> Recipient List </dt> <dd> <p dir="auto">Add this recipient provider if you would like to have the email sent to the <strong>Project Recipient List</strong> configured above.</p> </dd> <dt> Developers </dt> <dd> <p dir="auto">Add this recipient provider to send the email to anyone who checked in code for the last build. This plugin will generate an email address based on the committer’s ID and an appended <strong>Default user e-mail suffix</strong> from the <strong>Extended E-mail Notification section</strong> of the <strong>Configure System</strong> page. For example, if a change was committed by someone with an ID of <code>first.last</code>, and the default user e-mail suffix is <code>@example.com</code>, then an email will be sent to <code>first.last@example.com</code>.</p> </dd> <dt> Requestor </dt> <dd> <p dir="auto">Add this recipient provider to send an email to the user who initiated the build (if initiated by a user manually).</p> </dd> <dt> Include Culprits </dt> <dd> <p dir="auto">If this recipient provider <em>and</em> the <strong>Developers</strong> recipient provider are added, emails will include everyone who committed since the last successful build.</p> </dd> <dt> Previous </dt> <dd> <p dir="auto">Add this recipient provider to send an email to the the culprits, requestor and developers of the previous build(s).</p> </dd> <dt> Advanced </dt> <dd> <p dir="auto">Configure properties at a per-trigger level:</p> <div dir="auto"> <dl> <dt> Recipient List </dt> <dd> <p dir="auto">A comma (or whitespace) separated list of email address that should receive this email if it is triggered. This list is appended to the <strong>Project Recipient List</strong> described above.</p> </dd> <dt> Subject </dt> <dd> <p dir="auto">Specify the subject line of the selected email.</p> </dd> <dt> Content </dt> <dd> <p dir="auto">Specify the body of the selected email.</p> </dd> </dl> </div> </dd> </dl> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h4 id="plugin-content-script-trigger-options" class="heading-element" dir="auto" style="position: relative">Script Trigger Options<a href="#plugin-content-script-trigger-options" aria-label="script trigger options permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h4> </div> <div dir="auto"> <p dir="auto">You can also add <strong>Script - After Build</strong> or <strong>Script - Before Build</strong> triggers to a project to use Groovy scripts to define before or after the build whether or not the email will be sent. The script is defined in the <strong>Groovy Script</strong> section of the trigger. There are four objects added to the model for the script to use to interact with the build:</p> </div> <div dir="auto"> <dl> <dt> <code>out</code> ( <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html" rel="nofollow"><code>java.io.PrintStream</code></a>) </dt> <dd> <p dir="auto">A <code>PrintStream</code> that can be used to log messages to the build log.</p> </dd> <dt> <code>build</code> ( <a href="https://javadoc.jenkins.io/hudson/model/AbstractBuild.html" rel="nofollow"><code>hudson.model.AbstractBuild</code></a>) </dt> <dd> <p dir="auto">This is the current build, usually a subclass of <code>AbstractBuild</code>.</p> </dd> <dt> <code>project</code> ( <a href="https://javadoc.jenkins.io/hudson/model/AbstractProject.html" rel="nofollow"><code>hudson.model.AbstractProject</code></a>) </dt> <dd> <p dir="auto">The project object that the current build was started from, usually a subclass of <code>AbstractProject</code>.</p> </dd> <dt> <code>rooturl</code> ( <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html" rel="nofollow"><code>String</code></a>) </dt> <dd> <p dir="auto">The Jenkins instance root URL, useful for links.</p> </dd> </dl> </div> <div dir="auto"> <p dir="auto">The last line in the script should resolve to a boolean (<code>true</code> or <code>false</code>):</p> </div> <div dir="auto"> <div dir="auto"> Script - Before Build: </div> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// this could be used to notify people that a new build is happening build.previousBuild.result.toString().equals(&#x27;FAILURE&#x27;)"> <pre><span class="pl-c"><span class="pl-c">//</span> this could be used to notify people that a new build is happening</span> build<span class="pl-k">.</span>previousBuild<span class="pl-k">.</span>result<span class="pl-k">.</span>toString()<span class="pl-k">.</span>equals(<span class="pl-s"><span class="pl-pds">'</span>FAILURE<span class="pl-pds">'</span></span>)</pre> </div> </div> </div> <div dir="auto"> <div dir="auto"> Script - After Build: </div> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// only send am email if the build failed and &#x27;mickeymouse&#x27; had a commit build.result.toString().equals(&#x27;FAILURE&#x27;) &#x26;&#x26; build.hasParticipant(User.get(&#x27;mickeymouse&#x27;))"> <pre><span class="pl-c"><span class="pl-c">//</span> only send am email if the build failed and 'mickeymouse' had a commit</span> build<span class="pl-k">.</span>result<span class="pl-k">.</span>toString()<span class="pl-k">.</span>equals(<span class="pl-s"><span class="pl-pds">'</span>FAILURE<span class="pl-pds">'</span></span>) <span class="pl-k">&#x26;&#x26;</span> build<span class="pl-k">.</span>hasParticipant(<span class="pl-k">User</span><span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">'</span>mickeymouse<span class="pl-pds">'</span></span>))</pre> </div> </div> </div> <div dir="auto"> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// only send an email if the word {{ERROR}} is found in build logs build.logFile.text.readLines().any { it =~ /.*ERROR.*/ }"> <pre><span class="pl-c"><span class="pl-c">//</span> only send an email if the word {{ERROR}} is found in build logs</span> build<span class="pl-k">.</span>logFile<span class="pl-k">.</span>text<span class="pl-k">.</span>readLines()<span class="pl-k">.</span>any { it <span class="pl-k">=~</span> <span class="pl-sr"><span class="pl-pds">/</span>.*ERROR.*<span class="pl-pds">/</span></span> }</pre> </div> </div> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-tokens" class="heading-element" dir="auto" style="position: relative">Tokens<a href="#plugin-content-tokens" aria-label="tokens permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">This plugin uses <strong>tokens</strong> to allow dynamic data to be inserted into recipient list, subject line, or body. A <strong>token</strong> is a string that starts with a <code>$</code> (dollar sign) and is terminated by whitespace. When an email is triggered, a token in the subject or content fields will be replaced dynamically by the actual value that it represents. Also, the value of a token can contain other tokens that will themselves be replaced by actual content. For instance, the <code>$DEFAULT_SUBJECT</code> token is replaced by the text (and other tokens) that is in the <strong>Default Subject</strong> field from the <strong>Extended E-mail Notification</strong> section of the <strong>Configure System</strong> page. Similarly, the <code>$PROJECT_DEFAULT_SUBJECT</code> token will be replaced by the value of the <strong>Default Subject</strong> field from the project configuration page.</p> </div> <div dir="auto"> <p dir="auto">This plugin sets the email content fields with default values when you enable it for your project. The <strong>Default Subject</strong> and <strong>Default Content</strong> fields on the project configuration page default to <code>$DEFAULT_SUBJECT</code> and <code>$DEFAULT_CONTENT</code> (respectively), delegating to the the system-wide configuration from the <strong>Extended E-mail Notification</strong> section of the <strong>Configure System</strong> page. Similarly, the per-trigger content fields default to <code>$PROJECT_DEFAULT_SUBJECT</code> and <code>$PROJECT_DEFAULT_CONTENT</code>, delegating to the project’s configuration. Since the value of a token can contain other tokens, this provides different points of configuration that can allow you to quickly make changes at the broadest level (all projects), the narrowest level (individual emails), and in-between (individual projects).</p> </div> <div dir="auto"> <p dir="auto">To see a list of all available email tokens and what they display, click on the "?" (question mark) associated with the <strong>Content Token Reference</strong> in the <strong>Editable Email Notification</strong> section of the project configuration page.</p> </div> <div dir="auto"> <p dir="auto">As of version 2.22, this plugin also supports tokens provided by the <a href="https://plugins.jenkins.io/token-macro/" rel="nofollow">Token Macro plugin</a>. You can see the available <strong>Token Macro Plugin Tokens</strong> below the <strong>Extended Email Publisher Specific Tokens</strong> when you click on the "?" (question mark) associated with the <strong>Content Token Reference</strong> in the <strong>Editable Email Notification</strong> section of the project configuration page.</p> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-jelly-script-content-templates" class="heading-element" dir="auto" style="position: relative">Jelly script content templates<a href="#plugin-content-jelly-script-content-templates" aria-label="jelly script content templates permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <div dir="auto"> <a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/email-ext-plugin/blob/main/docs/images/html.jpg"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/email-ext-plugin@main/docs/images/html.jpg" alt="html" style="max-width: 100%;"></a> </div> </div> <div dir="auto"> <div dir="auto"> <a target="_blank" rel="noopener noreferrer" href="https://github.com/jenkinsci/email-ext-plugin/blob/main/docs/images/txt.jpg"><img src="https://cdn.jsdelivr.net/gh/jenkinsci/email-ext-plugin@main/docs/images/txt.jpg" alt="txt" style="max-width: 100%;"></a> </div> </div> <div dir="auto"> <p dir="auto">New to version 2.9 is the ability to use Jelly scripts. Jelly scripts are powerful in that you can hook into the Jenkins API to get any information you want or need. Two Jelly scripts are packaged with this plugin, and it is also possible to write your own.</p> </div> <div dir="auto"> <p dir="auto">There are two default Jelly scripts available out of the box; one is designed for HTML emails, and the other is designed for text emails. See the screenshots below for what these templates look like. You can specify which script you want by using the <code>template</code> argument. The usage for each type of script is as follows:</p> </div> <div dir="auto"> <dl> <dt> Text-only Jelly script </dt> <dd> <p dir="auto"><code>${JELLY_SCRIPT,template="text"}</code></p> </dd> <dt> HTML Jelly script </dt> <dd> <p dir="auto"><code>${JELLY_SCRIPT,template="html"}</code></p> </dd> </dl> </div> <div dir="auto"> <p dir="auto">You can also write your own Jelly scripts. The Jelly scripts are particularly powerful since they provide a hook into the Jenkins API, including <a href="https://javadoc.jenkins.io/hudson/model/AbstractBuild.html" rel="nofollow"><code>hudson.model.AbstractBuild</code></a> and <a href="https://javadoc.jenkins.io/hudson/model/AbstractProject.html" rel="nofollow"><code>hudson.model.AbstractProject</code></a>. For an example on how to do this, take a look at the existing <a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/src/main/resources/hudson/plugins/emailext/templates/html.jelly"><code>html</code></a> and <a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/src/main/resources/hudson/plugins/emailext/templates/text.jelly"><code>text</code></a> scripts.</p> </div> <div dir="auto"> <p dir="auto">Using custom Jelly scripts (those not packaged with this plugin) requires the cooperation of your Jenkins administrator. The steps are relatively simple:</p> </div> <div dir="auto"> <ol dir="auto"> <li> <p dir="auto">Create the Jelly script template. The name of the script should be <code>&#x3C;name>.jelly</code>.</p> <div dir="auto"> <markdown-accessiblity-table> <div class="table-responsive"><table class="table table-bordered"> <tbody> <tr> <td> <div dir="auto"> ❗ </div> </td> <td> It is important that the name ends in <code>.jelly</code>. </td> </tr> </tbody> </table></div> </markdown-accessiblity-table> </div> </li> <li> <p dir="auto">Have your Jenkins administrator place the script inside <code>${JENKINS_HOME}/email-templates/</code>.</p> </li> <li> <p dir="auto">Use the <code>$JELLY_SCRIPT</code> token with the <code>template</code> parameter equal to your script filename without the <code>.jelly</code> extension. For example, if the script filename is <code>foobar.jelly</code>, the email content would be <code>${JELLY_SCRIPT,template="foobar"}</code>.</p> </li> </ol> </div> <div dir="auto"> <markdown-accessiblity-table> <div class="table-responsive"><table class="table table-bordered"> <tbody> <tr> <td> <div dir="auto"> 💡 </div> </td> <td> <div dir="auto"> <ul dir="auto"> <li> <p dir="auto">You can get the object of other plugin actions by querying build actions, for example:</p> <div dir="auto"> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="${it.getAction(&#x27;hudson.plugins.fitnesse.FitnesseResultsAction&#x27;)}"> <pre>${it<span class="pl-k">.</span>getAction(<span class="pl-s"><span class="pl-pds">'</span>hudson.plugins.fitnesse.FitnesseResultsAction<span class="pl-pds">'</span></span>)}</pre> </div> </div> </div> </li> <li> <p dir="auto">Then you need to know what functions are allowed by this action object and traverse through the result.</p> </li> </ul> </div> </td> </tr> </tbody> </table></div> </markdown-accessiblity-table> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-groovy-script-content-templates" class="heading-element" dir="auto" style="position: relative">Groovy script content templates<a href="#plugin-content-groovy-script-content-templates" aria-label="groovy script content templates permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">New to version 2.15 is the ability to use Groovy scripts. Scripts are powerful in that you can hook into the Jenkins API to get any information you want or need. There are two scripts with corresponding templates packaged with this plugin, and it is also possible to write your own.</p> </div> <div dir="auto"> <p dir="auto">There are two default scripts and templates available out of the box; one is designed for HTML emails and the other is design for text emails. You can specify which script you want by using the <code>script</code> argument; you can also leave the default script and specify a different template file using the <code>template</code> argument. Furthermore, you can also include a script that does some initialization using the <code>init</code> argument. The usage for each type of script is as follows:</p> </div> <div dir="auto"> <dl> <dt> Text-only Groovy script </dt> <dd> <p dir="auto"><code>${SCRIPT, template="groovy-text.template"}</code></p> </dd> <dt> HTML Groovy script </dt> <dd> <p dir="auto"><code>${SCRIPT, template="groovy-html.template"}</code></p> </dd> </dl> </div> <div dir="auto"> <p dir="auto">You can also write your own scripts and templates. The scripts are particularly powerful since they provide a hook into the Jenkins API, including <a href="https://javadoc.jenkins.io/hudson/model/AbstractBuild.html" rel="nofollow"><code>hudson.model.AbstractBuild</code></a> and <a href="https://javadoc.jenkins.io/hudson/model/AbstractProject.html" rel="nofollow"><code>hudson.model.AbstractProject</code></a>. For an example on how to do this, take a look at the existing <a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/src/main/resources/hudson/plugins/emailext/templates/groovy-html.template"><code>html</code></a> and <a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/src/main/resources/hudson/plugins/emailext/templates/groovy-text.template"><code>text</code></a> scripts.</p> </div> <div dir="auto"> <p dir="auto">Using custom scripts (those not packaged with this plugin) requires the cooperation of your Jenkins administrator. The steps are relatively simple:</p> </div> <div dir="auto"> <ol dir="auto"> <li> <p dir="auto">Create the Groovy script template. The name of the script ends in the standard extension for the language (i.e., <code>.groovy</code>). The template can be named anything.</p> </li> <li> <p dir="auto">Have your Jenkins administrator place the script inside <code>${JENKINS_HOME}/email-templates/</code>.</p> </li> <li> <p dir="auto">Use the <code>$SCRIPT</code> token with the template parameter equal to your template filename, or in addition the script parameter equal to the custom script name. For example, if the template filename is <code>foobar.template</code>, the email content would be <code>${SCRIPT, template="foobar.template"}</code>.</p> </li> </ol> </div> <div dir="auto"> <p dir="auto">Refer to the following examples for doing various things with the built-in Groovy templates:</p> </div> <div dir="auto"> <ul dir="auto"> <li> <p dir="auto"><a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/docs/templates/jenkins-matrix-email-html.template"><code>jenkins-matrix-email-html.template</code></a></p> </li> <li> <p dir="auto"><a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/docs/templates/jenkins-generic-matrix-email-html.template"><code>jenkins-generic-matrix-email-html.template</code></a></p> </li> </ul> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-attachments" class="heading-element" dir="auto" style="position: relative">Attachments<a href="#plugin-content-attachments" aria-label="attachments permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto">New to version 2.15 is the ability to add attachments using <a href="https://ant.apache.org/manual/Types/fileset.html" rel="nofollow">the Ant pattern matching syntax</a> used in many places in Jenkins. You can set a maximum total attachment size in the <strong>Extended E-mail Notification</strong> section of the <strong>Configure System</strong> page; otherwise, it will be unlimited.</p> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h3 id="plugin-content-jive-formatter" class="heading-element" dir="auto" style="position: relative">Jive formatter<a href="#plugin-content-jive-formatter" aria-label="jive formatter permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h3> </div> <div dir="auto"> <p dir="auto"><a href="https://github.com/jenkinsci/email-ext-plugin/blob/main/docs/templates/jive-formatter.groovy"><code>jive-formatter.groovy</code></a> contains methods for easy and convenient formatting of emails being sent from Jenkins to Jive. It should be called from the <strong>Pre-send Script</strong> area.</p> </div> <div dir="auto"> <markdown-accessiblity-table> <div class="table-responsive"><table class="table table-bordered"> <tbody> <tr> <td> <div dir="auto"> 🔥 </div> </td> <td> Jive does not appear to support text with multiple formats, so only call one formatting method per block of text. </td> </tr> </tbody> </table></div> </markdown-accessiblity-table> </div> <div dir="auto"> <p dir="auto">Either <code>formatLine</code> or <code>formatText</code> can and should be called on every line of text that will be sent to the Jive system prior to calling formatting methods like color or size. Please test on your own instances of Jive and add functionality as you find it!</p> </div> <div dir="auto"> <p dir="auto">The following lines should be added to the <strong>Pre-send Script</strong> area prior to attempting to invoke any functions:</p> </div> <div dir="auto"> <div dir="auto"> <div class="highlight highlight-source-groovy notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="File sourceFile = new File(&#x22;/your/preferred/path/jive-formatter.groovy&#x22;); Class groovyClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(sourceFile); GroovyObject jiveFormatter = (GroovyObject) groovyClass.newInstance();"> <pre><span class="pl-k">File</span> sourceFile <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-k">File</span>(<span class="pl-s"><span class="pl-pds">"</span>/your/preferred/path/jive-formatter.groovy<span class="pl-pds">"</span></span>); <span class="pl-k">Class</span> groovyClass <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-k">GroovyClassLoader</span>(getClass()<span class="pl-k">.</span>getClassLoader())<span class="pl-k">.</span>parseClass(sourceFile); <span class="pl-k">GroovyObject</span> jiveFormatter <span class="pl-k">=</span> (<span class="pl-k">GroovyObject</span>) groovyClass<span class="pl-k">.</span>newInstance();</pre> </div> </div> </div> </div> </div> </div> <div dir="auto"> <div class="markdown-heading" dir="auto"> <h2 id="plugin-content-related-plugins" class="heading-element" dir="auto" style="position: relative">Related plugins<a href="#plugin-content-related-plugins" aria-label="related plugins permalink" class="anchor after"><ion-icon name="link-outline"></ion-icon></a></h2> </div> <div dir="auto"> <div dir="auto"> <ul dir="auto"> <li> <p dir="auto"><a href="https://plugins.jenkins.io/email-ext-recipients-column/" rel="nofollow">Email Ext Recipients Column plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/job-direct-mail/" rel="nofollow">Job Direct Mail plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/pom2config/" rel="nofollow">pom2config plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/github-pullrequest/" rel="nofollow">GitHub Integration plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/emailext-template/" rel="nofollow">Email-ext Template plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/configurationslicing/" rel="nofollow">Configuration Slicing plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/view-job-filters/" rel="nofollow">View Job Filters plugin</a></p> </li> <li> <p dir="auto"><a href="https://plugins.jenkins.io/run-condition-extras/" rel="nofollow">Run Condition Extras plugin</a></p> </li> </ul> </div> </div> </div> </article> </div></div></div></div></div><div class="col-md-3 sidebar"><h5>Version: 1876.v28d8d38315b_d</h5><div>Released: <time dateTime="2025-01-23T12:09:15.000Z" title="2025-01-23 12:09">about a month ago</time></div><div>Requires Jenkins <!-- -->2.479.1</div><div>ID: <!-- -->email-ext</div><div class="sidebarSection"><h5 title="Total: 229,279">Installed on 82.7% of controllers</h5><div class="chart"><div style="padding:0"><canvas role="img" height="90" width="300"></canvas></div></div><div class="label-link"><a href="https://old.stats.jenkins.io/pluginversions/email-ext.html">View detailed version information</a></div></div><div class="sidebarSection"><h5>Links</h5><div class="label-link"><a href="https://github.com/jenkinsci/email-ext-plugin">GitHub</a></div><div class="label-link"><a href="https://issues.jenkins.io/issues/?jql=resolution%20is%20EMPTY%20and%20component%3D15538">Open issues (Jira)</a></div><div class="label-link"><a href="https://www.jenkins.io/participate/report-issue/redirect/#15538/email-ext">Report an issue (Jira)</a></div><div class="label-link"><a href="https://www.jenkins.io/doc/pipeline/steps/email-ext">Pipeline Step Reference</a></div><div class="label-link"><a href="https://www.jenkins.io/doc/developer/extensions/email-ext">Extension Points</a></div><div class="label-link"><a href="https://javadoc.jenkins.io/plugin/email-ext">Javadoc</a></div></div><div class="sidebarSection"><h5>Labels</h5><div class="label-link"><a href="/ui/search/?labels=builder">Build Tools</a></div><div class="label-link"><a href="/ui/search/?labels=email">email</a></div><div class="label-link"><a href="/ui/search/?labels=notifier">Build Notifiers</a></div></div><div class="sidebarSection"><h5>Maintainers</h5><div class="maintainer"><a href="/ui/search/?query=slide_o_mix">Alex Earl</a></div></div><div class="sidebarSection"><h5>Help us improve this page!</h5>To propose a change submit a pull request to <a href="https://github.com/jenkinsci/email-ext-plugin" rel="noopener noreferrer" target="_blank">the plugin page</a> on GitHub.</div><div class="sidebarSection"><div><h5>Previous Security Warnings</h5><ul class="security-warning-list"><li><h6><a href="https://jenkins.io/security/advisory/2017-03-20/">Email notifications could be sent to people who are not users of Jenkins</a></h6><ul><li>Affects version 2.57 and earlier</li></ul></li><li><h6><a href="https://jenkins.io/security/advisory/2017-04-10/">Arbitrary code execution vulnerability</a></h6><ul><li>Affects version 2.57.1 and earlier</li></ul></li><li><h6><a href="https://jenkins.io/security/advisory/2018-04-16/#SECURITY-729">SMTP password gets transmitted in unencrypted form</a></h6><ul><li>Affects version 2.61 and earlier</li></ul></li><li><h6><a href="https://jenkins.io/security/advisory/2019-03-06/#SECURITY-1340">Script security sandbox bypass</a></h6><ul><li>Affects version 2.64 and earlier</li></ul></li><li><h6><a href="https://jenkins.io/security/advisory/2020-08-12/#SECURITY-1975">SMTP password transmitted and displayed in plain text</a></h6><ul><li>Affects version 2.72 to 2.73</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2020-09-16/#SECURITY-1851">Missing hostname validation</a></h6><ul><li>Affects version 2.75 and earlier</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2023-02-15/#SECURITY-2931">XSS vulnerability in bundled email templates</a></h6><ul><li>Affects version 2.93 and earlier</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2023-02-15/#SECURITY-2934">Stored XSS vulnerability in custom email templates</a></h6><ul><li>Affects version 2.93 and earlier</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2023-02-15/#SECURITY-2939">Script Security sandbox bypass vulnerability</a></h6><ul><li>Affects version 2.93 and earlier</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2023-05-16/#SECURITY-3088%20(1)">Missing permission check</a></h6><ul><li>Affects version 2.96 and earlier</li></ul></li><li><h6><a href="https://www.jenkins.io/security/advisory/2023-05-16/#SECURITY-3088%20(2)">CSRF vulnerability</a></h6><ul><li>Affects version 2.96 and earlier</li></ul></li></ul></div></div></div></div></div><jio-footer githubRepo="" property="https://plugins.jenkins.io/" githubBranch="main" reportAProblemTemplate="4-bug.yml"></jio-footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script> window.dev = undefined if (window.dev === true || true) { window._paq = window._paq || []; window._paq.push(['setTrackerUrl', 'https://jenkins-matomo.do.g4v.dev/matomo.php']); window._paq.push(['setSiteId', '1']); window._paq.push(['enableHeartBeatTimer']); window.start = new Date(); (function() { var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://jenkins-matomo.do.g4v.dev/matomo.js'; s.parentNode.insertBefore(g,s); })(); if (window.dev === true) { console.debug('[Matomo] Tracking initialized') console.debug('[Matomo] matomoUrl: https://jenkins-matomo.do.g4v.dev, siteId: 1') } } </script><noscript><img src="https://jenkins-matomo.do.g4v.dev/piwik.php?idsite=1&rec=1&url=https://plugins.jenkins.io//email-ext/" style="border:0" alt="tracker" /></noscript><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/email-ext/";/*]]>*/</script><!-- slice-start id="_gatsby-scripts-1" --> <script id="gatsby-chunk-mapping" > window.___chunkMapping="{\"app\":[\"/app-b4fdd418d433e7615df4.js\"],\"component---src-pages-404-jsx\":[\"/component---src-pages-404-jsx-7e80fca415f6414faf44.js\"],\"component---src-templates-index-jsx\":[\"/component---src-templates-index-jsx-a306f41a55d1dd1ef576.js\"],\"component---src-templates-plugin-dependencies-jsx\":[\"/component---src-templates-plugin-dependencies-jsx-abac5dd31b94bc28ec58.js\"],\"component---src-templates-plugin-documentation-jsx\":[\"/component---src-templates-plugin-documentation-jsx-6781e0b1ce28c75ec828.js\"],\"component---src-templates-plugin-health-score-jsx\":[\"/component---src-templates-plugin-health-score-jsx-e305d9d25bab38ec80fd.js\"],\"component---src-templates-plugin-issues-jsx\":[\"/component---src-templates-plugin-issues-jsx-122938860f561ab2c9a9.js\"],\"component---src-templates-plugin-releases-jsx\":[\"/component---src-templates-plugin-releases-jsx-5fadd9f681f2670d8c08.js\"],\"component---src-templates-search-jsx\":[\"/component---src-templates-search-jsx-66441f05e1eae7a0a926.js\"],\"component---src-templates-tombstone-jsx\":[\"/component---src-templates-tombstone-jsx-da05f23b6dacb1c3b636.js\"]}"; </script> <script>window.___webpackCompilationHash="301c310574991dbaca3f";</script><script src="/webpack-runtime-44e7632edd83b56795f4.js" async></script><script src="/framework-e547aabdcd858de1462d.js" async></script><script src="/app-b4fdd418d433e7615df4.js" async></script><!-- slice-end id="_gatsby-scripts-1" --></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10