blob: 03df09ef3ddbd2f9c0f3788e1411c4cf13e18298 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Distributed James Server &mdash; Delivery Submission Notifications :: Apache James</title>
<meta name="generator" content="Antora 3.1.2">
<link rel="stylesheet" href="../../../_/css/site.css">
</head>
<body class="article">
<header class="header">
<nav class="navbar">
<div class="navbar-brand">
<a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
</div>
<div id="topbar-nav" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item" href="#">Home</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Products</a>
<div class="navbar-dropdown">
<div class="navbar-item"><strong>James server</strong></div>
<a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
<a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
<hr class="navbar-divider">
<a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
<a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
<a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
<a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
<a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Community</a>
<div class="navbar-dropdown">
<!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
<a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
<a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
<a class="navbar-item" href="https://twitter.com/ApacheJames">
<span class="icon">
<svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</svg>
</span> Twitter
</a>
<a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github</a>
</div>
</div>
<!-- <div class="navbar-item">
<span class="control">
<a class="button is-primary" href="#">Download</a>
</span>
</div> -->
</div>
</div>
</nav>
</header>
<div class="body">
<div class="nav-container" data-component="james-distributed-app" data-version="3.8.1">
<aside class="nav">
<div class="panels">
<div class="nav-panel-menu is-active" data-panel="menu">
<nav class="nav-menu">
<button class="nav-menu-toggle" aria-label="Toggle expand/collapse all" style="display: none"></button>
<h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
<ul class="nav-list">
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../index.html">Distributed James Application</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../objectives.html">Objectives and motivation</a>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../architecture/index.html">Architecture</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../run/index.html">Run</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../run/run-java.html">Run with Java</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-logsMetrics.html">Logs &amp; Metrics</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="index.html">Configuration</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Protocols</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="imap.html">imapserver.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="jmap.html">jmap.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="jmx.html">jmx.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="smtp.html">smtpserver.xml &amp; lmtpserver.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="pop3.html">pop3server.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="webadmin.html">webadmin.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="ssl.html">SSL &amp; TLS</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="sieve.html">Sieve &amp; ManageSieve</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Storage dependencies</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="blobstore.html">blobstore.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="cassandra.html">cassandra.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="opensearch.html">opensearch.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="redis.html">redis.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="tika.html">tika.properties</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Core components</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="dns.html">dnsservice.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="domainlist.html">domainlist.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="mailets.html">Packaged Mailets</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="matchers.html">Packaged Matchers</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="search.html">search.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Extensions</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="extensions.html">extensions.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="listeners.html">listeners.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="spam.html">Anti-Spam setup</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="collecting-contacts.html">Contact collection</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="collecting-events.html">Event collection</a>
</li>
<li class="nav-item is-current-page" data-depth="4">
<a class="nav-link" href="dsn.html">ESMTP DSN support</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../operate/index.html">Operate</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/guide.html">Operator guide</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/performanceChecklist.html">Performance checklist</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/logging.html">Logging</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/metrics.html">Metrics</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/security.html">Security checklist</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../extending/index.html">Extending server behavior</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/imap.html">Custom IMAP processing</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Apache James Distributed Server</span>
<span class="version">3.8.1 SNAPSHOT</span>
</div>
<ul class="components">
<li class="component is-current">
<div class="title"><a href="../index.html">Apache James Distributed Server</a></div>
<ul class="versions">
<li class="version is-current is-latest">
<a href="../index.html">3.8.1 SNAPSHOT</a>
</li>
</ul>
</li>
<li class="component">
<div class="title"><a href="../../../james-project/3.8.1/index.html">Apache James Server</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../../james-project/3.8.1/index.html">3.8.1 SNAPSHOT</a>
</li>
<li class="version">
<a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
</li>
</ul>
</li>
<li class="component">
<div class="title"><a href="../../../james-site/latest/index.html">Apache James Site</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../../james-site/latest/index.html">latest</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
</div>
<main class="article">
<div class="toolbar" role="navigation">
<button class="nav-toggle"></button>
<a href="../../../james-site/latest/homepage.html" class="home-link"></a>
<nav class="breadcrumbs" aria-label="breadcrumbs">
<ul>
<li><a href="../index.html">Apache James Distributed Server</a></li>
<li><a href="../index.html">Distributed James Application</a></li>
<li><a href="index.html">Configuration</a></li>
<li>Extensions</li>
<li><a href="dsn.html">ESMTP DSN support</a></li>
</ul>
</nav>
<div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/dsn.adoc">Edit this Page</a></div>
</div>
<div class="content">
<aside class="toc sidebar" data-title="Contents" data-levels="2">
<div class="toc-menu"></div>
</aside>
<article class="doc">
<h1 class="page">Distributed James Server &mdash; Delivery Submission Notifications</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>DSN introduced in <a href="https://tools.ietf.org/html/rfc3461">RFC-3461</a> allows a SMTP sender to demand status messages,
defined in <a href="https://tools.ietf.org/html/rfc3464">RFC-3464</a> to be sent back to the <code>Return-Path</code> upon delivery
progress.</p>
</div>
<div class="paragraph">
<p>DSN support is not enabled by default, as it needs specific configuration of the
<a href="mailetcontainer.html" class="xref page">mailetcontainer.xml</a> to be specification compliant.</p>
</div>
<div class="paragraph">
<p>To enable it you need to:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Add DSN SMTP hooks as part of the SMTP server stack</p>
</li>
<li>
<p>Configure <a href="mailetcontainer.html" class="xref page">mailetcontainer.xml</a> to generate DSN bounces when needed</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_enabling_dsn_in_smtp_server_stack"><a class="anchor" href="#_enabling_dsn_in_smtp_server_stack"></a>Enabling DSN in SMTP server stack</h2>
<div class="sectionbody">
<div class="paragraph">
<p>For this simply add the <code>DSN hooks</code> in the handler chain in <code>smtpserver.xml</code> :</p>
</div>
<div class="literalblock">
<div class="content">
<pre>&lt;smtpserver enabled="true"&gt;
&lt;...&gt; &lt;!-- The rest of your SMTP configuration, unchanged --&gt;
&lt;handlerchain&gt;
&lt;handler class="org.apache.james.smtpserver.dsn.DSNEhloHook"/&gt;
&lt;handler class="org.apache.james.smtpserver.dsn.DSNMailParameterHook"/&gt;
&lt;handler class="org.apache.james.smtpserver.dsn.DSNRcptParameterHook"/&gt;
&lt;handler class="org.apache.james.smtpserver.dsn.DSNMessageHook"/&gt;
&lt;...&gt; &lt;!-- other handlers, like: --&gt;
&lt;handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/&gt; &lt;!-- for instance --&gt;
&lt;/handlerchain&gt;
&lt;/smtpserver&gt;</pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_enabling_dsn_generation_as_part_of_mail_processing"><a class="anchor" href="#_enabling_dsn_generation_as_part_of_mail_processing"></a>Enabling DSN generation as part of mail processing</h2>
<div class="sectionbody">
<div class="paragraph">
<p>For the below conditions to be matched we assume you follow
<a href="remote-delivery-error-handling.html" class="xref page">RemoteDelivery error handling for MXs</a>, which is a
requirement for detailed RemoteDelivery error and delay handling on top of the Distributed server.</p>
</div>
<div class="paragraph">
<p>Here is a sample <a href="mailetcontainer.html" class="xref page">mailetcontainer.xml</a> achieving the following DSN generation:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Generate a generic <code>delivered</code> notification if LocalDelivery succeeded, if requested</p>
</li>
<li>
<p>Generate a generic <code>failed</code> notification in case of local errors, if requested</p>
</li>
<li>
<p>Generate a specific <code>failed</code> notification in case of a non existing local user, if requested</p>
</li>
<li>
<p>Generate a specific <code>failed</code> notification in case of an address rewriting loop, if requested</p>
</li>
<li>
<p>Generate a <code>failed</code> notification in case of remote permanent errors, if requested. We blame the remote server&#8230;&#8203;</p>
</li>
<li>
<p>Generate a <code>delayed</code> notification in case of temporary remote errors we are about to retry, if requested. We blame the remote server&#8230;&#8203;</p>
</li>
<li>
<p>Generate a <code>failed</code> notification in case of temporary remote errors we are not going to retry (failed too many time), if requested. We blame the remote server&#8230;&#8203;</p>
</li>
</ul>
</div>
<div class="literalblock">
<div class="content">
<pre>&lt;mailetcontainer enableJmx="true"&gt;
&lt;!-- Common processing settings are unchanged --&gt;
&lt;processors&gt;
&lt;processor state="root" enableJmx="true"&gt;\
&lt;!-- Content of root processor is unchanged --&gt;
&lt;/processor&gt;
&lt;processor state="transport" enableJmx="true"&gt;
&lt;!-- transport processor unchanged --&gt;
&lt;/processor&gt;
&lt;processor state="error" enableJmx="true"&gt;
&lt;mailet match="DSNFailureRequested" class="DSNBounce"&gt;
&lt;prefix&gt;[FAILED]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out. Below
I include the list of recipients, and the reason why I was unable to deliver
your message.&lt;/messageString&gt;
&lt;action&gt;failed&lt;/action&gt;
&lt;defaultStatus&gt;5.0.0&lt;/defaultStatus&gt;
&lt;/mailet&gt;
&lt;mailet match="All" class="ToRepository"&gt;
&lt;repositoryPath&gt;cassandra://var/mail/error/&lt;/repositoryPath&gt;
&lt;/mailet&gt;
&lt;/processor&gt;
&lt;processor state="local-delivery" enableJmx="true"&gt;
&lt;!-- Your local-delivery pipeline --&gt;
&lt;mailet match="All" class="LocalDelivery"&gt;
&lt;!-- Do not abort the pipeline yet --&gt;
&lt;consume&gt;false&lt;/consume&gt;
&lt;/mailet&gt;
&lt;!-- Tell the world we succeeded --&gt;
&lt;mailet match="DSNSuccessRequested" class="DSNBounce"&gt;
&lt;prefix&gt;[SUCCESS]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I successfully delivered your message to the following addresses.
Note that it indicates your recipients received the message but do
not imply they read it.&lt;/messageString&gt;
&lt;action&gt;delivered&lt;/action&gt;
&lt;defaultStatus&gt;2.0.0&lt;/defaultStatus&gt;
&lt;/mailet&gt;
&lt;mailet match="All" class="Null"/&gt; &lt;!-- ignore people not having requesting a dsn success bounce --&gt;
&lt;/processor&gt;
&lt;processor state="relay" enableJmx="true"&gt;
&lt;!-- Perform at most 5 RemoteDelivery attempts --&gt;
&lt;mailet match="AtMost=5" class="RemoteDelivery"&gt;
&lt;outgoingQueue&gt;outgoing&lt;/outgoingQueue&gt;
&lt;maxRetries&gt;0&lt;/maxRetries&gt;
&lt;maxDnsProblemRetries&gt;0&lt;/maxDnsProblemRetries&gt;
&lt;deliveryThreads&gt;10&lt;/deliveryThreads&gt;
&lt;sendpartial&gt;true&lt;/sendpartial&gt;
&lt;!-- Use a custom processor for error handling --&gt;
&lt;bounceProcessor&gt;remote-delivery-error&lt;/bounceProcessor&gt;
&lt;/mailet&gt;
&lt;!-- When retries are exceeded, consider the mail as a permanent failure --&gt;
&lt;mailet match="DSNFailureRequested" class="DSNBounce"&gt;
&lt;prefix&gt;[FAILED]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.
The remote server we should relay this mail to keep on failing.
Below I include the list of recipients, and the reason why I was unable to deliver
your message.&lt;/messageString&gt;
&lt;action&gt;failed&lt;/action&gt;
&lt;defaultStatus&gt;5.0.0&lt;/defaultStatus&gt;
&lt;/mailet&gt;
&lt;mailet match="All" class="ToRepository"&gt;
&lt;repositoryPath&gt;cassandra://var/mail/error/remote-delivery/permanent/&lt;/repositoryPath&gt;
&lt;/mailet&gt;
&lt;/processor&gt;
&lt;processor state="remote-delivery-error" enableJmx="true"&gt;
&lt;matcher name="dsn-permanent" match="org.apache.james.mailetcontainer.impl.matchers.And"&gt;
&lt;matcher match="IsRemoteDeliveryPermanentError"/&gt;
&lt;matcher match="DSNFailureRequested"/&gt;
&lt;/matcher&gt;
&lt;matcher name="dsn-temporary" match="org.apache.james.mailetcontainer.impl.matchers.And"&gt;
&lt;matcher match="IsRemoteDeliveryTemporaryError"/&gt;
&lt;matcher match="DSNDelayRequested"/&gt;
&lt;/matcher&gt;
&lt;mailet match="dsn-permanent" class="DSNBounce"&gt;
&lt;prefix&gt;[FAILED]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.
The remote server we should relay this mail to returns a permanent error.
Below I include the list of recipients, and the reason why I was unable to deliver
your message.&lt;/messageString&gt;
&lt;action&gt;failed&lt;/action&gt;
&lt;defaultStatus&gt;5.0.0&lt;/defaultStatus&gt;
&lt;/mailet&gt;
&lt;mailet match="dsn-temporary" class="DSNBounce"&gt;
&lt;prefix&gt;[DELAYED]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I'm afraid I wasn't able to deliver your message to the following addresses yet.
This is a temporary error: I will keep on trying.
Below I include the list of recipients, and the reason why I was unable to deliver
your message.&lt;/messageString&gt;
&lt;action&gt;delayed&lt;/action&gt;
&lt;defaultStatus&gt;4.0.0&lt;/defaultStatus&gt;
&lt;/mailet&gt;
&lt;!-- Error management for remote delivery error handling as described in remote-delivery-error-handling.adoc --&gt;
&lt;/processor&gt;
&lt;processor state="local-address-error" enableJmx="true"&gt;
&lt;mailet match="DSNFailureRequested" class="DSNBounce"&gt;
&lt;prefix&gt;[FAILED]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.
The following addresses do not exist here. Sorry.&lt;/messageString&gt;
&lt;action&gt;failed&lt;/action&gt;
&lt;defaultStatus&gt;5.0.0&lt;/defaultStatus&gt;
&lt;/mailet&gt;
&lt;mailet match="All" class="ToRepository"&gt;
&lt;repositoryPath&gt;cassandra://var/mail/address-error/&lt;/repositoryPath&gt;
&lt;/mailet&gt;
&lt;/processor&gt;
&lt;processor state="relay-denied" enableJmx="true"&gt;
&lt;!-- This is an abuse, you likely do not want to be polite with these people. we just keep a copy for later audit &amp; replay --&gt;
&lt;mailet match="All" class="ToRepository"&gt;
&lt;repositoryPath&gt;cassandra://var/mail/relay-denied/&lt;/repositoryPath&gt;
&lt;notice&gt;Warning: You are sending an e-mail to a remote server. You must be authenticated to perform such an operation&lt;/notice&gt;
&lt;/mailet&gt;
&lt;/processor&gt;
&lt;processor state="rrt-error" enableJmx="false"&gt;
&lt;mailet match="All" class="ToRepository"&gt;
&lt;repositoryPath&gt;cassandra://var/mail/rrt-error/&lt;/repositoryPath&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;/mailet&gt;
&lt;mailet match="IsSenderInRRTLoop" class="Null"/&gt;
&lt;mailet match="DSNFailureRequested" class="DSNBounce"&gt;
&lt;prefix&gt;[FAILED]&lt;/prefix&gt;
&lt;passThrough&gt;true&lt;/passThrough&gt;
&lt;messageString&gt;Hi. This is the James mail server at [machine].
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.
The following addresses is caught in a rewriting loop. An admin should come and fix it (you likely want to report it).
Once resolved the admin should be able to resume the processing of your email.
Below I include the list of recipients, and the reason why I was unable to deliver
your message.&lt;/messageString&gt;
&lt;action&gt;failed&lt;/action&gt;
&lt;defaultStatus&gt;5.1.6/defaultStatus&gt;
&lt;/mailet&gt;
&lt;/processor&gt;
&lt;/processors&gt;
&lt;/mailetcontainer&gt;</pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_limitations"><a class="anchor" href="#_limitations"></a>Limitations</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The out of the box tooling do not allow generating <code>relayed</code> DSN notification as RemoteDelivery misses a success
callback.</p>
</div>
</div>
</div>
</article>
</div>
</main>
</div>
<footer class="footer">
<p>This page was built using the Antora default UI.</p>
<p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
</footer>
<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
<script async src="../../../_/js/vendor/highlight.js"></script>
</body>
</html>