Added: 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.html
==============================================================================
--- 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.html
 (added)
+++ 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/IDNEmailAddressConverter.html
 Sat Jun 15 15:07:30 2024
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: 
org.apache.commons.mail2.javax.util, class: IDNEmailAddressConverter">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" 
href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the 
Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor 
license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for 
additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses 
this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); 
you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You 
may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     
http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required 
by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under 
the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT 
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License 
for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under 
the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package 
org.apache.commons.mail2.javax.util;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import 
java.net.IDN;</span>
+<span class="source-line-no">020</span><span id="line-20">import 
java.util.function.Function;</span>
+<span class="source-line-no">021</span><span id="line-21"></span>
+<span class="source-line-no">022</span><span id="line-22">import 
javax.mail.internet.InternetAddress;</span>
+<span class="source-line-no">023</span><span id="line-23"></span>
+<span class="source-line-no">024</span><span id="line-24">/**</span>
+<span class="source-line-no">025</span><span id="line-25"> * Converts email 
addresses containing International Domain Names into an ASCII representation 
suitable for sending an email.</span>
+<span class="source-line-no">026</span><span id="line-26"> *</span>
+<span class="source-line-no">027</span><span id="line-27"> * @see &lt;a 
href="https://docs.oracle.com/javase/tutorial/i18n/network/idn.html"&gt;https://docs.oracle.com/javase/tutorial/i18n/network/idn.html&lt;/a&gt;</span>
+<span class="source-line-no">028</span><span id="line-28"> * @see &lt;a 
href="https://en.wikipedia.org/wiki/Punycode"&gt;https://en.wikipedia.org/wiki/Punycode&lt;/a&gt;</span>
+<span class="source-line-no">029</span><span id="line-29"> * @see &lt;a 
href="https://tools.ietf.org/html/rfc5891"&gt;https://tools.ietf.org/html/rfc5891&lt;/a&gt;</span>
+<span class="source-line-no">030</span><span id="line-30"> * @see &lt;a 
href="https://en.wikipedia.org/wiki/Punycode"&gt;https://en.wikipedia.org/wiki/Punycode&lt;/a&gt;</span>
+<span class="source-line-no">031</span><span id="line-31"> *</span>
+<span class="source-line-no">032</span><span id="line-32"> * @since 1.5</span>
+<span class="source-line-no">033</span><span id="line-33"> */</span>
+<span class="source-line-no">034</span><span id="line-34">public class 
IDNEmailAddressConverter {</span>
+<span class="source-line-no">035</span><span id="line-35"></span>
+<span class="source-line-no">036</span><span id="line-36">    /**</span>
+<span class="source-line-no">037</span><span id="line-37">     * Constructs a 
new instance.</span>
+<span class="source-line-no">038</span><span id="line-38">     */</span>
+<span class="source-line-no">039</span><span id="line-39">    public 
IDNEmailAddressConverter() {</span>
+<span class="source-line-no">040</span><span id="line-40">        // 
empty</span>
+<span class="source-line-no">041</span><span id="line-41">    }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">    /**</span>
+<span class="source-line-no">044</span><span id="line-44">     * Extracts the 
domain part of the email address.</span>
+<span class="source-line-no">045</span><span id="line-45">     *</span>
+<span class="source-line-no">046</span><span id="line-46">     * @param email 
email address.</span>
+<span class="source-line-no">047</span><span id="line-47">     * @param idx   
index of '@' character.</span>
+<span class="source-line-no">048</span><span id="line-48">     * @return 
domain part of email</span>
+<span class="source-line-no">049</span><span id="line-49">     */</span>
+<span class="source-line-no">050</span><span id="line-50">    private String 
getDomainPart(final String email, final int idx) {</span>
+<span class="source-line-no">051</span><span id="line-51">        return 
email.substring(idx + 1);</span>
+<span class="source-line-no">052</span><span id="line-52">    }</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">    /**</span>
+<span class="source-line-no">055</span><span id="line-55">     * Extracts the 
local part of the email address.</span>
+<span class="source-line-no">056</span><span id="line-56">     *</span>
+<span class="source-line-no">057</span><span id="line-57">     * @param email 
email address.</span>
+<span class="source-line-no">058</span><span id="line-58">     * @param idx   
index of '@' character.</span>
+<span class="source-line-no">059</span><span id="line-59">     * @return local 
part of email</span>
+<span class="source-line-no">060</span><span id="line-60">     */</span>
+<span class="source-line-no">061</span><span id="line-61">    private String 
getLocalPart(final String email, final int idx) {</span>
+<span class="source-line-no">062</span><span id="line-62">        return 
email.substring(0, idx);</span>
+<span class="source-line-no">063</span><span id="line-63">    }</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">    /**</span>
+<span class="source-line-no">066</span><span id="line-66">     * Converts an 
email address to its ASCII representation using "Punycode".</span>
+<span class="source-line-no">067</span><span id="line-67">     *</span>
+<span class="source-line-no">068</span><span id="line-68">     * @param email 
email address.</span>
+<span class="source-line-no">069</span><span id="line-69">     * @return The 
ASCII representation</span>
+<span class="source-line-no">070</span><span id="line-70">     */</span>
+<span class="source-line-no">071</span><span id="line-71">    public String 
toASCII(final String email) {</span>
+<span class="source-line-no">072</span><span id="line-72">        return 
toString(email, IDN::toASCII);</span>
+<span class="source-line-no">073</span><span id="line-73">    }</span>
+<span class="source-line-no">074</span><span id="line-74"></span>
+<span class="source-line-no">075</span><span id="line-75">    private String 
toString(final String email, final Function&lt;String, String&gt; converter) 
{</span>
+<span class="source-line-no">076</span><span id="line-76">        final int 
idx = email == null ? -1 : email.indexOf('@');</span>
+<span class="source-line-no">077</span><span id="line-77">        if (idx &lt; 
0) {</span>
+<span class="source-line-no">078</span><span id="line-78">            return 
email;</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80">        return 
getLocalPart(email, idx) + '@' + converter.apply(getDomainPart(email, 
idx));</span>
+<span class="source-line-no">081</span><span id="line-81">    }</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83">    /**</span>
+<span class="source-line-no">084</span><span id="line-84">     * Converts the 
address part of an InternetAddress to its Unicode representation.</span>
+<span class="source-line-no">085</span><span id="line-85">     *</span>
+<span class="source-line-no">086</span><span id="line-86">     * @param 
address email address.</span>
+<span class="source-line-no">087</span><span id="line-87">     * @return The 
Unicode representation</span>
+<span class="source-line-no">088</span><span id="line-88">     */</span>
+<span class="source-line-no">089</span><span id="line-89">    String 
toUnicode(final InternetAddress address) {</span>
+<span class="source-line-no">090</span><span id="line-90">        return 
address != null ? toUnicode(address.getAddress()) : null;</span>
+<span class="source-line-no">091</span><span id="line-91">    }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">    /**</span>
+<span class="source-line-no">094</span><span id="line-94">     * Converts an 
"Punycode" email address to its Unicode representation.</span>
+<span class="source-line-no">095</span><span id="line-95">     *</span>
+<span class="source-line-no">096</span><span id="line-96">     * @param email 
email address.</span>
+<span class="source-line-no">097</span><span id="line-97">     * @return The 
Unicode representation</span>
+<span class="source-line-no">098</span><span id="line-98">     */</span>
+<span class="source-line-no">099</span><span id="line-99">    String 
toUnicode(final String email) {</span>
+<span class="source-line-no">100</span><span id="line-100">        return 
toString(email, IDN::toUnicode);</span>
+<span class="source-line-no">101</span><span id="line-101">    }</span>
+<span class="source-line-no">102</span><span id="line-102">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/MimeMessageParser.html
==============================================================================
--- 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/MimeMessageParser.html
 (added)
+++ 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/MimeMessageParser.html
 Sat Jun 15 15:07:30 2024
@@ -0,0 +1,474 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: 
org.apache.commons.mail2.javax.util, class: MimeMessageParser">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" 
href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the 
Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor 
license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for 
additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses 
this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); 
you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You 
may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     
http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required 
by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under 
the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT 
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License 
for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under 
the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package 
org.apache.commons.mail2.javax.util;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import 
java.io.IOException;</span>
+<span class="source-line-no">020</span><span id="line-20">import 
java.io.UnsupportedEncodingException;</span>
+<span class="source-line-no">021</span><span id="line-21">import 
java.util.ArrayList;</span>
+<span class="source-line-no">022</span><span id="line-22">import 
java.util.Arrays;</span>
+<span class="source-line-no">023</span><span id="line-23">import 
java.util.Collection;</span>
+<span class="source-line-no">024</span><span id="line-24">import 
java.util.Collections;</span>
+<span class="source-line-no">025</span><span id="line-25">import 
java.util.HashMap;</span>
+<span class="source-line-no">026</span><span id="line-26">import 
java.util.List;</span>
+<span class="source-line-no">027</span><span id="line-27">import 
java.util.Map;</span>
+<span class="source-line-no">028</span><span id="line-28"></span>
+<span class="source-line-no">029</span><span id="line-29">import 
javax.activation.DataSource;</span>
+<span class="source-line-no">030</span><span id="line-30">import 
javax.mail.Address;</span>
+<span class="source-line-no">031</span><span id="line-31">import 
javax.mail.Message;</span>
+<span class="source-line-no">032</span><span id="line-32">import 
javax.mail.MessagingException;</span>
+<span class="source-line-no">033</span><span id="line-33">import 
javax.mail.Multipart;</span>
+<span class="source-line-no">034</span><span id="line-34">import 
javax.mail.Part;</span>
+<span class="source-line-no">035</span><span id="line-35">import 
javax.mail.internet.ContentType;</span>
+<span class="source-line-no">036</span><span id="line-36">import 
javax.mail.internet.InternetAddress;</span>
+<span class="source-line-no">037</span><span id="line-37">import 
javax.mail.internet.MimeBodyPart;</span>
+<span class="source-line-no">038</span><span id="line-38">import 
javax.mail.internet.MimeMessage;</span>
+<span class="source-line-no">039</span><span id="line-39">import 
javax.mail.internet.MimePart;</span>
+<span class="source-line-no">040</span><span id="line-40">import 
javax.mail.internet.MimeUtility;</span>
+<span class="source-line-no">041</span><span id="line-41">import 
javax.mail.internet.ParseException;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">import 
org.apache.commons.mail2.javax.activation.InputStreamDataSource;</span>
+<span class="source-line-no">044</span><span id="line-44"></span>
+<span class="source-line-no">045</span><span id="line-45">/**</span>
+<span class="source-line-no">046</span><span id="line-46"> * Parses a 
MimeMessage and stores the individual parts such a plain text, HTML text and 
attachments.</span>
+<span class="source-line-no">047</span><span id="line-47"> *</span>
+<span class="source-line-no">048</span><span id="line-48"> * @since 1.3</span>
+<span class="source-line-no">049</span><span id="line-49"> */</span>
+<span class="source-line-no">050</span><span id="line-50">public class 
MimeMessageParser {</span>
+<span class="source-line-no">051</span><span id="line-51"></span>
+<span class="source-line-no">052</span><span id="line-52">    /** The 
MimeMessage to convert. */</span>
+<span class="source-line-no">053</span><span id="line-53">    private final 
MimeMessage mimeMessage;</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">    /** Plain mail 
content from MimeMessage. */</span>
+<span class="source-line-no">056</span><span id="line-56">    private String 
plainContent;</span>
+<span class="source-line-no">057</span><span id="line-57"></span>
+<span class="source-line-no">058</span><span id="line-58">    /** HTML mail 
content from MimeMessage. */</span>
+<span class="source-line-no">059</span><span id="line-59">    private String 
htmlContent;</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61">    /** List of 
attachments of MimeMessage. */</span>
+<span class="source-line-no">062</span><span id="line-62">    private final 
List&lt;DataSource&gt; attachmentList;</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64">    /** Attachments 
stored by their content-id. */</span>
+<span class="source-line-no">065</span><span id="line-65">    private final 
Map&lt;String, DataSource&gt; cidMap;</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67">    /** Is this a 
Multipart email. */</span>
+<span class="source-line-no">068</span><span id="line-68">    private boolean 
isMultiPart;</span>
+<span class="source-line-no">069</span><span id="line-69"></span>
+<span class="source-line-no">070</span><span id="line-70">    /**</span>
+<span class="source-line-no">071</span><span id="line-71">     * Constructs an 
instance with the MimeMessage to be extracted.</span>
+<span class="source-line-no">072</span><span id="line-72">     *</span>
+<span class="source-line-no">073</span><span id="line-73">     * @param 
mimeMessage the message to parse</span>
+<span class="source-line-no">074</span><span id="line-74">     */</span>
+<span class="source-line-no">075</span><span id="line-75">    public 
MimeMessageParser(final MimeMessage mimeMessage) {</span>
+<span class="source-line-no">076</span><span id="line-76">        
this.attachmentList = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">077</span><span id="line-77">        this.cidMap 
= new HashMap&lt;&gt;();</span>
+<span class="source-line-no">078</span><span id="line-78">        
this.mimeMessage = mimeMessage;</span>
+<span class="source-line-no">079</span><span id="line-79">        
this.isMultiPart = false;</span>
+<span class="source-line-no">080</span><span id="line-80">    }</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82">    private 
List&lt;Address&gt; asList(final Address[] recipients) {</span>
+<span class="source-line-no">083</span><span id="line-83">        return 
recipients != null ? Arrays.asList(recipients) : new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">084</span><span id="line-84">    }</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86">    /**</span>
+<span class="source-line-no">087</span><span id="line-87">     * Parses the 
MimePart to create a DataSource.</span>
+<span class="source-line-no">088</span><span id="line-88">     *</span>
+<span class="source-line-no">089</span><span id="line-89">     * @param parent 
the parent multi-part</span>
+<span class="source-line-no">090</span><span id="line-90">     * @param part   
the current part to be processed</span>
+<span class="source-line-no">091</span><span id="line-91">     * @return the 
DataSource</span>
+<span class="source-line-no">092</span><span id="line-92">     * @throws 
MessagingException creating the DataSource failed</span>
+<span class="source-line-no">093</span><span id="line-93">     * @throws 
IOException        error getting InputStream or unsupported encoding</span>
+<span class="source-line-no">094</span><span id="line-94">     */</span>
+<span class="source-line-no">095</span><span id="line-95">    
@SuppressWarnings("resource") // Caller closes InputStream</span>
+<span class="source-line-no">096</span><span id="line-96">    protected 
DataSource createDataSource(final Multipart parent, final MimePart part) throws 
MessagingException, IOException {</span>
+<span class="source-line-no">097</span><span id="line-97">        final 
DataSource dataSource = part.getDataHandler().getDataSource();</span>
+<span class="source-line-no">098</span><span id="line-98">        final String 
contentType = getBaseMimeType(dataSource.getContentType());</span>
+<span class="source-line-no">099</span><span id="line-99">        final String 
dataSourceName = getDataSourceName(part, dataSource);</span>
+<span class="source-line-no">100</span><span id="line-100">        return new 
InputStreamDataSource(dataSource.getInputStream(), contentType, 
dataSourceName);</span>
+<span class="source-line-no">101</span><span id="line-101">    }</span>
+<span class="source-line-no">102</span><span id="line-102"></span>
+<span class="source-line-no">103</span><span id="line-103">    /**</span>
+<span class="source-line-no">104</span><span id="line-104">     * Find an 
attachment using its content-id.</span>
+<span class="source-line-no">105</span><span id="line-105">     * 
&lt;p&gt;</span>
+<span class="source-line-no">106</span><span id="line-106">     * The 
content-id must be stripped of any angle brackets, i.e. "part1" instead of 
"&amp;lt;part1&amp;gt;".</span>
+<span class="source-line-no">107</span><span id="line-107">     * 
&lt;/p&gt;</span>
+<span class="source-line-no">108</span><span id="line-108">     *</span>
+<span class="source-line-no">109</span><span id="line-109">     * @param cid 
the content-id of the attachment</span>
+<span class="source-line-no">110</span><span id="line-110">     * @return the 
corresponding datasource or null if nothing was found</span>
+<span class="source-line-no">111</span><span id="line-111">     * @since 
1.3.4</span>
+<span class="source-line-no">112</span><span id="line-112">     */</span>
+<span class="source-line-no">113</span><span id="line-113">    public 
DataSource findAttachmentByCid(final String cid) {</span>
+<span class="source-line-no">114</span><span id="line-114">        return 
cidMap.get(cid);</span>
+<span class="source-line-no">115</span><span id="line-115">    }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117">    /**</span>
+<span class="source-line-no">118</span><span id="line-118">     * Find an 
attachment using its name.</span>
+<span class="source-line-no">119</span><span id="line-119">     *</span>
+<span class="source-line-no">120</span><span id="line-120">     * @param name 
the name of the attachment</span>
+<span class="source-line-no">121</span><span id="line-121">     * @return the 
corresponding datasource or null if nothing was found</span>
+<span class="source-line-no">122</span><span id="line-122">     */</span>
+<span class="source-line-no">123</span><span id="line-123">    public 
DataSource findAttachmentByName(final String name) {</span>
+<span class="source-line-no">124</span><span id="line-124">        for (final 
DataSource dataSource : getAttachmentList()) {</span>
+<span class="source-line-no">125</span><span id="line-125">            if 
(name.equalsIgnoreCase(dataSource.getName())) {</span>
+<span class="source-line-no">126</span><span id="line-126">                
return dataSource;</span>
+<span class="source-line-no">127</span><span id="line-127">            }</span>
+<span class="source-line-no">128</span><span id="line-128">        }</span>
+<span class="source-line-no">129</span><span id="line-129">        return 
null;</span>
+<span class="source-line-no">130</span><span id="line-130">    }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132">    /**</span>
+<span class="source-line-no">133</span><span id="line-133">     * Gets the 
attachment list.</span>
+<span class="source-line-no">134</span><span id="line-134">     *</span>
+<span class="source-line-no">135</span><span id="line-135">     * @return 
Returns the attachment list.</span>
+<span class="source-line-no">136</span><span id="line-136">     */</span>
+<span class="source-line-no">137</span><span id="line-137">    public 
List&lt;DataSource&gt; getAttachmentList() {</span>
+<span class="source-line-no">138</span><span id="line-138">        return 
attachmentList;</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140"></span>
+<span class="source-line-no">141</span><span id="line-141">    /**</span>
+<span class="source-line-no">142</span><span id="line-142">     * Gets the 
MIME type.</span>
+<span class="source-line-no">143</span><span id="line-143">     *</span>
+<span class="source-line-no">144</span><span id="line-144">     * @param 
fullMimeType the mime type from the mail API</span>
+<span class="source-line-no">145</span><span id="line-145">     * @return the 
real mime type</span>
+<span class="source-line-no">146</span><span id="line-146">     */</span>
+<span class="source-line-no">147</span><span id="line-147">    private String 
getBaseMimeType(final String fullMimeType) {</span>
+<span class="source-line-no">148</span><span id="line-148">        final int 
pos = fullMimeType.indexOf(';');</span>
+<span class="source-line-no">149</span><span id="line-149">        return pos 
&lt; 0 ? fullMimeType : fullMimeType.substring(0, pos);</span>
+<span class="source-line-no">150</span><span id="line-150">    }</span>
+<span class="source-line-no">151</span><span id="line-151"></span>
+<span class="source-line-no">152</span><span id="line-152">    /**</span>
+<span class="source-line-no">153</span><span id="line-153">     * Gets the BCC 
Address list.</span>
+<span class="source-line-no">154</span><span id="line-154">     *</span>
+<span class="source-line-no">155</span><span id="line-155">     * @return the 
'BCC' recipients of the message</span>
+<span class="source-line-no">156</span><span id="line-156">     * @throws 
MessagingException determining the recipients failed</span>
+<span class="source-line-no">157</span><span id="line-157">     */</span>
+<span class="source-line-no">158</span><span id="line-158">    public 
List&lt;Address&gt; getBcc() throws MessagingException {</span>
+<span class="source-line-no">159</span><span id="line-159">        return 
asList(mimeMessage.getRecipients(Message.RecipientType.BCC));</span>
+<span class="source-line-no">160</span><span id="line-160">    }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162">    /**</span>
+<span class="source-line-no">163</span><span id="line-163">     * Gets the CC 
Address list.</span>
+<span class="source-line-no">164</span><span id="line-164">     *</span>
+<span class="source-line-no">165</span><span id="line-165">     * @return the 
'CC' recipients of the message</span>
+<span class="source-line-no">166</span><span id="line-166">     * @throws 
MessagingException determining the recipients failed</span>
+<span class="source-line-no">167</span><span id="line-167">     */</span>
+<span class="source-line-no">168</span><span id="line-168">    public 
List&lt;Address&gt; getCc() throws MessagingException {</span>
+<span class="source-line-no">169</span><span id="line-169">        return 
asList(mimeMessage.getRecipients(Message.RecipientType.CC));</span>
+<span class="source-line-no">170</span><span id="line-170">    }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172">    /**</span>
+<span class="source-line-no">173</span><span id="line-173">     * Returns a 
collection of all content-ids in the parsed message.</span>
+<span class="source-line-no">174</span><span id="line-174">     * 
&lt;p&gt;</span>
+<span class="source-line-no">175</span><span id="line-175">     * The 
content-ids are stripped of any angle brackets, i.e. "part1" instead of 
"&amp;lt;part1&amp;gt;".</span>
+<span class="source-line-no">176</span><span id="line-176">     * 
&lt;/p&gt;</span>
+<span class="source-line-no">177</span><span id="line-177">     *</span>
+<span class="source-line-no">178</span><span id="line-178">     * @return the 
collection of content ids.</span>
+<span class="source-line-no">179</span><span id="line-179">     * @since 
1.3.4</span>
+<span class="source-line-no">180</span><span id="line-180">     */</span>
+<span class="source-line-no">181</span><span id="line-181">    public 
Collection&lt;String&gt; getContentIds() {</span>
+<span class="source-line-no">182</span><span id="line-182">        return 
Collections.unmodifiableSet(cidMap.keySet());</span>
+<span class="source-line-no">183</span><span id="line-183">    }</span>
+<span class="source-line-no">184</span><span id="line-184"></span>
+<span class="source-line-no">185</span><span id="line-185">    /**</span>
+<span class="source-line-no">186</span><span id="line-186">     * Determines 
the name of the data source if it is not already set.</span>
+<span class="source-line-no">187</span><span id="line-187">     *</span>
+<span class="source-line-no">188</span><span id="line-188">     * @param part  
     the mail part</span>
+<span class="source-line-no">189</span><span id="line-189">     * @param 
dataSource the data source</span>
+<span class="source-line-no">190</span><span id="line-190">     * @return the 
name of the data source or {@code null} if no name can be determined</span>
+<span class="source-line-no">191</span><span id="line-191">     * @throws 
MessagingException           accessing the part failed</span>
+<span class="source-line-no">192</span><span id="line-192">     * @throws 
UnsupportedEncodingException decoding the text failed</span>
+<span class="source-line-no">193</span><span id="line-193">     */</span>
+<span class="source-line-no">194</span><span id="line-194">    protected 
String getDataSourceName(final Part part, final DataSource dataSource) throws 
MessagingException, UnsupportedEncodingException {</span>
+<span class="source-line-no">195</span><span id="line-195">        String 
result = dataSource.getName();</span>
+<span class="source-line-no">196</span><span id="line-196">        if 
(isEmpty(result)) {</span>
+<span class="source-line-no">197</span><span id="line-197">            result 
= part.getFileName();</span>
+<span class="source-line-no">198</span><span id="line-198">        }</span>
+<span class="source-line-no">199</span><span id="line-199">        if 
(!isEmpty(result)) {</span>
+<span class="source-line-no">200</span><span id="line-200">            result 
= MimeUtility.decodeText(result);</span>
+<span class="source-line-no">201</span><span id="line-201">        } else 
{</span>
+<span class="source-line-no">202</span><span id="line-202">            result 
= null;</span>
+<span class="source-line-no">203</span><span id="line-203">        }</span>
+<span class="source-line-no">204</span><span id="line-204">        return 
result;</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207">    /**</span>
+<span class="source-line-no">208</span><span id="line-208">     * Gets the 
FROM field.</span>
+<span class="source-line-no">209</span><span id="line-209">     *</span>
+<span class="source-line-no">210</span><span id="line-210">     * @return the 
FROM field of the message</span>
+<span class="source-line-no">211</span><span id="line-211">     * @throws 
MessagingException parsing the mime message failed</span>
+<span class="source-line-no">212</span><span id="line-212">     */</span>
+<span class="source-line-no">213</span><span id="line-213">    public String 
getFrom() throws MessagingException {</span>
+<span class="source-line-no">214</span><span id="line-214">        final 
Address[] addresses = mimeMessage.getFrom();</span>
+<span class="source-line-no">215</span><span id="line-215">        if 
(isEmpty(addresses)) {</span>
+<span class="source-line-no">216</span><span id="line-216">            return 
null;</span>
+<span class="source-line-no">217</span><span id="line-217">        }</span>
+<span class="source-line-no">218</span><span id="line-218">        return 
((InternetAddress) addresses[0]).getAddress();</span>
+<span class="source-line-no">219</span><span id="line-219">    }</span>
+<span class="source-line-no">220</span><span id="line-220"></span>
+<span class="source-line-no">221</span><span id="line-221">    /**</span>
+<span class="source-line-no">222</span><span id="line-222">     * Gets the 
htmlContent if any.</span>
+<span class="source-line-no">223</span><span id="line-223">     *</span>
+<span class="source-line-no">224</span><span id="line-224">     * @return 
Returns the htmlContent if any</span>
+<span class="source-line-no">225</span><span id="line-225">     */</span>
+<span class="source-line-no">226</span><span id="line-226">    public String 
getHtmlContent() {</span>
+<span class="source-line-no">227</span><span id="line-227">        return 
htmlContent;</span>
+<span class="source-line-no">228</span><span id="line-228">    }</span>
+<span class="source-line-no">229</span><span id="line-229"></span>
+<span class="source-line-no">230</span><span id="line-230">    /**</span>
+<span class="source-line-no">231</span><span id="line-231">     * Gets the 
MimeMessage.</span>
+<span class="source-line-no">232</span><span id="line-232">     *</span>
+<span class="source-line-no">233</span><span id="line-233">     * @return 
Returns the mimeMessage.</span>
+<span class="source-line-no">234</span><span id="line-234">     */</span>
+<span class="source-line-no">235</span><span id="line-235">    public 
MimeMessage getMimeMessage() {</span>
+<span class="source-line-no">236</span><span id="line-236">        return 
mimeMessage;</span>
+<span class="source-line-no">237</span><span id="line-237">    }</span>
+<span class="source-line-no">238</span><span id="line-238"></span>
+<span class="source-line-no">239</span><span id="line-239">    /**</span>
+<span class="source-line-no">240</span><span id="line-240">     * Gets the 
plain content if any.</span>
+<span class="source-line-no">241</span><span id="line-241">     *</span>
+<span class="source-line-no">242</span><span id="line-242">     * @return 
Returns the plainContent if any</span>
+<span class="source-line-no">243</span><span id="line-243">     */</span>
+<span class="source-line-no">244</span><span id="line-244">    public String 
getPlainContent() {</span>
+<span class="source-line-no">245</span><span id="line-245">        return 
plainContent;</span>
+<span class="source-line-no">246</span><span id="line-246">    }</span>
+<span class="source-line-no">247</span><span id="line-247"></span>
+<span class="source-line-no">248</span><span id="line-248">    /**</span>
+<span class="source-line-no">249</span><span id="line-249">     * Gets the 
'replyTo' address of the email.</span>
+<span class="source-line-no">250</span><span id="line-250">     *</span>
+<span class="source-line-no">251</span><span id="line-251">     * @return the 
'replyTo' address of the email</span>
+<span class="source-line-no">252</span><span id="line-252">     * @throws 
MessagingException parsing the mime message failed</span>
+<span class="source-line-no">253</span><span id="line-253">     */</span>
+<span class="source-line-no">254</span><span id="line-254">    public String 
getReplyTo() throws MessagingException {</span>
+<span class="source-line-no">255</span><span id="line-255">        final 
Address[] addresses = mimeMessage.getReplyTo();</span>
+<span class="source-line-no">256</span><span id="line-256">        if 
(isEmpty(addresses)) {</span>
+<span class="source-line-no">257</span><span id="line-257">            return 
null;</span>
+<span class="source-line-no">258</span><span id="line-258">        }</span>
+<span class="source-line-no">259</span><span id="line-259">        return 
((InternetAddress) addresses[0]).getAddress();</span>
+<span class="source-line-no">260</span><span id="line-260">    }</span>
+<span class="source-line-no">261</span><span id="line-261"></span>
+<span class="source-line-no">262</span><span id="line-262">    /**</span>
+<span class="source-line-no">263</span><span id="line-263">     * Gets the 
MIME message subject.</span>
+<span class="source-line-no">264</span><span id="line-264">     *</span>
+<span class="source-line-no">265</span><span id="line-265">     * @return the 
MIME message subject.</span>
+<span class="source-line-no">266</span><span id="line-266">     * @throws 
MessagingException parsing the mime message failed.</span>
+<span class="source-line-no">267</span><span id="line-267">     */</span>
+<span class="source-line-no">268</span><span id="line-268">    public String 
getSubject() throws MessagingException {</span>
+<span class="source-line-no">269</span><span id="line-269">        return 
mimeMessage.getSubject();</span>
+<span class="source-line-no">270</span><span id="line-270">    }</span>
+<span class="source-line-no">271</span><span id="line-271"></span>
+<span class="source-line-no">272</span><span id="line-272">    /**</span>
+<span class="source-line-no">273</span><span id="line-273">     * Gets the 
MIME message 'to' list.</span>
+<span class="source-line-no">274</span><span id="line-274">     *</span>
+<span class="source-line-no">275</span><span id="line-275">     * @return the 
'to' recipients of the message.</span>
+<span class="source-line-no">276</span><span id="line-276">     * @throws 
MessagingException determining the recipients failed</span>
+<span class="source-line-no">277</span><span id="line-277">     */</span>
+<span class="source-line-no">278</span><span id="line-278">    public 
List&lt;Address&gt; getTo() throws MessagingException {</span>
+<span class="source-line-no">279</span><span id="line-279">        return 
asList(mimeMessage.getRecipients(Message.RecipientType.TO));</span>
+<span class="source-line-no">280</span><span id="line-280">    }</span>
+<span class="source-line-no">281</span><span id="line-281"></span>
+<span class="source-line-no">282</span><span id="line-282">    /**</span>
+<span class="source-line-no">283</span><span id="line-283">     * Tests if 
attachments are present.</span>
+<span class="source-line-no">284</span><span id="line-284">     *</span>
+<span class="source-line-no">285</span><span id="line-285">     * @return true 
if attachments are present.</span>
+<span class="source-line-no">286</span><span id="line-286">     */</span>
+<span class="source-line-no">287</span><span id="line-287">    public boolean 
hasAttachments() {</span>
+<span class="source-line-no">288</span><span id="line-288">        return 
!attachmentList.isEmpty();</span>
+<span class="source-line-no">289</span><span id="line-289">    }</span>
+<span class="source-line-no">290</span><span id="line-290"></span>
+<span class="source-line-no">291</span><span id="line-291">    /**</span>
+<span class="source-line-no">292</span><span id="line-292">     * Tests is 
HTML content is present.</span>
+<span class="source-line-no">293</span><span id="line-293">     *</span>
+<span class="source-line-no">294</span><span id="line-294">     * @return true 
if HTML content is present.</span>
+<span class="source-line-no">295</span><span id="line-295">     */</span>
+<span class="source-line-no">296</span><span id="line-296">    public boolean 
hasHtmlContent() {</span>
+<span class="source-line-no">297</span><span id="line-297">        return 
htmlContent != null;</span>
+<span class="source-line-no">298</span><span id="line-298">    }</span>
+<span class="source-line-no">299</span><span id="line-299"></span>
+<span class="source-line-no">300</span><span id="line-300">    /**</span>
+<span class="source-line-no">301</span><span id="line-301">     * Tests is 
plain content is present.</span>
+<span class="source-line-no">302</span><span id="line-302">     *</span>
+<span class="source-line-no">303</span><span id="line-303">     * @return true 
if a plain content is present.</span>
+<span class="source-line-no">304</span><span id="line-304">     */</span>
+<span class="source-line-no">305</span><span id="line-305">    public boolean 
hasPlainContent() {</span>
+<span class="source-line-no">306</span><span id="line-306">        return 
plainContent != null;</span>
+<span class="source-line-no">307</span><span id="line-307">    }</span>
+<span class="source-line-no">308</span><span id="line-308"></span>
+<span class="source-line-no">309</span><span id="line-309">    private boolean 
isEmpty(final Object[] array) {</span>
+<span class="source-line-no">310</span><span id="line-310">        return 
array == null || array.length == 0;</span>
+<span class="source-line-no">311</span><span id="line-311">    }</span>
+<span class="source-line-no">312</span><span id="line-312"></span>
+<span class="source-line-no">313</span><span id="line-313">    private boolean 
isEmpty(final String result) {</span>
+<span class="source-line-no">314</span><span id="line-314">        return 
result == null || result.isEmpty();</span>
+<span class="source-line-no">315</span><span id="line-315">    }</span>
+<span class="source-line-no">316</span><span id="line-316"></span>
+<span class="source-line-no">317</span><span id="line-317">    /**</span>
+<span class="source-line-no">318</span><span id="line-318">     * Tests 
whether the MimePart contains an object of the given mime type.</span>
+<span class="source-line-no">319</span><span id="line-319">     *</span>
+<span class="source-line-no">320</span><span id="line-320">     * @param part  
   the current MimePart</span>
+<span class="source-line-no">321</span><span id="line-321">     * @param 
mimeType the mime type to check</span>
+<span class="source-line-no">322</span><span id="line-322">     * @return 
{@code true} if the MimePart matches the given mime type, {@code false} 
otherwise</span>
+<span class="source-line-no">323</span><span id="line-323">     * @throws 
MessagingException parsing the MimeMessage failed</span>
+<span class="source-line-no">324</span><span id="line-324">     */</span>
+<span class="source-line-no">325</span><span id="line-325">    private boolean 
isMimeType(final MimePart part, final String mimeType) throws 
MessagingException {</span>
+<span class="source-line-no">326</span><span id="line-326">        // Do not 
use part.isMimeType(String) as it is broken for MimeBodyPart</span>
+<span class="source-line-no">327</span><span id="line-327">        // and does 
not really check the actual content type.</span>
+<span class="source-line-no">328</span><span id="line-328">        try {</span>
+<span class="source-line-no">329</span><span id="line-329">            return 
new ContentType(part.getDataHandler().getContentType()).match(mimeType);</span>
+<span class="source-line-no">330</span><span id="line-330">        } catch 
(final ParseException ex) {</span>
+<span class="source-line-no">331</span><span id="line-331">            return 
part.getContentType().equalsIgnoreCase(mimeType);</span>
+<span class="source-line-no">332</span><span id="line-332">        }</span>
+<span class="source-line-no">333</span><span id="line-333">    }</span>
+<span class="source-line-no">334</span><span id="line-334"></span>
+<span class="source-line-no">335</span><span id="line-335">    /**</span>
+<span class="source-line-no">336</span><span id="line-336">     * Tests 
whether this is multipart.</span>
+<span class="source-line-no">337</span><span id="line-337">     *</span>
+<span class="source-line-no">338</span><span id="line-338">     * @return 
Returns the isMultiPart.</span>
+<span class="source-line-no">339</span><span id="line-339">     */</span>
+<span class="source-line-no">340</span><span id="line-340">    public boolean 
isMultipart() {</span>
+<span class="source-line-no">341</span><span id="line-341">        return 
isMultiPart;</span>
+<span class="source-line-no">342</span><span id="line-342">    }</span>
+<span class="source-line-no">343</span><span id="line-343"></span>
+<span class="source-line-no">344</span><span id="line-344">    /**</span>
+<span class="source-line-no">345</span><span id="line-345">     * Does the 
actual extraction.</span>
+<span class="source-line-no">346</span><span id="line-346">     *</span>
+<span class="source-line-no">347</span><span id="line-347">     * @return this 
instance</span>
+<span class="source-line-no">348</span><span id="line-348">     * @throws 
MessagingException parsing the mime message failed</span>
+<span class="source-line-no">349</span><span id="line-349">     * @throws 
IOException        parsing the mime message failed</span>
+<span class="source-line-no">350</span><span id="line-350">     */</span>
+<span class="source-line-no">351</span><span id="line-351">    public 
MimeMessageParser parse() throws MessagingException, IOException {</span>
+<span class="source-line-no">352</span><span id="line-352">        parse(null, 
mimeMessage);</span>
+<span class="source-line-no">353</span><span id="line-353">        return 
this;</span>
+<span class="source-line-no">354</span><span id="line-354">    }</span>
+<span class="source-line-no">355</span><span id="line-355"></span>
+<span class="source-line-no">356</span><span id="line-356">    /**</span>
+<span class="source-line-no">357</span><span id="line-357">     * Extracts the 
content of a MimeMessage recursively.</span>
+<span class="source-line-no">358</span><span id="line-358">     *</span>
+<span class="source-line-no">359</span><span id="line-359">     * @param 
parent the parent multi-part</span>
+<span class="source-line-no">360</span><span id="line-360">     * @param part  
 the current MimePart</span>
+<span class="source-line-no">361</span><span id="line-361">     * @throws 
MessagingException parsing the MimeMessage failed</span>
+<span class="source-line-no">362</span><span id="line-362">     * @throws 
IOException        parsing the MimeMessage failed</span>
+<span class="source-line-no">363</span><span id="line-363">     */</span>
+<span class="source-line-no">364</span><span id="line-364">    protected void 
parse(final Multipart parent, final MimePart part) throws MessagingException, 
IOException {</span>
+<span class="source-line-no">365</span><span id="line-365">        if 
(isMimeType(part, "text/plain") &amp;&amp; plainContent == null &amp;&amp; 
!Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {</span>
+<span class="source-line-no">366</span><span id="line-366">            
plainContent = (String) part.getContent();</span>
+<span class="source-line-no">367</span><span id="line-367">        } else if 
(isMimeType(part, "text/html") &amp;&amp; htmlContent == null &amp;&amp; 
!Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {</span>
+<span class="source-line-no">368</span><span id="line-368">            
htmlContent = (String) part.getContent();</span>
+<span class="source-line-no">369</span><span id="line-369">        } else if 
(isMimeType(part, "multipart/*")) {</span>
+<span class="source-line-no">370</span><span id="line-370">            
isMultiPart = true;</span>
+<span class="source-line-no">371</span><span id="line-371">            final 
Multipart multipart = (Multipart) part.getContent();</span>
+<span class="source-line-no">372</span><span id="line-372">            final 
int count = multipart.getCount();</span>
+<span class="source-line-no">373</span><span id="line-373">            // 
iterate over all MimeBodyPart</span>
+<span class="source-line-no">374</span><span id="line-374">            for 
(int i = 0; i &lt; count; i++) {</span>
+<span class="source-line-no">375</span><span id="line-375">                
parse(multipart, (MimeBodyPart) multipart.getBodyPart(i));</span>
+<span class="source-line-no">376</span><span id="line-376">            }</span>
+<span class="source-line-no">377</span><span id="line-377">        } else 
{</span>
+<span class="source-line-no">378</span><span id="line-378">            final 
String cid = stripContentId(part.getContentID());</span>
+<span class="source-line-no">379</span><span id="line-379">            final 
DataSource dataSource = createDataSource(parent, part);</span>
+<span class="source-line-no">380</span><span id="line-380">            if (cid 
!= null) {</span>
+<span class="source-line-no">381</span><span id="line-381">                
cidMap.put(cid, dataSource);</span>
+<span class="source-line-no">382</span><span id="line-382">            }</span>
+<span class="source-line-no">383</span><span id="line-383">            
attachmentList.add(dataSource);</span>
+<span class="source-line-no">384</span><span id="line-384">        }</span>
+<span class="source-line-no">385</span><span id="line-385">    }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">    /**</span>
+<span class="source-line-no">388</span><span id="line-388">     * Strips the 
content id of any whitespace and angle brackets.</span>
+<span class="source-line-no">389</span><span id="line-389">     *</span>
+<span class="source-line-no">390</span><span id="line-390">     * @param 
contentId the string to strip</span>
+<span class="source-line-no">391</span><span id="line-391">     * @return a 
stripped version of the content id</span>
+<span class="source-line-no">392</span><span id="line-392">     */</span>
+<span class="source-line-no">393</span><span id="line-393">    private String 
stripContentId(final String contentId) {</span>
+<span class="source-line-no">394</span><span id="line-394">        return 
contentId == null ? null : contentId.trim().replaceAll("[\\&lt;\\&gt;]", 
"");</span>
+<span class="source-line-no">395</span><span id="line-395">    }</span>
+<span class="source-line-no">396</span><span id="line-396">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/MimeMessageUtils.html
==============================================================================
--- 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/MimeMessageUtils.html
 (added)
+++ 
dev/commons/email/2.0.0-M1-RC1/site/apidocs/src-html/org/apache/commons/mail2/javax/util/MimeMessageUtils.html
 Sat Jun 15 15:07:30 2024
@@ -0,0 +1,215 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<!-- Generated by javadoc (17) -->
+<title>Source code</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="source: package: 
org.apache.commons.mail2.javax.util, class: MimeMessageUtils">
+<meta name="generator" content="javadoc/SourceToHTMLConverter">
+<link rel="stylesheet" type="text/css" 
href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body class="source-page">
+<main role="main">
+<div class="source-container">
+<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
+<span class="source-line-no">002</span><span id="line-2"> * Licensed to the 
Apache Software Foundation (ASF) under one or more</span>
+<span class="source-line-no">003</span><span id="line-3"> * contributor 
license agreements.  See the NOTICE file distributed with</span>
+<span class="source-line-no">004</span><span id="line-4"> * this work for 
additional information regarding copyright ownership.</span>
+<span class="source-line-no">005</span><span id="line-5"> * The ASF licenses 
this file to You under the Apache License, Version 2.0</span>
+<span class="source-line-no">006</span><span id="line-6"> * (the "License"); 
you may not use this file except in compliance with</span>
+<span class="source-line-no">007</span><span id="line-7"> * the License.  You 
may obtain a copy of the License at</span>
+<span class="source-line-no">008</span><span id="line-8"> *</span>
+<span class="source-line-no">009</span><span id="line-9"> *     
http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="source-line-no">010</span><span id="line-10"> *</span>
+<span class="source-line-no">011</span><span id="line-11"> * Unless required 
by applicable law or agreed to in writing, software</span>
+<span class="source-line-no">012</span><span id="line-12"> * distributed under 
the License is distributed on an "AS IS" BASIS,</span>
+<span class="source-line-no">013</span><span id="line-13"> * WITHOUT 
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="source-line-no">014</span><span id="line-14"> * See the License 
for the specific language governing permissions and</span>
+<span class="source-line-no">015</span><span id="line-15"> * limitations under 
the License.</span>
+<span class="source-line-no">016</span><span id="line-16"> */</span>
+<span class="source-line-no">017</span><span id="line-17">package 
org.apache.commons.mail2.javax.util;</span>
+<span class="source-line-no">018</span><span id="line-18"></span>
+<span class="source-line-no">019</span><span id="line-19">import 
java.io.File;</span>
+<span class="source-line-no">020</span><span id="line-20">import 
java.io.FileInputStream;</span>
+<span class="source-line-no">021</span><span id="line-21">import 
java.io.FileOutputStream;</span>
+<span class="source-line-no">022</span><span id="line-22">import 
java.io.IOException;</span>
+<span class="source-line-no">023</span><span id="line-23">import 
java.io.InputStream;</span>
+<span class="source-line-no">024</span><span id="line-24">import 
java.io.OutputStream;</span>
+<span class="source-line-no">025</span><span id="line-25">import 
java.nio.charset.StandardCharsets;</span>
+<span class="source-line-no">026</span><span id="line-26">import 
java.nio.file.Files;</span>
+<span class="source-line-no">027</span><span id="line-27">import 
java.nio.file.OpenOption;</span>
+<span class="source-line-no">028</span><span id="line-28">import 
java.nio.file.Path;</span>
+<span class="source-line-no">029</span><span id="line-29"></span>
+<span class="source-line-no">030</span><span id="line-30">import 
javax.mail.MessagingException;</span>
+<span class="source-line-no">031</span><span id="line-31">import 
javax.mail.Session;</span>
+<span class="source-line-no">032</span><span id="line-32">import 
javax.mail.internet.MimeMessage;</span>
+<span class="source-line-no">033</span><span id="line-33">import 
javax.mail.util.SharedByteArrayInputStream;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">/**</span>
+<span class="source-line-no">036</span><span id="line-36"> * Creates {@link 
MimeMessage} instances and other helper methods.</span>
+<span class="source-line-no">037</span><span id="line-37"> *</span>
+<span class="source-line-no">038</span><span id="line-38"> * @since 1.3</span>
+<span class="source-line-no">039</span><span id="line-39"> */</span>
+<span class="source-line-no">040</span><span id="line-40">public final class 
MimeMessageUtils {</span>
+<span class="source-line-no">041</span><span id="line-41"></span>
+<span class="source-line-no">042</span><span id="line-42">    /**</span>
+<span class="source-line-no">043</span><span id="line-43">     * Creates a 
MimeMessage.</span>
+<span class="source-line-no">044</span><span id="line-44">     *</span>
+<span class="source-line-no">045</span><span id="line-45">     * @param 
session the mail session.</span>
+<span class="source-line-no">046</span><span id="line-46">     * @param source 
 the input data.</span>
+<span class="source-line-no">047</span><span id="line-47">     * @return the 
MimeMessage.</span>
+<span class="source-line-no">048</span><span id="line-48">     * @throws 
MessagingException creating the MimeMessage failed.</span>
+<span class="source-line-no">049</span><span id="line-49">     * @throws 
IOException        creating the MimeMessage failed.</span>
+<span class="source-line-no">050</span><span id="line-50">     */</span>
+<span class="source-line-no">051</span><span id="line-51">    public static 
MimeMessage createMimeMessage(final Session session, final byte[] source) 
throws MessagingException, IOException {</span>
+<span class="source-line-no">052</span><span id="line-52">        try 
(InputStream inputStream = new SharedByteArrayInputStream(source)) {</span>
+<span class="source-line-no">053</span><span id="line-53">            return 
new MimeMessage(session, inputStream);</span>
+<span class="source-line-no">054</span><span id="line-54">        }</span>
+<span class="source-line-no">055</span><span id="line-55">    }</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">    /**</span>
+<span class="source-line-no">058</span><span id="line-58">     * Creates a 
MimeMessage.</span>
+<span class="source-line-no">059</span><span id="line-59">     *</span>
+<span class="source-line-no">060</span><span id="line-60">     * @param 
session the mail session.</span>
+<span class="source-line-no">061</span><span id="line-61">     * @param source 
 the input data.</span>
+<span class="source-line-no">062</span><span id="line-62">     * @return the 
MimeMessage.</span>
+<span class="source-line-no">063</span><span id="line-63">     * @throws 
MessagingException creating the MimeMessage failed.</span>
+<span class="source-line-no">064</span><span id="line-64">     * @throws 
IOException        creating the MimeMessage failed.</span>
+<span class="source-line-no">065</span><span id="line-65">     */</span>
+<span class="source-line-no">066</span><span id="line-66">    public static 
MimeMessage createMimeMessage(final Session session, final File source) throws 
MessagingException, IOException {</span>
+<span class="source-line-no">067</span><span id="line-67">        try 
(InputStream inputStream = new FileInputStream(source)) {</span>
+<span class="source-line-no">068</span><span id="line-68">            return 
createMimeMessage(session, inputStream);</span>
+<span class="source-line-no">069</span><span id="line-69">        }</span>
+<span class="source-line-no">070</span><span id="line-70">    }</span>
+<span class="source-line-no">071</span><span id="line-71"></span>
+<span class="source-line-no">072</span><span id="line-72">    /**</span>
+<span class="source-line-no">073</span><span id="line-73">     * Creates a 
MimeMessage.</span>
+<span class="source-line-no">074</span><span id="line-74">     *</span>
+<span class="source-line-no">075</span><span id="line-75">     * @param 
session the mail session.</span>
+<span class="source-line-no">076</span><span id="line-76">     * @param source 
 the input data.</span>
+<span class="source-line-no">077</span><span id="line-77">     * @return the 
MimeMessage.</span>
+<span class="source-line-no">078</span><span id="line-78">     * @throws 
MessagingException creating the MimeMessage failed.</span>
+<span class="source-line-no">079</span><span id="line-79">     */</span>
+<span class="source-line-no">080</span><span id="line-80">    public static 
MimeMessage createMimeMessage(final Session session, final InputStream source) 
throws MessagingException {</span>
+<span class="source-line-no">081</span><span id="line-81">        return new 
MimeMessage(session, source);</span>
+<span class="source-line-no">082</span><span id="line-82">    }</span>
+<span class="source-line-no">083</span><span id="line-83"></span>
+<span class="source-line-no">084</span><span id="line-84">    /**</span>
+<span class="source-line-no">085</span><span id="line-85">     * Creates a 
MimeMessage.</span>
+<span class="source-line-no">086</span><span id="line-86">     *</span>
+<span class="source-line-no">087</span><span id="line-87">     * @param 
session the mail session.</span>
+<span class="source-line-no">088</span><span id="line-88">     * @param source 
 the input data.</span>
+<span class="source-line-no">089</span><span id="line-89">     * @param 
options options specifying how the file is opened.</span>
+<span class="source-line-no">090</span><span id="line-90">     * @return the 
MimeMessage.</span>
+<span class="source-line-no">091</span><span id="line-91">     * @throws 
MessagingException creating the MimeMessage failed.</span>
+<span class="source-line-no">092</span><span id="line-92">     * @throws 
IOException        creating the MimeMessage failed.</span>
+<span class="source-line-no">093</span><span id="line-93">     */</span>
+<span class="source-line-no">094</span><span id="line-94">    public static 
MimeMessage createMimeMessage(final Session session, final Path source, final 
OpenOption... options) throws MessagingException, IOException {</span>
+<span class="source-line-no">095</span><span id="line-95">        try 
(InputStream inputStream = Files.newInputStream(source, options)) {</span>
+<span class="source-line-no">096</span><span id="line-96">            return 
createMimeMessage(session, inputStream);</span>
+<span class="source-line-no">097</span><span id="line-97">        }</span>
+<span class="source-line-no">098</span><span id="line-98">    }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100">    /**</span>
+<span class="source-line-no">101</span><span id="line-101">     * Creates a 
MimeMessage using the platform's default character encoding.</span>
+<span class="source-line-no">102</span><span id="line-102">     *</span>
+<span class="source-line-no">103</span><span id="line-103">     * @param 
session the mail session.</span>
+<span class="source-line-no">104</span><span id="line-104">     * @param 
source  the input data.</span>
+<span class="source-line-no">105</span><span id="line-105">     * @return the 
MimeMessage.</span>
+<span class="source-line-no">106</span><span id="line-106">     * @throws 
MessagingException creating the MimeMessage failed.</span>
+<span class="source-line-no">107</span><span id="line-107">     * @throws 
IOException        creating the MimeMessage failed.</span>
+<span class="source-line-no">108</span><span id="line-108">     */</span>
+<span class="source-line-no">109</span><span id="line-109">    public static 
MimeMessage createMimeMessage(final Session session, final String source) 
throws MessagingException, IOException {</span>
+<span class="source-line-no">110</span><span id="line-110">        // RFC1341: 
https://www.w3.org/Protocols/rfc1341/7_1_Text.html</span>
+<span class="source-line-no">111</span><span id="line-111">        return 
createMimeMessage(session, source.getBytes(StandardCharsets.US_ASCII));</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    /**</span>
+<span class="source-line-no">115</span><span id="line-115">     * Writes a 
MimeMessage into a file.</span>
+<span class="source-line-no">116</span><span id="line-116">     *</span>
+<span class="source-line-no">117</span><span id="line-117">     * @param 
mimeMessage the MimeMessage to write.</span>
+<span class="source-line-no">118</span><span id="line-118">     * @param 
resultFile  the file containing the MimeMessage.</span>
+<span class="source-line-no">119</span><span id="line-119">     * @throws 
MessagingException accessing MimeMessage failed.</span>
+<span class="source-line-no">120</span><span id="line-120">     * @throws 
IOException        writing the MimeMessage failed.</span>
+<span class="source-line-no">121</span><span id="line-121">     */</span>
+<span class="source-line-no">122</span><span id="line-122">    public static 
void writeMimeMessage(final MimeMessage mimeMessage, final File resultFile) 
throws MessagingException, IOException {</span>
+<span class="source-line-no">123</span><span id="line-123">        if 
(!resultFile.getParentFile().exists() &amp;&amp; 
!resultFile.getParentFile().mkdirs()) {</span>
+<span class="source-line-no">124</span><span id="line-124">            throw 
new IOException("Failed to create the following parent directories: " + 
resultFile.getParentFile());</span>
+<span class="source-line-no">125</span><span id="line-125">        }</span>
+<span class="source-line-no">126</span><span id="line-126">        try 
(OutputStream outputStream = new FileOutputStream(resultFile)) {</span>
+<span class="source-line-no">127</span><span id="line-127">            
mimeMessage.writeTo(outputStream);</span>
+<span class="source-line-no">128</span><span id="line-128">            
outputStream.flush();</span>
+<span class="source-line-no">129</span><span id="line-129">        }</span>
+<span class="source-line-no">130</span><span id="line-130">    }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132">    /**</span>
+<span class="source-line-no">133</span><span id="line-133">     * Instances 
should NOT be constructed in standard programming.</span>
+<span class="source-line-no">134</span><span id="line-134">     */</span>
+<span class="source-line-no">135</span><span id="line-135">    private 
MimeMessageUtils() {</span>
+<span class="source-line-no">136</span><span id="line-136">    }</span>
+<span class="source-line-no">137</span><span id="line-137">}</span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
+</html>

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/stylesheet.css
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/stylesheet.css (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/stylesheet.css Sat Jun 15 
15:07:30 2024
@@ -0,0 +1,869 @@
+/*
+ * Javadoc style sheet
+ */
+
+@import url('resources/fonts/dejavu.css');
+
+/*
+ * Styles for individual HTML elements.
+ *
+ * These are styles that are specific to individual HTML elements. Changing 
them affects the style of a particular
+ * HTML element throughout the page.
+ */
+
+body {
+    background-color:#ffffff;
+    color:#353833;
+    font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
+    font-size:14px;
+    margin:0;
+    padding:0;
+    height:100%;
+    width:100%;
+}
+iframe {
+    margin:0;
+    padding:0;
+    height:100%;
+    width:100%;
+    overflow-y:scroll;
+    border:none;
+}
+a:link, a:visited {
+    text-decoration:none;
+    color:#4A6782;
+}
+a[href]:hover, a[href]:focus {
+    text-decoration:none;
+    color:#bb7a2a;
+}
+a[name] {
+    color:#353833;
+}
+pre {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+}
+h1 {
+    font-size:20px;
+}
+h2 {
+    font-size:18px;
+}
+h3 {
+    font-size:16px;
+}
+h4 {
+    font-size:15px;
+}
+h5 {
+    font-size:14px;
+}
+h6 {
+    font-size:13px;
+}
+ul {
+    list-style-type:disc;
+}
+code, tt {
+    font-family:'DejaVu Sans Mono', monospace;
+}
+:not(h1, h2, h3, h4, h5, h6) > code,
+:not(h1, h2, h3, h4, h5, h6) > tt {
+    font-size:14px;
+    padding-top:4px;
+    margin-top:8px;
+    line-height:1.4em;
+}
+dt code {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+    padding-top:4px;
+}
+.summary-table dt code {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+    vertical-align:top;
+    padding-top:4px;
+}
+sup {
+    font-size:8px;
+}
+button {
+    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
+    font-size: 14px;
+}
+/*
+ * Styles for HTML generated by javadoc.
+ *
+ * These are style classes that are used by the standard doclet to generate 
HTML documentation.
+ */
+
+/*
+ * Styles for document title and copyright.
+ */
+.clear {
+    clear:both;
+    height:0;
+    overflow:hidden;
+}
+.about-language {
+    float:right;
+    padding:0 21px 8px 8px;
+    font-size:11px;
+    margin-top:-9px;
+    height:2.9em;
+}
+.legal-copy {
+    margin-left:.5em;
+}
+.tab {
+    background-color:#0066FF;
+    color:#ffffff;
+    padding:8px;
+    width:5em;
+    font-weight:bold;
+}
+/*
+ * Styles for navigation bar.
+ */
+@media screen {
+    .flex-box {
+        position:fixed;
+        display:flex;
+        flex-direction:column;
+        height: 100%;
+        width: 100%;
+    }
+    .flex-header {
+        flex: 0 0 auto;
+    }
+    .flex-content {
+        flex: 1 1 auto;
+        overflow-y: auto;
+    }
+}
+.top-nav {
+    background-color:#4D7A97;
+    color:#FFFFFF;
+    float:left;
+    padding:0;
+    width:100%;
+    clear:right;
+    min-height:2.8em;
+    padding-top:10px;
+    overflow:hidden;
+    font-size:12px;
+}
+.sub-nav {
+    background-color:#dee3e9;
+    float:left;
+    width:100%;
+    overflow:hidden;
+    font-size:12px;
+}
+.sub-nav div {
+    clear:left;
+    float:left;
+    padding:0 0 5px 6px;
+    text-transform:uppercase;
+}
+.sub-nav .nav-list {
+    padding-top:5px;
+}
+ul.nav-list {
+    display:block;
+    margin:0 25px 0 0;
+    padding:0;
+}
+ul.sub-nav-list {
+    float:left;
+    margin:0 25px 0 0;
+    padding:0;
+}
+ul.nav-list li {
+    list-style:none;
+    float:left;
+    padding: 5px 6px;
+    text-transform:uppercase;
+}
+.sub-nav .nav-list-search {
+    float:right;
+    margin:0 0 0 0;
+    padding:5px 6px;
+    clear:none;
+}
+.nav-list-search label {
+    position:relative;
+    right:-16px;
+}
+ul.sub-nav-list li {
+    list-style:none;
+    float:left;
+    padding-top:10px;
+}
+.top-nav a:link, .top-nav a:active, .top-nav a:visited {
+    color:#FFFFFF;
+    text-decoration:none;
+    text-transform:uppercase;
+}
+.top-nav a:hover {
+    text-decoration:none;
+    color:#bb7a2a;
+    text-transform:uppercase;
+}
+.nav-bar-cell1-rev {
+    background-color:#F8981D;
+    color:#253441;
+    margin: auto 5px;
+}
+.skip-nav {
+    position:absolute;
+    top:auto;
+    left:-9999px;
+    overflow:hidden;
+}
+/*
+ * Hide navigation links and search box in print layout
+ */
+@media print {
+    ul.nav-list, div.sub-nav  {
+        display:none;
+    }
+}
+/*
+ * Styles for page header and footer.
+ */
+.title {
+    color:#2c4557;
+    margin:10px 0;
+}
+.sub-title {
+    margin:5px 0 0 0;
+}
+.header ul {
+    margin:0 0 15px 0;
+    padding:0;
+}
+.header ul li, .footer ul li {
+    list-style:none;
+    font-size:13px;
+}
+/*
+ * Styles for headings.
+ */
+body.class-declaration-page .summary h2,
+body.class-declaration-page .details h2,
+body.class-use-page  h2,
+body.module-declaration-page  .block-list h2 {
+    font-style: italic;
+    padding:0;
+    margin:15px 0;
+}
+body.class-declaration-page .summary h3,
+body.class-declaration-page .details h3,
+body.class-declaration-page .summary .inherited-list h2 {
+    background-color:#dee3e9;
+    border:1px solid #d0d9e0;
+    margin:0 0 6px -8px;
+    padding:7px 5px;
+}
+/*
+ * Styles for page layout containers.
+ */
+main {
+    clear:both;
+    padding:10px 20px;
+    position:relative;
+}
+dl.notes > dt {
+    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
+    font-size:12px;
+    font-weight:bold;
+    margin:10px 0 0 0;
+    color:#4E4E4E;
+}
+dl.notes > dd {
+    margin:5px 10px 10px 0;
+    font-size:14px;
+    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+}
+dl.name-value > dt {
+    margin-left:1px;
+    font-size:1.1em;
+    display:inline;
+    font-weight:bold;
+}
+dl.name-value > dd {
+    margin:0 0 0 1px;
+    font-size:1.1em;
+    display:inline;
+}
+/*
+ * Styles for lists.
+ */
+li.circle {
+    list-style:circle;
+}
+ul.horizontal li {
+    display:inline;
+    font-size:0.9em;
+}
+div.inheritance {
+    margin:0;
+    padding:0;
+}
+div.inheritance div.inheritance {
+    margin-left:2em;
+}
+ul.block-list,
+ul.details-list,
+ul.member-list,
+ul.summary-list {
+    margin:10px 0 10px 0;
+    padding:0;
+}
+ul.block-list > li,
+ul.details-list > li,
+ul.member-list > li,
+ul.summary-list > li {
+    list-style:none;
+    margin-bottom:15px;
+    line-height:1.4;
+}
+.summary-table dl, .summary-table dl dt, .summary-table dl dd {
+    margin-top:0;
+    margin-bottom:1px;
+}
+ul.see-list, ul.see-list-long {
+    padding-left: 0;
+    list-style: none;
+}
+ul.see-list li {
+    display: inline;
+}
+ul.see-list li:not(:last-child):after,
+ul.see-list-long li:not(:last-child):after {
+    content: ", ";
+    white-space: pre-wrap;
+}
+/*
+ * Styles for tables.
+ */
+.summary-table, .details-table {
+    width:100%;
+    border-spacing:0;
+    border-left:1px solid #EEE;
+    border-right:1px solid #EEE;
+    border-bottom:1px solid #EEE;
+    padding:0;
+}
+.caption {
+    position:relative;
+    text-align:left;
+    background-repeat:no-repeat;
+    color:#253441;
+    font-weight:bold;
+    clear:none;
+    overflow:hidden;
+    padding:0;
+    padding-top:10px;
+    padding-left:1px;
+    margin:0;
+    white-space:pre;
+}
+.caption a:link, .caption a:visited {
+    color:#1f389c;
+}
+.caption a:hover,
+.caption a:active {
+    color:#FFFFFF;
+}
+.caption span {
+    white-space:nowrap;
+    padding-top:5px;
+    padding-left:12px;
+    padding-right:12px;
+    padding-bottom:7px;
+    display:inline-block;
+    float:left;
+    background-color:#F8981D;
+    border: none;
+    height:16px;
+}
+div.table-tabs {
+    padding:10px 0 0 1px;
+    margin:0;
+}
+div.table-tabs > button {
+   border: none;
+   cursor: pointer;
+   padding: 5px 12px 7px 12px;
+   font-weight: bold;
+   margin-right: 3px;
+}
+div.table-tabs > button.active-table-tab {
+   background: #F8981D;
+   color: #253441;
+}
+div.table-tabs > button.table-tab {
+   background: #4D7A97;
+   color: #FFFFFF;
+}
+.two-column-summary {
+    display: grid;
+    grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
+}
+.three-column-summary {
+    display: grid;
+    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) 
minmax(15%, auto);
+}
+.four-column-summary {
+    display: grid;
+    grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) 
minmax(10%, max-content) minmax(10%, auto);
+}
+@media screen and (max-width: 600px) {
+    .two-column-summary {
+        display: grid;
+        grid-template-columns: 1fr;
+    }
+}
+@media screen and (max-width: 800px) {
+    .three-column-summary {
+        display: grid;
+        grid-template-columns: minmax(10%, max-content) minmax(25%, auto);
+    }
+    .three-column-summary .col-last {
+        grid-column-end: span 2;
+    }
+}
+@media screen and (max-width: 1000px) {
+    .four-column-summary {
+        display: grid;
+        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
+    }
+}
+.summary-table > div, .details-table > div {
+    text-align:left;
+    padding: 8px 3px 3px 7px;
+}
+.col-first, .col-second, .col-last, .col-constructor-name, 
.col-summary-item-name {
+    vertical-align:top;
+    padding-right:0;
+    padding-top:8px;
+    padding-bottom:3px;
+}
+.table-header {
+    background:#dee3e9;
+    font-weight: bold;
+}
+.col-first, .col-first {
+    font-size:13px;
+}
+.col-second, .col-second, .col-last, .col-constructor-name, 
.col-summary-item-name, .col-last {
+    font-size:13px;
+}
+.col-first, .col-second, .col-constructor-name {
+    vertical-align:top;
+    overflow: auto;
+}
+.col-last {
+    white-space:normal;
+}
+.col-first a:link, .col-first a:visited,
+.col-second a:link, .col-second a:visited,
+.col-first a:link, .col-first a:visited,
+.col-second a:link, .col-second a:visited,
+.col-constructor-name a:link, .col-constructor-name a:visited,
+.col-summary-item-name a:link, .col-summary-item-name a:visited,
+.constant-values-container a:link, .constant-values-container a:visited,
+.all-classes-container a:link, .all-classes-container a:visited,
+.all-packages-container a:link, .all-packages-container a:visited {
+    font-weight:bold;
+}
+.table-sub-heading-color {
+    background-color:#EEEEFF;
+}
+.even-row-color, .even-row-color .table-header {
+    background-color:#FFFFFF;
+}
+.odd-row-color, .odd-row-color .table-header {
+    background-color:#EEEEEF;
+}
+/*
+ * Styles for contents.
+ */
+.deprecated-content {
+    margin:0;
+    padding:10px 0;
+}
+div.block {
+    font-size:14px;
+    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+}
+.col-last div {
+    padding-top:0;
+}
+.col-last a {
+    padding-bottom:3px;
+}
+.module-signature,
+.package-signature,
+.type-signature,
+.member-signature {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+    margin:14px 0;
+    white-space: pre-wrap;
+}
+.module-signature,
+.package-signature,
+.type-signature {
+    margin-top: 0;
+}
+.member-signature .type-parameters-long,
+.member-signature .parameters,
+.member-signature .exceptions {
+    display: inline-block;
+    vertical-align: top;
+    white-space: pre;
+}
+.member-signature .type-parameters {
+    white-space: normal;
+}
+/*
+ * Styles for formatting effect.
+ */
+.source-line-no {
+    color:green;
+    padding:0 30px 0 0;
+}
+h1.hidden {
+    visibility:hidden;
+    overflow:hidden;
+    font-size:10px;
+}
+.block {
+    display:block;
+    margin:0 10px 5px 0;
+    color:#474747;
+}
+.deprecated-label, .descfrm-type-label, .implementation-label, 
.member-name-label, .member-name-link,
+.module-label-in-package, .module-label-in-type, .override-specify-label, 
.package-label-in-type,
+.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, 
.preview-label {
+    font-weight:bold;
+}
+.deprecation-comment, .help-footnote, .preview-comment {
+    font-style:italic;
+}
+.deprecation-block {
+    font-size:14px;
+    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+    border-style:solid;
+    border-width:thin;
+    border-radius:10px;
+    padding:10px;
+    margin-bottom:10px;
+    margin-right:10px;
+    display:inline-block;
+}
+.preview-block {
+    font-size:14px;
+    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+    border-style:solid;
+    border-width:thin;
+    border-radius:10px;
+    padding:10px;
+    margin-bottom:10px;
+    margin-right:10px;
+    display:inline-block;
+}
+div.block div.deprecation-comment {
+    font-style:normal;
+}
+/*
+ * Styles specific to HTML5 elements.
+ */
+main, nav, header, footer, section {
+    display:block;
+}
+/*
+ * Styles for javadoc search.
+ */
+.ui-autocomplete-category {
+    font-weight:bold;
+    font-size:15px;
+    padding:7px 0 7px 3px;
+    background-color:#4D7A97;
+    color:#FFFFFF;
+}
+.result-item {
+    font-size:13px;
+}
+.ui-autocomplete {
+    max-height:85%;
+    max-width:65%;
+    overflow-y:scroll;
+    overflow-x:scroll;
+    white-space:nowrap;
+    box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
+}
+ul.ui-autocomplete {
+    position:fixed;
+    z-index:999999;
+    background-color: #FFFFFF;
+}
+ul.ui-autocomplete  li {
+    float:left;
+    clear:both;
+    width:100%;
+}
+.result-highlight {
+    font-weight:bold;
+}
+.ui-autocomplete .result-item {
+    font-size: inherit;
+}
+#search-input {
+    background-image:url('resources/glass.png');
+    background-size:13px;
+    background-repeat:no-repeat;
+    background-position:2px 3px;
+    padding-left:20px;
+    position:relative;
+    right:-18px;
+    width:400px;
+}
+#reset-button {
+    background-color: rgb(255,255,255);
+    background-image:url('resources/x.png');
+    background-position:center;
+    background-repeat:no-repeat;
+    background-size:12px;
+    border:0 none;
+    width:16px;
+    height:16px;
+    position:relative;
+    left:-4px;
+    top:-4px;
+    font-size:0px;
+}
+.watermark {
+    color:#545454;
+}
+.search-tag-desc-result {
+    font-style:italic;
+    font-size:11px;
+}
+.search-tag-holder-result {
+    font-style:italic;
+    font-size:12px;
+}
+.search-tag-result:target {
+    background-color:yellow;
+}
+.module-graph span {
+    display:none;
+    position:absolute;
+}
+.module-graph:hover span {
+    display:block;
+    margin: -100px 0 0 100px;
+    z-index: 1;
+}
+.inherited-list {
+    margin: 10px 0 10px 0;
+}
+section.class-description {
+    line-height: 1.4;
+}
+.summary section[class$="-summary"], .details section[class$="-details"],
+.class-uses .detail, .serialized-class-details {
+    padding: 0px 20px 5px 10px;
+    border: 1px solid #ededed;
+    background-color: #f8f8f8;
+}
+.inherited-list, section[class$="-details"] .detail {
+    padding:0 0 5px 8px;
+    background-color:#ffffff;
+    border:none;
+}
+.vertical-separator {
+    padding: 0 5px;
+}
+ul.help-section-list {
+    margin: 0;
+}
+ul.help-subtoc > li {
+  display: inline-block;
+  padding-right: 5px;
+  font-size: smaller;
+}
+ul.help-subtoc > li::before {
+  content: "\2022" ;
+  padding-right:2px;
+}
+span.help-note {
+    font-style: italic;
+}
+/*
+ * Indicator icon for external links.
+ */
+main a[href*="://"]::after {
+    content:"";
+    display:inline-block;
+    background-image:url('data:image/svg+xml; utf8, \
+      <svg xmlns="http://www.w3.org/2000/svg"; width="768" height="768">\
+        <path d="M584 664H104V184h216V80H0v688h688V448H584zM384 0l132 \
+        132-240 240 120 120 240-240 132 132V0z" fill="%234a6782"/>\
+      </svg>');
+    background-size:100% 100%;
+    width:7px;
+    height:7px;
+    margin-left:2px;
+    margin-bottom:4px;
+}
+main a[href*="://"]:hover::after,
+main a[href*="://"]:focus::after {
+    background-image:url('data:image/svg+xml; utf8, \
+      <svg xmlns="http://www.w3.org/2000/svg"; width="768" height="768">\
+        <path d="M584 664H104V184h216V80H0v688h688V448H584zM384 0l132 \
+        132-240 240 120 120 240-240 132 132V0z" fill="%23bb7a2a"/>\
+      </svg>');
+}
+
+/*
+ * Styles for user-provided tables.
+ *
+ * borderless:
+ *      No borders, vertical margins, styled caption.
+ *      This style is provided for use with existing doc comments.
+ *      In general, borderless tables should not be used for layout purposes.
+ *
+ * plain:
+ *      Plain borders around table and cells, vertical margins, styled caption.
+ *      Best for small tables or for complex tables for tables with cells that 
span
+ *      rows and columns, when the "striped" style does not work well.
+ *
+ * striped:
+ *      Borders around the table and vertical borders between cells, striped 
rows,
+ *      vertical margins, styled caption.
+ *      Best for tables that have a header row, and a body containing a series 
of simple rows.
+ */
+
+table.borderless,
+table.plain,
+table.striped {
+    margin-top: 10px;
+    margin-bottom: 10px;
+}
+table.borderless > caption,
+table.plain > caption,
+table.striped > caption {
+    font-weight: bold;
+    font-size: smaller;
+}
+table.borderless th, table.borderless td,
+table.plain th, table.plain td,
+table.striped th, table.striped td {
+    padding: 2px 5px;
+}
+table.borderless,
+table.borderless > thead > tr > th, table.borderless > tbody > tr > th, 
table.borderless > tr > th,
+table.borderless > thead > tr > td, table.borderless > tbody > tr > td, 
table.borderless > tr > td {
+    border: none;
+}
+table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless 
> tr {
+    background-color: transparent;
+}
+table.plain {
+    border-collapse: collapse;
+    border: 1px solid black;
+}
+table.plain > thead > tr, table.plain > tbody tr, table.plain > tr {
+    background-color: transparent;
+}
+table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr 
> th,
+table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr 
> td {
+    border: 1px solid black;
+}
+table.striped {
+    border-collapse: collapse;
+    border: 1px solid black;
+}
+table.striped > thead {
+    background-color: #E3E3E3;
+}
+table.striped > thead > tr > th, table.striped > thead > tr > td {
+    border: 1px solid black;
+}
+table.striped > tbody > tr:nth-child(even) {
+    background-color: #EEE
+}
+table.striped > tbody > tr:nth-child(odd) {
+    background-color: #FFF
+}
+table.striped > tbody > tr > th, table.striped > tbody > tr > td {
+    border-left: 1px solid black;
+    border-right: 1px solid black;
+}
+table.striped > tbody > tr > th {
+    font-weight: normal;
+}
+/**
+ * Tweak font sizes and paddings for small screens.
+ */
+@media screen and (max-width: 1050px) {
+    #search-input {
+        width: 300px;
+    }
+}
+@media screen and (max-width: 800px) {
+    #search-input {
+        width: 200px;
+    }
+    .top-nav,
+    .bottom-nav {
+        font-size: 11px;
+        padding-top: 6px;
+    }
+    .sub-nav {
+        font-size: 11px;
+    }
+    .about-language {
+        padding-right: 16px;
+    }
+    ul.nav-list li,
+    .sub-nav .nav-list-search {
+        padding: 6px;
+    }
+    ul.sub-nav-list li {
+        padding-top: 5px;
+    }
+    main {
+        padding: 10px;
+    }
+    .summary section[class$="-summary"], .details section[class$="-details"],
+    .class-uses .detail, .serialized-class-details {
+        padding: 0 8px 5px 8px;
+    }
+    body {
+        -webkit-text-size-adjust: none;
+    }
+}
+@media screen and (max-width: 500px) {
+    #search-input {
+        width: 150px;
+    }
+    .top-nav,
+    .bottom-nav {
+        font-size: 10px;
+    }
+    .sub-nav {
+        font-size: 10px;
+    }
+    .about-language {
+        font-size: 10px;
+        padding-right: 12px;
+    }
+}

Added: dev/commons/email/2.0.0-M1-RC1/site/apidocs/tag-search-index.js
==============================================================================
--- dev/commons/email/2.0.0-M1-RC1/site/apidocs/tag-search-index.js (added)
+++ dev/commons/email/2.0.0-M1-RC1/site/apidocs/tag-search-index.js Sat Jun 15 
15:07:30 2024
@@ -0,0 +1 @@
+tagSearchIndex = [{"l":"Constant Field 
Values","h":"","u":"constant-values.html"}];updateSearchResults();
\ No newline at end of file



Reply via email to