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 <a href="https://docs.oracle.com/javase/tutorial/i18n/network/idn.html">https://docs.oracle.com/javase/tutorial/i18n/network/idn.html</a></span> +<span class="source-line-no">028</span><span id="line-28"> * @see <a href="https://en.wikipedia.org/wiki/Punycode">https://en.wikipedia.org/wiki/Punycode</a></span> +<span class="source-line-no">029</span><span id="line-29"> * @see <a href="https://tools.ietf.org/html/rfc5891">https://tools.ietf.org/html/rfc5891</a></span> +<span class="source-line-no">030</span><span id="line-30"> * @see <a href="https://en.wikipedia.org/wiki/Punycode">https://en.wikipedia.org/wiki/Punycode</a></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<String, String> 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 < 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<DataSource> 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<String, DataSource> 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<>();</span> +<span class="source-line-no">077</span><span id="line-77"> this.cidMap = new HashMap<>();</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<Address> asList(final Address[] recipients) {</span> +<span class="source-line-no">083</span><span id="line-83"> return recipients != null ? Arrays.asList(recipients) : new ArrayList<>();</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"> * <p></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 "&lt;part1&gt;".</span> +<span class="source-line-no">107</span><span id="line-107"> * </p></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<DataSource> 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 < 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<Address> 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<Address> 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"> * <p></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 "&lt;part1&gt;".</span> +<span class="source-line-no">176</span><span id="line-176"> * </p></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<String> 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<Address> 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") && plainContent == null && !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") && htmlContent == null && !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 < 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("[\\<\\>]", "");</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() && !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