mirror of https://github.com/apache/nifi.git
NIFI-8630 Upgraded javax.mail 1.4.7 to jakarta.mail 2.0.1 for PutEmail
- Added jakarata.activation 2.0.1 to support jakarta.mail 2.0.1 - Clarified description of SMTP TLS property enabling STARTTLS NIFI-8630 Added final to several variables and adjusted variable declaration Signed-off-by: Pierre Villard <pierre.villard.fr@gmail.com> This closes #5179.
This commit is contained in:
parent
1dc528ae80
commit
786f17182b
|
@ -2645,7 +2645,7 @@ The binary distribution of this product bundles 'normalize.css'
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
The binary distribution of this product bundles 'JUnit Platform' and 'JUnit Jupiter' modules under an EPL v2 license
|
||||
The binary distribution of this product bundles 'JUnit Platform', 'JUnit Jupiter', 'Jakarta Mail', and 'Jakarta Mail API' modules under an EPL v2 license
|
||||
|
||||
Eclipse Public License - v 2.0
|
||||
|
||||
|
@ -3030,7 +3030,7 @@ The binary distribution of this product bundles 'Extensions on qpid-proton-j lib
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
||||
|
||||
The binary distribution of this product bundles 'Jakarta Activation API 1.2.1' and 'Jakarta XML Binding API 2.3.2' modules under an EDL v1.0 license
|
||||
The binary distribution of this product bundles 'Jakarta Activation', 'Jakarta Activation API' and 'Jakarta XML Binding API 2.3.2' modules under an EDL v1.0 license
|
||||
|
||||
Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
|
||||
|
||||
|
|
|
@ -2067,13 +2067,23 @@ The following binary components are provided under the Eclipse Public License 1.
|
|||
(EPL 1.0) JaCoCo Java Code Coverage Library ( org.jacoco ) http://www.eclemma.org/jacoco
|
||||
(EPLv1.0) Clojure (org.clojure:clojure:1.8.0 - http://clojure.org)
|
||||
|
||||
************************
|
||||
Eclipse Public License 2.0
|
||||
************************
|
||||
|
||||
The following binary components are provided under the Eclipse Public License 2.0.
|
||||
|
||||
(EPL 2.0) Jakarta Mail API (jakarta.mail:jakarta.mail-api:jar:2.0.1)
|
||||
(EPL 2.0) Jakarta Mail (com.sun.mail:jakarta.mail:jar:2.0.1)
|
||||
|
||||
************************
|
||||
Eclipse Distribution License 1.0
|
||||
************************
|
||||
|
||||
The following binary components are provided under the Eclipse Distribution License 1.0.
|
||||
|
||||
(EDL 1.0) Jakarta Activation API (jakarta.activation:jakarta.activation-api:jar:1.2.1)
|
||||
(EDL 1.0) Jakarta Activation API (jakarta.activation:jakarta.activation-api:jar:2.0.1)
|
||||
(EDL 1.0) Jakarta Activation (com.sun.activation:jakarta.activation:jar:2.0.1)
|
||||
(EDL 1.0) Jakarta XML Binding API (jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2)
|
||||
|
||||
*****************
|
||||
|
|
|
@ -378,3 +378,319 @@ This product bundles 'SLF4J-API 1.7.21' which is available under an MIT license.
|
|||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
This product bundles 'Jakarta Activation' 'Jakarta Activation API' under the Eclipse Distribution License 1.0.
|
||||
|
||||
Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or
|
||||
without modification, are permitted provided that the following
|
||||
conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
- Neither the name of the Eclipse Foundation, Inc. nor the
|
||||
names of its contributors may be used to endorse or promote
|
||||
products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
This product bundles 'Jakarta Mail' and 'Jakarta Mail API' under an Eclipse Public License 2.0.
|
||||
|
||||
Eclipse Public License - v 2.0
|
||||
|
||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
|
||||
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
|
||||
OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
||||
|
||||
1. DEFINITIONS
|
||||
|
||||
"Contribution" means:
|
||||
|
||||
a) in the case of the initial Contributor, the initial content
|
||||
Distributed under this Agreement, and
|
||||
|
||||
b) in the case of each subsequent Contributor:
|
||||
i) changes to the Program, and
|
||||
ii) additions to the Program;
|
||||
where such changes and/or additions to the Program originate from
|
||||
and are Distributed by that particular Contributor. A Contribution
|
||||
"originates" from a Contributor if it was added to the Program by
|
||||
such Contributor itself or anyone acting on such Contributor's behalf.
|
||||
Contributions do not include changes or additions to the Program that
|
||||
are not Modified Works.
|
||||
|
||||
"Contributor" means any person or entity that Distributes the Program.
|
||||
|
||||
"Licensed Patents" mean patent claims licensable by a Contributor which
|
||||
are necessarily infringed by the use or sale of its Contribution alone
|
||||
or when combined with the Program.
|
||||
|
||||
"Program" means the Contributions Distributed in accordance with this
|
||||
Agreement.
|
||||
|
||||
"Recipient" means anyone who receives the Program under this Agreement
|
||||
or any Secondary License (as applicable), including Contributors.
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source Code or other
|
||||
form, that is based on (or derived from) the Program and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship.
|
||||
|
||||
"Modified Works" shall mean any work in Source Code or other form that
|
||||
results from an addition to, deletion from, or modification of the
|
||||
contents of the Program, including, for purposes of clarity any new file
|
||||
in Source Code form that contains any contents of the Program. Modified
|
||||
Works shall not include works that contain only declarations,
|
||||
interfaces, types, classes, structures, or files of the Program solely
|
||||
in each case in order to link to, bind by name, or subclass the Program
|
||||
or Modified Works thereof.
|
||||
|
||||
"Distribute" means the acts of a) distributing or b) making available
|
||||
in any manner that enables the transfer of a copy.
|
||||
|
||||
"Source Code" means the form of a Program preferred for making
|
||||
modifications, including but not limited to software source code,
|
||||
documentation source, and configuration files.
|
||||
|
||||
"Secondary License" means either the GNU General Public License,
|
||||
Version 2.0, or any later versions of that license, including any
|
||||
exceptions or additional permissions as identified by the initial
|
||||
Contributor.
|
||||
|
||||
2. GRANT OF RIGHTS
|
||||
|
||||
a) Subject to the terms of this Agreement, each Contributor hereby
|
||||
grants Recipient a non-exclusive, worldwide, royalty-free copyright
|
||||
license to reproduce, prepare Derivative Works of, publicly display,
|
||||
publicly perform, Distribute and sublicense the Contribution of such
|
||||
Contributor, if any, and such Derivative Works.
|
||||
|
||||
b) Subject to the terms of this Agreement, each Contributor hereby
|
||||
grants Recipient a non-exclusive, worldwide, royalty-free patent
|
||||
license under Licensed Patents to make, use, sell, offer to sell,
|
||||
import and otherwise transfer the Contribution of such Contributor,
|
||||
if any, in Source Code or other form. This patent license shall
|
||||
apply to the combination of the Contribution and the Program if, at
|
||||
the time the Contribution is added by the Contributor, such addition
|
||||
of the Contribution causes such combination to be covered by the
|
||||
Licensed Patents. The patent license shall not apply to any other
|
||||
combinations which include the Contribution. No hardware per se is
|
||||
licensed hereunder.
|
||||
|
||||
c) Recipient understands that although each Contributor grants the
|
||||
licenses to its Contributions set forth herein, no assurances are
|
||||
provided by any Contributor that the Program does not infringe the
|
||||
patent or other intellectual property rights of any other entity.
|
||||
Each Contributor disclaims any liability to Recipient for claims
|
||||
brought by any other entity based on infringement of intellectual
|
||||
property rights or otherwise. As a condition to exercising the
|
||||
rights and licenses granted hereunder, each Recipient hereby
|
||||
assumes sole responsibility to secure any other intellectual
|
||||
property rights needed, if any. For example, if a third party
|
||||
patent license is required to allow Recipient to Distribute the
|
||||
Program, it is Recipient's responsibility to acquire that license
|
||||
before distributing the Program.
|
||||
|
||||
d) Each Contributor represents that to its knowledge it has
|
||||
sufficient copyright rights in its Contribution, if any, to grant
|
||||
the copyright license set forth in this Agreement.
|
||||
|
||||
e) Notwithstanding the terms of any Secondary License, no
|
||||
Contributor makes additional grants to any Recipient (other than
|
||||
those set forth in this Agreement) as a result of such Recipient's
|
||||
receipt of the Program under the terms of a Secondary License
|
||||
(if permitted under the terms of Section 3).
|
||||
|
||||
3. REQUIREMENTS
|
||||
|
||||
3.1 If a Contributor Distributes the Program in any form, then:
|
||||
|
||||
a) the Program must also be made available as Source Code, in
|
||||
accordance with section 3.2, and the Contributor must accompany
|
||||
the Program with a statement that the Source Code for the Program
|
||||
is available under this Agreement, and informs Recipients how to
|
||||
obtain it in a reasonable manner on or through a medium customarily
|
||||
used for software exchange; and
|
||||
|
||||
b) the Contributor may Distribute the Program under a license
|
||||
different than this Agreement, provided that such license:
|
||||
i) effectively disclaims on behalf of all other Contributors all
|
||||
warranties and conditions, express and implied, including
|
||||
warranties or conditions of title and non-infringement, and
|
||||
implied warranties or conditions of merchantability and fitness
|
||||
for a particular purpose;
|
||||
|
||||
ii) effectively excludes on behalf of all other Contributors all
|
||||
liability for damages, including direct, indirect, special,
|
||||
incidental and consequential damages, such as lost profits;
|
||||
|
||||
iii) does not attempt to limit or alter the recipients' rights
|
||||
in the Source Code under section 3.2; and
|
||||
|
||||
iv) requires any subsequent distribution of the Program by any
|
||||
party to be under a license that satisfies the requirements
|
||||
of this section 3.
|
||||
|
||||
3.2 When the Program is Distributed as Source Code:
|
||||
|
||||
a) it must be made available under this Agreement, or if the
|
||||
Program (i) is combined with other material in a separate file or
|
||||
files made available under a Secondary License, and (ii) the initial
|
||||
Contributor attached to the Source Code the notice described in
|
||||
Exhibit A of this Agreement, then the Program may be made available
|
||||
under the terms of such Secondary Licenses, and
|
||||
|
||||
b) a copy of this Agreement must be included with each copy of
|
||||
the Program.
|
||||
|
||||
3.3 Contributors may not remove or alter any copyright, patent,
|
||||
trademark, attribution notices, disclaimers of warranty, or limitations
|
||||
of liability ("notices") contained within the Program from any copy of
|
||||
the Program which they Distribute, provided that Contributors may add
|
||||
their own appropriate notices.
|
||||
|
||||
4. COMMERCIAL DISTRIBUTION
|
||||
|
||||
Commercial distributors of software may accept certain responsibilities
|
||||
with respect to end users, business partners and the like. While this
|
||||
license is intended to facilitate the commercial use of the Program,
|
||||
the Contributor who includes the Program in a commercial product
|
||||
offering should do so in a manner which does not create potential
|
||||
liability for other Contributors. Therefore, if a Contributor includes
|
||||
the Program in a commercial product offering, such Contributor
|
||||
("Commercial Contributor") hereby agrees to defend and indemnify every
|
||||
other Contributor ("Indemnified Contributor") against any losses,
|
||||
damages and costs (collectively "Losses") arising from claims, lawsuits
|
||||
and other legal actions brought by a third party against the Indemnified
|
||||
Contributor to the extent caused by the acts or omissions of such
|
||||
Commercial Contributor in connection with its distribution of the Program
|
||||
in a commercial product offering. The obligations in this section do not
|
||||
apply to any claims or Losses relating to any actual or alleged
|
||||
intellectual property infringement. In order to qualify, an Indemnified
|
||||
Contributor must: a) promptly notify the Commercial Contributor in
|
||||
writing of such claim, and b) allow the Commercial Contributor to control,
|
||||
and cooperate with the Commercial Contributor in, the defense and any
|
||||
related settlement negotiations. The Indemnified Contributor may
|
||||
participate in any such claim at its own expense.
|
||||
|
||||
For example, a Contributor might include the Program in a commercial
|
||||
product offering, Product X. That Contributor is then a Commercial
|
||||
Contributor. If that Commercial Contributor then makes performance
|
||||
claims, or offers warranties related to Product X, those performance
|
||||
claims and warranties are such Commercial Contributor's responsibility
|
||||
alone. Under this section, the Commercial Contributor would have to
|
||||
defend claims against the other Contributors related to those performance
|
||||
claims and warranties, and if a court requires any other Contributor to
|
||||
pay any damages as a result, the Commercial Contributor must pay
|
||||
those damages.
|
||||
|
||||
5. NO WARRANTY
|
||||
|
||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
||||
PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
|
||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
|
||||
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
|
||||
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
|
||||
PURPOSE. Each Recipient is solely responsible for determining the
|
||||
appropriateness of using and distributing the Program and assumes all
|
||||
risks associated with its exercise of rights under this Agreement,
|
||||
including but not limited to the risks and costs of program errors,
|
||||
compliance with applicable laws, damage to or loss of data, programs
|
||||
or equipment, and unavailability or interruption of operations.
|
||||
|
||||
6. DISCLAIMER OF LIABILITY
|
||||
|
||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
||||
PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
|
||||
SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
|
||||
PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
|
||||
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
7. GENERAL
|
||||
|
||||
If any provision of this Agreement is invalid or unenforceable under
|
||||
applicable law, it shall not affect the validity or enforceability of
|
||||
the remainder of the terms of this Agreement, and without further
|
||||
action by the parties hereto, such provision shall be reformed to the
|
||||
minimum extent necessary to make such provision valid and enforceable.
|
||||
|
||||
If Recipient institutes patent litigation against any entity
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that the
|
||||
Program itself (excluding combinations of the Program with other software
|
||||
or hardware) infringes such Recipient's patent(s), then such Recipient's
|
||||
rights granted under Section 2(b) shall terminate as of the date such
|
||||
litigation is filed.
|
||||
|
||||
All Recipient's rights under this Agreement shall terminate if it
|
||||
fails to comply with any of the material terms or conditions of this
|
||||
Agreement and does not cure such failure in a reasonable period of
|
||||
time after becoming aware of such noncompliance. If all Recipient's
|
||||
rights under this Agreement terminate, Recipient agrees to cease use
|
||||
and distribution of the Program as soon as reasonably practicable.
|
||||
However, Recipient's obligations under this Agreement and any licenses
|
||||
granted by Recipient relating to the Program shall continue and survive.
|
||||
|
||||
Everyone is permitted to copy and distribute copies of this Agreement,
|
||||
but in order to avoid inconsistency the Agreement is copyrighted and
|
||||
may only be modified in the following manner. The Agreement Steward
|
||||
reserves the right to publish new versions (including revisions) of
|
||||
this Agreement from time to time. No one other than the Agreement
|
||||
Steward has the right to modify this Agreement. The Eclipse Foundation
|
||||
is the initial Agreement Steward. The Eclipse Foundation may assign the
|
||||
responsibility to serve as the Agreement Steward to a suitable separate
|
||||
entity. Each new version of the Agreement will be given a distinguishing
|
||||
version number. The Program (including Contributions) may always be
|
||||
Distributed subject to the version of the Agreement under which it was
|
||||
received. In addition, after a new version of the Agreement is published,
|
||||
Contributor may elect to Distribute the Program (including its
|
||||
Contributions) under the new version.
|
||||
|
||||
Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
|
||||
receives no rights or licenses to the intellectual property of any
|
||||
Contributor under this Agreement, whether expressly, by implication,
|
||||
estoppel or otherwise. All rights in the Program not expressly granted
|
||||
under this Agreement are reserved. Nothing in this Agreement is intended
|
||||
to be enforceable by any entity that is not a Contributor or Recipient.
|
||||
No third-party beneficiary rights are created under this Agreement.
|
||||
|
||||
Exhibit A - Form of Secondary Licenses Notice
|
||||
|
||||
"This Source Code may also be made available under the following
|
||||
Secondary Licenses when the conditions for such availability set forth
|
||||
in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
|
||||
version(s), and exceptions or additional permissions here}."
|
||||
|
||||
Simply including a copy of this Agreement, including this Exhibit A
|
||||
is not sufficient to license the Source Code under Secondary Licenses.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to
|
||||
look for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
|
|
@ -262,19 +262,10 @@ The following binary components are provided under the Common Development and Di
|
|||
(CDDL 1.1) (GPL2 w/ CPE) jersey-core (com.sun.jersey:jersey-core:jar:1.19 - https://jersey.java.net/jersey-core/)
|
||||
(CDDL 1.1) (GPL2 w/ CPE) jersey-client (com.sun.jersey:jersey-client:jar:1.19 - https://jersey.java.net/jersey-client/)
|
||||
(CDDL 1.1) (GPL2 w/ CPE) jersey-server (com.sun.jersey:jersey-server:jar:1.19 - https://jersey.java.net/jersey-server/)
|
||||
(CDDL 1.1) (GPL2 w/ CPE) JavaMail API (compat) (javax.mail:mail:jar:1.4.7 - http://kenai.com/projects/javamail/mail)
|
||||
(CDDL 1.1) (GPL2 w/ CPE) Javax JMS Api (javax.jms:javax.jms-api:jar:2.0.1 - http://java.net/projects/jms-spec/pages/Home)
|
||||
(CDDL 1.1) (GPL2 w/ CPE) Expression Language 3.0 API (javax.el:javax.el-api:jar:3.0.0 - http://uel-spec.java.net)
|
||||
(CDDL 1.1) (GPL2 w/ CPE) javax.ws.rs-api (javax.ws.rs:javax.ws.rs-api:jar:2.1 - http://jax-rs-spec.java.net)
|
||||
|
||||
*****************
|
||||
Common Development and Distribution License v1.0:
|
||||
*****************
|
||||
|
||||
The following binary components are provided under the Common Development and Distribution License v1.0. See project link for details.
|
||||
|
||||
(CDDL 1.0) JavaBeans Activation Framework (JAF) (javax.activation:activation:jar:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp)
|
||||
|
||||
*****************
|
||||
Mozilla Public License v2.0
|
||||
*****************
|
||||
|
@ -291,5 +282,20 @@ The following binary components are provided to the 'Public Domain'. See projec
|
|||
|
||||
(Public Domain) XZ for Java (org.tukaani:xz:jar:1.5 - http://tukaani.org/xz/java.html
|
||||
|
||||
************************
|
||||
Eclipse Distribution License 1.0
|
||||
************************
|
||||
|
||||
The following binary components are provided under the Eclipse Distribution License 1.0.
|
||||
|
||||
(EDL 1.0) Jakarta Activation API (jakarta.activation:jakarta.activation-api:jar:2.0.1)
|
||||
(EDL 1.0) Jakarta Activation (com.sun.activation:jakarta.activation:jar:2.0.1)
|
||||
|
||||
************************
|
||||
Eclipse Public License 2.0
|
||||
************************
|
||||
|
||||
The following binary components are provided under the Eclipse Public License 2.0.
|
||||
|
||||
(EPL 2.0) Jakarta Mail API (jakarta.mail:jakarta.mail-api:jar:2.0.1)
|
||||
(EPL 2.0) Jakarta Mail (com.sun.mail:jakarta.mail:jar:2.0.1)
|
||||
|
|
|
@ -158,8 +158,20 @@
|
|||
<artifactId>httpcore</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.mail</groupId>
|
||||
<artifactId>mail</artifactId>
|
||||
<groupId>jakarta.activation</groupId>
|
||||
<artifactId>jakarta.activation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.activation</groupId>
|
||||
<artifactId>jakarta.activation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.mail</groupId>
|
||||
<artifactId>jakarta.mail-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>jakarta.mail</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.jponge</groupId>
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
package org.apache.nifi.processors.standard;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -33,22 +33,22 @@ import java.util.Properties;
|
|||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.activation.DataHandler;
|
||||
import javax.mail.Authenticator;
|
||||
import javax.mail.Message;
|
||||
import javax.mail.Message.RecipientType;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.PasswordAuthentication;
|
||||
import javax.mail.Session;
|
||||
import javax.mail.Transport;
|
||||
import javax.mail.internet.AddressException;
|
||||
import javax.mail.internet.InternetAddress;
|
||||
import javax.mail.internet.MimeBodyPart;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
import javax.mail.internet.MimeMultipart;
|
||||
import javax.mail.internet.MimeUtility;
|
||||
import javax.mail.internet.PreencodedMimeBodyPart;
|
||||
import javax.mail.util.ByteArrayDataSource;
|
||||
import jakarta.activation.DataHandler;
|
||||
import jakarta.mail.Authenticator;
|
||||
import jakarta.mail.Message;
|
||||
import jakarta.mail.Message.RecipientType;
|
||||
import jakarta.mail.MessagingException;
|
||||
import jakarta.mail.PasswordAuthentication;
|
||||
import jakarta.mail.Session;
|
||||
import jakarta.mail.Transport;
|
||||
import jakarta.mail.internet.AddressException;
|
||||
import jakarta.mail.internet.InternetAddress;
|
||||
import jakarta.mail.internet.MimeBodyPart;
|
||||
import jakarta.mail.internet.MimeMessage;
|
||||
import jakarta.mail.internet.MimeMultipart;
|
||||
import jakarta.mail.internet.MimeUtility;
|
||||
import jakarta.mail.internet.PreencodedMimeBodyPart;
|
||||
import jakarta.mail.util.ByteArrayDataSource;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.nifi.annotation.behavior.InputRequirement;
|
||||
|
@ -72,7 +72,6 @@ import org.apache.nifi.processor.ProcessSession;
|
|||
import org.apache.nifi.processor.ProcessorInitializationContext;
|
||||
import org.apache.nifi.processor.Relationship;
|
||||
import org.apache.nifi.processor.exception.ProcessException;
|
||||
import org.apache.nifi.processor.io.InputStreamCallback;
|
||||
import org.apache.nifi.processor.util.StandardValidators;
|
||||
import org.apache.nifi.stream.io.StreamUtils;
|
||||
|
||||
|
@ -124,7 +123,8 @@ public class PutEmail extends AbstractProcessor {
|
|||
.build();
|
||||
public static final PropertyDescriptor SMTP_TLS = new PropertyDescriptor.Builder()
|
||||
.name("SMTP TLS")
|
||||
.description("Flag indicating whether TLS should be enabled")
|
||||
.displayName("SMTP STARTTLS")
|
||||
.description("Flag indicating whether Opportunistic TLS should be enabled using STARTTLS command")
|
||||
.required(true)
|
||||
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
|
||||
.addValidator(StandardValidators.BOOLEAN_VALIDATOR)
|
||||
|
@ -243,7 +243,10 @@ public class PutEmail extends AbstractProcessor {
|
|||
.description("FlowFiles that fail to send will be routed to this relationship")
|
||||
.build();
|
||||
|
||||
private static final Charset CONTENT_CHARSET = StandardCharsets.UTF_8;
|
||||
|
||||
private List<PropertyDescriptor> properties;
|
||||
|
||||
private Set<Relationship> relationships;
|
||||
|
||||
/**
|
||||
|
@ -329,7 +332,7 @@ public class PutEmail extends AbstractProcessor {
|
|||
try {
|
||||
message.setHeader(header, MimeUtility.encodeText(value));
|
||||
} catch (UnsupportedEncodingException e){
|
||||
logger.warn("Unable to add header {} with value {} due to encoding exception", new Object[]{header, value});
|
||||
logger.warn("Unable to add header {} with value {} due to encoding exception", header, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -341,11 +344,8 @@ public class PutEmail extends AbstractProcessor {
|
|||
}
|
||||
|
||||
final Properties properties = this.getMailPropertiesFromFlowFile(context, flowFile);
|
||||
|
||||
final Session mailSession = this.createMailSession(properties);
|
||||
|
||||
final Message message = new MimeMessage(mailSession);
|
||||
final ComponentLog logger = getLogger();
|
||||
|
||||
try {
|
||||
message.addFrom(toInetAddresses(context, flowFile, FROM));
|
||||
|
@ -363,30 +363,27 @@ public class PutEmail extends AbstractProcessor {
|
|||
this.setMessageHeader("X-Mailer", context.getProperty(HEADER_XMAILER).evaluateAttributeExpressions(flowFile).getValue(), message);
|
||||
message.setSubject(context.getProperty(SUBJECT).evaluateAttributeExpressions(flowFile).getValue());
|
||||
|
||||
String messageText = getMessage(flowFile, context, session);
|
||||
final String messageText = getMessage(flowFile, context, session);
|
||||
|
||||
String contentType = context.getProperty(CONTENT_TYPE).evaluateAttributeExpressions(flowFile).getValue();
|
||||
final String contentType = context.getProperty(CONTENT_TYPE).evaluateAttributeExpressions(flowFile).getValue();
|
||||
message.setContent(messageText, contentType);
|
||||
message.setSentDate(new Date());
|
||||
|
||||
if (context.getProperty(ATTACH_FILE).asBoolean()) {
|
||||
final MimeBodyPart mimeText = new PreencodedMimeBodyPart("base64");
|
||||
mimeText.setDataHandler(new DataHandler(new ByteArrayDataSource(
|
||||
Base64.encodeBase64(messageText.getBytes("UTF-8")), contentType + "; charset=\"utf-8\"")));
|
||||
Base64.encodeBase64(messageText.getBytes(CONTENT_CHARSET)), contentType + "; charset=\"utf-8\"")));
|
||||
final MimeBodyPart mimeFile = new MimeBodyPart();
|
||||
session.read(flowFile, new InputStreamCallback() {
|
||||
@Override
|
||||
public void process(final InputStream stream) throws IOException {
|
||||
try {
|
||||
mimeFile.setDataHandler(new DataHandler(new ByteArrayDataSource(stream, "application/octet-stream")));
|
||||
} catch (final Exception e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
session.read(flowFile, stream -> {
|
||||
try {
|
||||
mimeFile.setDataHandler(new DataHandler(new ByteArrayDataSource(stream, "application/octet-stream")));
|
||||
} catch (final Exception e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
});
|
||||
|
||||
mimeFile.setFileName(MimeUtility.encodeText(flowFile.getAttribute(CoreAttributes.FILENAME.key())));
|
||||
MimeMultipart multipart = new MimeMultipart();
|
||||
final MimeMultipart multipart = new MimeMultipart();
|
||||
multipart.addBodyPart(mimeText);
|
||||
multipart.addBodyPart(mimeFile);
|
||||
message.setContent(multipart);
|
||||
|
@ -396,10 +393,10 @@ public class PutEmail extends AbstractProcessor {
|
|||
|
||||
session.getProvenanceReporter().send(flowFile, "mailto:" + message.getAllRecipients()[0].toString());
|
||||
session.transfer(flowFile, REL_SUCCESS);
|
||||
logger.info("Sent email as a result of receiving {}", new Object[]{flowFile});
|
||||
getLogger().debug("Sent email as a result of receiving {}", flowFile);
|
||||
} catch (final ProcessException | MessagingException | IOException e) {
|
||||
context.yield();
|
||||
logger.error("Failed to send email for {}: {}; routing to failure", new Object[]{flowFile, e.getMessage()}, e);
|
||||
getLogger().error("Failed to send email for {}: {}; routing to failure", flowFile, e.getMessage(), e);
|
||||
session.transfer(flowFile, REL_FAILURE);
|
||||
}
|
||||
}
|
||||
|
@ -410,14 +407,9 @@ public class PutEmail extends AbstractProcessor {
|
|||
if(context.getProperty(CONTENT_AS_MESSAGE).evaluateAttributeExpressions(flowFile).asBoolean()) {
|
||||
// reading all the content of the input flow file
|
||||
final byte[] byteBuffer = new byte[(int) flowFile.getSize()];
|
||||
session.read(flowFile, new InputStreamCallback() {
|
||||
@Override
|
||||
public void process(InputStream in) throws IOException {
|
||||
StreamUtils.fillBuffer(in, byteBuffer, false);
|
||||
}
|
||||
});
|
||||
session.read(flowFile, in -> StreamUtils.fillBuffer(in, byteBuffer, false));
|
||||
|
||||
messageText = new String(byteBuffer, 0, byteBuffer.length, Charset.forName("UTF-8"));
|
||||
messageText = new String(byteBuffer, 0, byteBuffer.length, CONTENT_CHARSET);
|
||||
} else if (context.getProperty(MESSAGE).isSet()) {
|
||||
messageText = context.getProperty(MESSAGE).evaluateAttributeExpressions(flowFile).getValue();
|
||||
}
|
||||
|
@ -436,20 +428,19 @@ public class PutEmail extends AbstractProcessor {
|
|||
* @return session
|
||||
*/
|
||||
private Session createMailSession(final Properties properties) {
|
||||
String authValue = properties.getProperty("mail.smtp.auth");
|
||||
Boolean auth = Boolean.valueOf(authValue);
|
||||
final boolean auth = Boolean.parseBoolean(properties.getProperty("mail.smtp.auth"));
|
||||
|
||||
/*
|
||||
* Conditionally create a password authenticator if the 'auth' parameter is set.
|
||||
*/
|
||||
final Session mailSession = auth ? Session.getInstance(properties, new Authenticator() {
|
||||
return auth ? Session.getInstance(properties, new Authenticator() {
|
||||
@Override
|
||||
public PasswordAuthentication getPasswordAuthentication() {
|
||||
String username = properties.getProperty("mail.smtp.user"), password = properties.getProperty("mail.smtp.password");
|
||||
final String username = properties.getProperty("mail.smtp.user");
|
||||
final String password = properties.getProperty("mail.smtp.password");
|
||||
return new PasswordAuthentication(username, password);
|
||||
}
|
||||
}) : Session.getInstance(properties); // without auth
|
||||
return mailSession;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -460,25 +451,17 @@ public class PutEmail extends AbstractProcessor {
|
|||
* @return mail properties
|
||||
*/
|
||||
private Properties getMailPropertiesFromFlowFile(final ProcessContext context, final FlowFile flowFile) {
|
||||
|
||||
final Properties properties = new Properties();
|
||||
|
||||
final ComponentLog logger = this.getLogger();
|
||||
|
||||
for (Entry<String, PropertyDescriptor> entry : propertyToContext.entrySet()) {
|
||||
|
||||
for (final Entry<String, PropertyDescriptor> entry : propertyToContext.entrySet()) {
|
||||
// Evaluate the property descriptor against the flow file
|
||||
String flowFileValue = context.getProperty(entry.getValue()).evaluateAttributeExpressions(flowFile).getValue();
|
||||
|
||||
String property = entry.getKey();
|
||||
|
||||
logger.debug("Evaluated Mail Property: {} with Value: {}", new Object[]{property, flowFileValue});
|
||||
final String flowFileValue = context.getProperty(entry.getValue()).evaluateAttributeExpressions(flowFile).getValue();
|
||||
final String property = entry.getKey();
|
||||
|
||||
// Nullable values are not allowed, so filter out
|
||||
if (null != flowFileValue) {
|
||||
properties.setProperty(property, flowFileValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return properties;
|
||||
|
@ -488,14 +471,14 @@ public class PutEmail extends AbstractProcessor {
|
|||
public static final String BODY_SEPARATOR = "\n\n--------------------------------------------------\n";
|
||||
|
||||
private static String formatAttributes(final FlowFile flowFile, final String messagePrepend) {
|
||||
StringBuilder message = new StringBuilder(messagePrepend);
|
||||
final StringBuilder message = new StringBuilder(messagePrepend);
|
||||
message.append(BODY_SEPARATOR);
|
||||
message.append("\nStandard FlowFile Metadata:");
|
||||
message.append(String.format("\n\t%1$s = '%2$s'", "id", flowFile.getAttribute(CoreAttributes.UUID.key())));
|
||||
message.append(String.format("\n\t%1$s = '%2$s'", "entryDate", new Date(flowFile.getEntryDate())));
|
||||
message.append(String.format("\n\t%1$s = '%2$s'", "fileSize", flowFile.getSize()));
|
||||
message.append("\nFlowFile Attributes:");
|
||||
for (Entry<String, String> attribute : flowFile.getAttributes().entrySet()) {
|
||||
for (final Entry<String, String> attribute : flowFile.getAttributes().entrySet()) {
|
||||
message.append(String.format("\n\t%1$s = '%2$s'", attribute.getKey(), attribute.getValue()));
|
||||
}
|
||||
message.append("\n");
|
||||
|
@ -512,7 +495,7 @@ public class PutEmail extends AbstractProcessor {
|
|||
private InternetAddress[] toInetAddresses(final ProcessContext context, final FlowFile flowFile,
|
||||
PropertyDescriptor propertyDescriptor) throws AddressException {
|
||||
InternetAddress[] parse;
|
||||
String value = context.getProperty(propertyDescriptor).evaluateAttributeExpressions(flowFile).getValue();
|
||||
final String value = context.getProperty(propertyDescriptor).evaluateAttributeExpressions(flowFile).getValue();
|
||||
if (value == null || value.isEmpty()){
|
||||
if (propertyDescriptor.isRequired()) {
|
||||
final String exceptionMsg = "Required property '" + propertyDescriptor.getDisplayName() + "' evaluates to an empty string.";
|
||||
|
@ -540,5 +523,4 @@ public class PutEmail extends AbstractProcessor {
|
|||
protected void send(final Message msg) throws MessagingException {
|
||||
Transport.send(msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,17 +21,18 @@ import static org.junit.Assert.assertNull;
|
|||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.mail.BodyPart;
|
||||
import javax.mail.Message;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.internet.MimeMessage.RecipientType;
|
||||
import javax.mail.internet.MimeMultipart;
|
||||
import javax.mail.internet.MimeUtility;
|
||||
import jakarta.mail.BodyPart;
|
||||
import jakarta.mail.Message;
|
||||
import jakarta.mail.MessagingException;
|
||||
import jakarta.mail.internet.MimeMessage.RecipientType;
|
||||
import jakarta.mail.internet.MimeMultipart;
|
||||
import jakarta.mail.internet.MimeUtility;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.commons.codec.binary.StringUtils;
|
||||
|
@ -59,7 +60,7 @@ public class TestPutEmail {
|
|||
*/
|
||||
private static final class PutEmailExtension extends PutEmail {
|
||||
private MessagingException e;
|
||||
private ArrayList<Message> messages = new ArrayList<>();
|
||||
private final ArrayList<Message> messages = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
protected void send(Message msg) throws MessagingException {
|
||||
|
@ -178,7 +179,7 @@ public class TestPutEmail {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidAddress() throws Exception {
|
||||
public void testInvalidAddress() {
|
||||
// verifies that unparsable addresses lead to the flow file being routed to failure
|
||||
runner.setProperty(PutEmail.SMTP_HOSTNAME, "smtp-host");
|
||||
runner.setProperty(PutEmail.HEADER_XMAILER, "TestingNiFi");
|
||||
|
@ -197,7 +198,7 @@ public class TestPutEmail {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testEmptyFrom() throws Exception {
|
||||
public void testEmptyFrom() {
|
||||
// verifies that if the FROM property evaluates to an empty string at
|
||||
// runtime the flow file is transferred to failure.
|
||||
runner.setProperty(PutEmail.SMTP_HOSTNAME, "smtp-host");
|
||||
|
@ -250,12 +251,12 @@ public class TestPutEmail {
|
|||
final MimeMultipart multipart = (MimeMultipart) message.getContent();
|
||||
final BodyPart part = multipart.getBodyPart(0);
|
||||
final InputStream is = part.getDataHandler().getInputStream();
|
||||
final String decodedText = StringUtils.newStringUtf8(Base64.decodeBase64(IOUtils.toString(is, "UTF-8")));
|
||||
final String decodedText = StringUtils.newStringUtf8(Base64.decodeBase64(IOUtils.toString(is, StandardCharsets.UTF_8)));
|
||||
assertEquals("Message Body", decodedText);
|
||||
|
||||
final BodyPart attachPart = multipart.getBodyPart(1);
|
||||
final InputStream attachIs = attachPart.getDataHandler().getInputStream();
|
||||
final String text = IOUtils.toString(attachIs, "UTF-8");
|
||||
final String text = IOUtils.toString(attachIs, StandardCharsets.UTF_8);
|
||||
assertEquals("test한的ほу́.pdf", MimeUtility.decodeText(attachPart.getFileName()));
|
||||
assertEquals("Some text", text);
|
||||
|
||||
|
@ -275,7 +276,7 @@ public class TestPutEmail {
|
|||
runner.setProperty(PutEmail.BCC, "recipientbcc@apache.org,anotherbcc@apache.org");
|
||||
runner.setProperty(PutEmail.CONTENT_AS_MESSAGE, "${sendContent}");
|
||||
|
||||
Map<String, String> attributes = new HashMap<String, String>();
|
||||
Map<String, String> attributes = new HashMap<>();
|
||||
attributes.put("sendContent", "true");
|
||||
attributes.put("body", "Message Body");
|
||||
|
||||
|
|
|
@ -201,9 +201,24 @@
|
|||
<version>4.4.9</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.mail</groupId>
|
||||
<artifactId>mail</artifactId>
|
||||
<version>1.4.7</version>
|
||||
<groupId>jakarta.activation</groupId>
|
||||
<artifactId>jakarta.activation-api</artifactId>
|
||||
<version>2.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.activation</groupId>
|
||||
<artifactId>jakarta.activation</artifactId>
|
||||
<version>2.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.mail</groupId>
|
||||
<artifactId>jakarta.mail-api</artifactId>
|
||||
<version>2.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>jakarta.mail</artifactId>
|
||||
<version>2.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.jponge</groupId>
|
||||
|
|
Loading…
Reference in New Issue