<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-ietf-sml-structured-vacation-notices-01" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title>Structured vacation notices</title><seriesInfo value="draft-ietf-sml-structured-vacation-notices-01" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="H.-J." surname="Happel" fullname="Hans-Joerg Happel"><organization>audriga GmbH</organization><address><postal><street></street>
</postal><email>happel@audriga.com</email>
<uri>https://www.audriga.com</uri>
</address></author><date/>
<area>ART</area>
<workgroup>SML</workgroup>

<abstract>
<t>This document describes a machine-readable format for conveying unavailibility information in email messages. This includes &quot;vacation notices&quot; of persons but also different forms of unavailibility for emails sent by programs.</t>
<t>Structured vacation notices are supposed to be used in conjunction with conventional, human-readable vacation notices in most cases. They are based on the forthcoming &quot;structured email&quot; specification defined in [I-D.ietf-sml-structured-email-03] and related drafts.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>A &quot;vacation notice&quot; (also known as &quot;out-of-office notice&quot; <xref target="RFC3834"></xref><xref target="RFC5598"></xref> or &quot;-reply&quot;) is a short text message which is automatically sent in response to incoming mail, if the recipient is absent or otherwise unable to answer immediately. Its content is written by the absentee in advance and usually informs about the unavailibility and possible alternative contacts for urgent inquiries.</t>
<t>The email system will return this content as an automatic repliy to incoming email messages, based on conditions set by the absentee. The most commonly used condition is the time period, during which incoming messages should be automatically answered with a vacation notice.</t>
<t>Vacation notices have not been standardized as such. A partial, implicit specification is contained in <xref target="RFC5230"></xref>, which specifies an extension to the Sieve email filtering language. The user interface of MUAs provides further formalization of the user input for a vacation notice. While all this happens on the side of the absentee, vacation notices received by communication paterns just appear as a regular, human-readable email message.</t>
<t>The goal of this specification is to allow absentees to include a machine-readable version of the vacation notice, so that their communication partners can be assisted by software when dealing with vacation notices.</t>
<t>While this specification may be used stand-alone, is aims to be compliant to the &quot;structured email&quot; specification ([I-D.ietf-sml-structured-email-03]) and its trust and security recommendations ([I-D.happel-structured-email-trust-04]).</t>
</section>

<section anchor="conventions-used-in-this-document"><name>Conventions Used in This Document</name>
<t>The term &quot;message&quot; refers to &quot;electronic mail messages&quot; or &quot;emails&quot; as specified in <xref target="RFC5322"></xref>.</t>
<t>The term &quot;Message User Agent&quot; (MUA) denotes an email client application as per <xref target="RFC5598"></xref>. Based on the role of the communication partners, one can further distiguish into &quot;Recipient MUA&quot; (rMUA) and &quot;Author MUA&quot; (aMUA).</t>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and only when, they appear in all capitals, as shown here.</t>
</section>

<section anchor="scope"><name>Scope</name>

<section anchor="subjects-of-unavailabily"><name>Subjects of Unavailabily</name>
<t>The unavailability of a particular mailbox owner (i.e., person) is the most common case for a vacation notice. In practice, vacation notices and similar messages are also often used on generic <em>role acocunts</em> (<xref target="RFC2142"></xref>) to indicate the unavailability of a certain service (&quot;Our restaurant is closed till the end of August&quot;).</t>
</section>

<section anchor="time-periods"><name>Time periods</name>
<t>Many systems allow to specify a time range, during which a vacation notice should be sent. Notably, this time range must not exactly match the actual absence time, even though this is probably the most common case in practice.</t>
<t>When realized using the Sieve <tt>vacation</tt> extension (<xref target="RFC5230"></xref>), time periods are typically defined in conjuction with a <tt>currentdate</tt> test (<xref target="RFC5260"></xref>).</t>
<t>We distinguish temporary and permantenty availability for considering the time periods of unavailability denoted by a structured vacation notice.</t>

<section anchor="temporary"><name>Temporary</name>
<t>Temporary unavailabily for a certain time range is the most common case for vacation notices, typically specifying a start and an end date. Some systems also allow for an open-ended time period, leaving start or end date empty.</t>
<t>The specification of fixed workdays for a person or of service days for an organization is currently not supported by most systems.</t>
</section>

<section anchor="permanent"><name>Permanent</name>
<t>Permanent unavailability can be seen as a special case of unavailability, in which a person or service will be no more available in the future. This is mentioned as part of the &quot;Change of address&quot; case in <xref target="RFC3834"></xref> and can already be modeled in some systems by leaving both, start and end date, empty.</t>
<t>Even though the corresponding mailbox will eventually cease to exist at some point, it is not uncommon that affected persons or services return a &quot;permanent unavailability&quot; message during a phase-out period.</t>

<section anchor="mailbox-move"><name>Mailbox move</name>
<t>A mailbox move is a special form of permanent unavailability. While the original mailbox will become permantently unavailable at some point, there exists a new mailbox replacing the former one (also mentioned in the &quot;Change of address&quot; case in <xref target="RFC3834"></xref>).</t>
<t>Reasons for this might be a name change in the local part (e.g., due to marriage) or a name change in the domain part (e.g., a company merge or renaming).</t>
</section>

<section anchor="noreply"><name>Noreply</name>
<t>A &quot;noreply&quot; message is an internet naming convention, indicating that a sending mailbox is not attended and replies to that mailbox will likely be discarded. This fact is typically conveyed by the name of the email address (&quot;noreply@example.com&quot;) and sometimes explained in the email body. It is typically used on machine-generated, transactional emails.</t>
<t>Noreply messages can be considered as a form of unavailability and hence fit into this draft. &quot;Replacement&quot; information as described in the data model of this specification can be used to point receipients to other communication channels such as a phone hotline.</t>
</section>
</section>
</section>
</section>

<section anchor="data-model"><name>Data model</name>
<t>The minimum data for a vacation notice is the actual notice content as specified by the absentee. It might be as short as &quot;I am currently out of office&quot;.</t>
<t>This document specifies an RDF class <tt>UnavailabilityInformation</tt> which is described in the following sections.</t>

<section anchor="absence"><name>Absence</name>
<t><tt>start</tt> and <tt>end</tt> are optional date fields in the format <tt>YYYY-MM-DDThh:mm:ssZ</tt> following ISO 8601 (<xref target="iso8601"></xref>). Since both dates are fixed in time, they do not require timezone information for interpretation. Hence, the date <bcp14>MUST</bcp14> only be formatted in UTC.</t>
<t><tt>availabilityPattern</tt> is a text String with similar semantics as the Schema.org <tt>openingHours</tt> property (<xref target="openingHours"></xref>). <tt>availabilityTimezone</tt> is a text String with an identifier from the IANA Time Zone Database (<xref target="tzdb"></xref>). If an <tt>availabilityPattern</tt> is set, the <tt>availabilityTimezone</tt> property <bcp14>MUST</bcp14> be set as well.</t>
<t>Both <tt>start</tt>/<tt>end</tt> and <tt>availabilityPattern</tt> might be used in parallel. In this case, the <tt>start</tt>/<tt>end</tt>  dates override the <tt>availabilityPattern</tt> in case of conflict.</t>
<t>A permanent absence can be signaled explicily using mailbox status information as explained below.</t>
</section>

<section anchor="replacements"><name>Replacements</name>
<t>Vacation notice content may also contain information about if a message is automatically forwarded to a replacement person (<tt>isForwarded</tt>), or details about replacement persons to contact for urgent inquiries (<tt>replacement</tt>).</t>
<t>When considering organizational users or role accounts, a replacement can also be another organization (&quot;While our doctor's office is closed, refer to Dr. Doe in case of emergencies&quot;). Values of the <tt>replacement</tt> property are of type <tt>Replacement</tt>, which:</t>

<ul spacing="compact">
<li><bcp14>MAY</bcp14> contain a <tt>description</tt> to add context for distinguishing multiple replacement options</li>
<li><bcp14>MAY</bcp14> contain an <tt>availabilityPattern</tt> and  <tt>availabilityTimezone</tt></li>
<li>and <bcp14>MUST</bcp14> contain instances of either Schema.Org Person (<xref target="person"></xref>) or Organization (<xref target="organization"></xref>) or any of its subclasses.</li>
</ul>
</section>

<section anchor="mailbox-status-information"><name>Mailbox status information</name>
<t>For a clear distinction of cases of temporary and permanent unavailability, senders <bcp14>MAY</bcp14> specify an <tt>unavailabilityType</tt> property in <tt>UnavailabilityInformation</tt>.</t>
<t><tt>unavailabilityType</tt> is text field, allowing for the following values:</t>

<ul spacing="compact">
<li><tt>temporary</tt> (temporary absence/classic vacation notice; implicit default value)</li>
<li><tt>permanent</tt> (infinite absence / mailbox is not used anymore)</li>
<li><tt>moved</tt> (mailbox name has changed)</li>
<li><tt>noreply</tt> (mailbox is send only)</li>
</ul>
<t>For any value which is not <tt>temporary</tt>, potentially conflicting information from the <tt>end</tt> date <bcp14>MUST</bcp14> be ignored. The <tt>start</tt> date however <bcp14>MUST</bcp14> be considered if set.</t>
</section>

<section anchor="note"><name>Note</name>
<t>The <tt>note</tt> property is a text String which allows for an optional free-form message in addition to the structured data.</t>

<artwork>For discussion, see also:
https://github.com/hhappel/draft-happel-sml-structured-vacation-notices/issues/1
</artwork>
</section>
</section>

<section anchor="use-cases"><name>Use cases</name>
<t>For the use cases, we distinguish the absentee, willing to answer incoming messages with a vacation notice, and communication partner(s), which are sending messages to the absentee during or around the time of her absence.</t>

<section anchor="absentee"><name>Absentee</name>
<t>The absentee might want to send vacation notices in two difference scenarios. Besides the common, dedicated vacation notice autoreplies, machine-readable vacation notices might also be added to regular email messages sent to communication partners (&quot;preemptive vacation notice&quot;).</t>

<section anchor="outgoing-vacation-notice"><name>Outgoing vacation notice</name>
<t>For adding a structured vacation notice in a common vacation notice message, a JSON-LD snippet using the <tt>UnavailabilityInformation</tt> type defined in the previous section needs to be embedded in the <tt>text/html</tt> representation of the vacation notice email (TODO sync with [I-D.ietf-sml-structured-email-03]).</t>
<t>In systems using the Sieve <tt>vacation</tt> extension (<xref target="RFC5230"></xref>), <tt>text/html</tt> body parts are supported when using the parameter to include MIME content (<tt>:mime</tt>).</t>
<t>If the user interface already allows to set date ranges, the structured vacation notice data may be added or prefilled automatically, without extra user effort.</t>
</section>

<section anchor="outgoing-preemptive-vaction-notice"><name>Outgoing preemptive vaction notice</name>
<t>Structured vacation notices can support a second use case, in which information can be preemptively added to regular outgoing email messages by the absentee.</t>
<t>This may be helpful in three scenarios, if an absentee sends a message:</t>

<ul spacing="compact">
<li><em>during</em> her absence, to proactively inform communication partners</li>
<li><em>before</em> her absence, so that communication partners can preemptively learn about an upcoming absence and take according actions</li>
<li><em>after</em> her absence, communication partners could learn that the absentee is available again (in particular, if no initial absence end date was given, or if the absence ended earlier than planned)</li>
</ul>
<t>&lt;a/&gt;</t>

<artwork>For discussion, see also:
https://github.com/hhappel/draft-happel-sml-structured-vacation-notices/issues/2
</artwork>
</section>
</section>

<section anchor="communication-partner"><name>Communication partner</name>
<t>Structured vacation notices may be processed by the communication partner (resp. her MUA) in different ways.</t>

<section anchor="incoming-vacation-notice"><name>Incoming vacation notice</name>
<t>If an incoming vacation notice contains structured vacation notice data, the MUA of the communication partner <bcp14>MAY</bcp14> extract and store this data.</t>
<t>Since the MUA can make sense of the structured vacation notice, it MAY also employ various forms of user assistance at its own discretion, such as:</t>

<ul spacing="compact">
<li>Highlighting the absence in a special way</li>
<li>Allowing the user to take certain actions (e.g., set a reminder, store to calendar, or forward the message to a replacement person)</li>
</ul>
</section>

<section anchor="incoming-preemptive-vacation-notice"><name>Incoming preemptive vacation notice</name>
<t>As described before, the absentee may decide to add structured vacation notices in regular messages sent before, during, or after her absence.</t>
<t>When receiving such messages, the MUA of the communication partner <bcp14>MAY</bcp14> extract and store the structured vacation notice and <bcp14>MAY</bcp14> display the absence information.</t>
</section>

<section anchor="message-composition"><name>Message composition</name>
<t>If a communication partner wants to send a message to a person, for which a structured vacation notice has been received earlier, the MUA <bcp14>MAY</bcp14> inform its user about this upcoming or ongoing absence.</t>
</section>
</section>
</section>

<section anchor="implementation-guidance"><name>Implementation guidance</name>
<t>The following points should be considered when implementing (structured) vacation notices from a sender and recipient-side processing perspective.</t>

<section anchor="sending"><name>Sending</name>

<section anchor="leave-structured-vacation-notices-optional"><name>Leave structured vacation notices optional</name>
<t>Adding structured data to a vacation notice should be left as a choice to the user. A MUA <bcp14>SHOULD</bcp14> not add structured data to vacation notices without explicit consent or action of the user.</t>
</section>

<section anchor="provide-alternative-representations"><name>Provide alternative representations</name>
<t>Vacation notices containing structured data which are sent to human readers <bcp14>MUST</bcp14> contain a human readable alternative version of the vacation notice using <tt>text/plain</tt> and/or <tt>text/html</tt> <tt>multipart/alternative</tt> body parts.</t>
<t>Vacation notices sent between mailboxes that are known to be processed by programs only may just contain a structured vacation notice as their main message body part.</t>
</section>
</section>

<section anchor="processing"><name>Processing</name>

<section anchor="igore-past-time-ranges"><name>Igore past time ranges</name>
<t>A MUA <bcp14>MUST</bcp14> ignore structured vacation notices with time ranges in the past.</t>
</section>

<section anchor="prefer-latest-vacation-time-range"><name>Prefer latest vacation time range</name>
<t>If multiple structured vacation notices exist for a user, prefer the one from the most recently received message.</t>
</section>

<section anchor="strip-when-forwarding"><name>Strip when forwarding</name>
<t>In the case of preemptive structured vacation notices, strip the structured data  from the message when it is forwarded to a third party by the user.	</t>
</section>
</section>
</section>

<section anchor="implementation-status"><name>Implementation status</name>
<t>&lt; RFC Editor: before publication please remove this section and the reference to <xref target="RFC7942"></xref> &gt;</t>
<t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"></xref>. The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs. Please note that the listing of any individual implementation here does not imply endorsement by the IETF. Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features. Readers are advised to note that other implementations may exist.</t>
<t>According to <xref target="RFC7942"></xref>, &quot;this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature. It is up to the individual working groups to use this information as they see fit&quot;.</t>

<section anchor="structured-vacation-notice-plugin-for-roundcube-webmail"><name>Structured Vacation Notice plugin for Roundcube Webmail</name>
<t>This draft is implemented in an open source plugin for the Roundcube Webmail system <xref target="RC-SVN"></xref>, partly based on the Roundcube managesieve plugin.</t>
</section>
</section>

<section anchor="security-considerations"><name>Security considerations</name>
<t>In particular when using structured vacation notices in conjunction with the Sieve filtering language, the security considerations of the corresponding RFCs should be taken into account:</t>

<ul spacing="compact">
<li>Sieve base specification <xref target="RFC5228"></xref></li>
<li>Sieve Vacation extension <xref target="RFC5230"></xref></li>
<li>[I-D.happel-sml-structured-email-trust-00]</li>
</ul>
</section>

<section anchor="privacy-considerations"><name>Privacy considerations</name>
<t>Vacation notices expose certain potentially sensitive information to third parties, such as absence times, absence reasons and organizational details (such as replacement staff and their contact information).</t>
<t>For this reason, absentees are typically free to decide how much information they expose in the written text of their vacation notice.</t>
<t>Accordingly, software systems <bcp14>SHOULD</bcp14> leave absentees the same level of freedom when adding structured vacation notices and, e.g., not enforce the inclusion of certain information or even do so implicitly.</t>
<t>Information exposure might also be limited by restricting the usage of structured vacation notices to certain communication partners (e.g., using address book information <xref target="RFC6134"></xref> as discussed in <xref target="RFC6133"></xref>).</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document has no IANA actions at this time.</t>
</section>

<section anchor="appendix-examples"><name>Appendix (Examples)</name>
<t>The following snippet shows a potential extension to the <xref target="SchemaOrg"></xref> vocabulary in <xref target="JSONLD"></xref> format.</t>

<artwork>Note that this is a preliminary specification only. Do not use examples in practice.
</artwork>

<section anchor="example-1-minimum-viable-structured-vacation-notice"><name>Example 1: Minimum viable structured vacation notice</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
}
</sourcecode>
</section>

<section anchor="example-2-basic-structured-vacation-notice"><name>Example 2: Basic structured vacation notice</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;start&quot;: &quot;2025-06-22T00:00&quot;,
	&quot;end&quot;: &quot;2025-08-22T00:00&quot;,
	&quot;note&quot;: &quot;I am currently on vacation.&quot;
}
</sourcecode>
</section>

<section anchor="example-3-basic-structured-vacation-notice-with-availabilitypattern"><name>Example 3: Basic structured vacation notice with AvailabilityPattern</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;start&quot;: &quot;2025-06-22T00:00&quot;,
	&quot;end&quot;: &quot;2025-08-22T00:00&quot;,
	&quot;availabilityPattern&quot;: &quot;Mo,Tu 12:00-15:00&quot;,
	&quot;availabilityTimezone&quot;: &quot;Europe/London&quot;,
	&quot;note&quot;: &quot;I am currently on vacation.&quot;
}
</sourcecode>
</section>

<section anchor="example-4-structured-vacation-notice-with-availabilitypattern-only"><name>Example 4: Structured vacation notice with AvailabilityPattern only</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;availabilityPattern&quot;: &quot;Mo,Tu 12:00-15:00&quot;,
	&quot;availabilityTimezone&quot;: &quot;Europe/London&quot;,
	&quot;note&quot;: &quot;I am in office Mondays and Tuesday afternoon.&quot;
}
</sourcecode>
</section>

<section anchor="example-5-structured-vacation-notice-with-replacements"><name>Example 5: Structured vacation notice with replacements</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;temporary&quot;,
	&quot;start&quot;: &quot;2025-06-22T00:00&quot;,
	&quot;end&quot;: &quot;2025-08-22T00:00&quot;,
	&quot;isForwarded&quot;: false,
	&quot;replacement&quot;: [
	    {
	        &quot;@type&quot;: &quot;Replacement&quot;,
	        &quot;description&quot;: &quot;Project A&quot;,
			&quot;replacedBy&quot;: {
				&quot;@type&quot;: &quot;http://schema.org/Person&quot;,	
				&quot;name&quot;: &quot;John Doe&quot;,
				&quot;email&quot;: &quot;john@doe.com&quot;,
				&quot;phone&quot;: &quot;+1234567890&quot;
			}
	    },
	    {
	        &quot;@type&quot;: &quot;Replacement&quot;,
	        &quot;description&quot;: &quot;Project B&quot;,
			&quot;availabilityPattern&quot;: &quot;Mo,Tu 12:00-15:00&quot;,
			&quot;availabilityTimezone&quot;: &quot;Europe/London&quot;,
			&quot;replacedBy&quot;: {
				&quot;@type&quot;: &quot;http://schema.org/Person&quot;,	
				&quot;name&quot;: &quot;Jane Doe&quot;,
				&quot;email&quot;: &quot;jane@doe.com&quot;,
				&quot;phone&quot;: &quot;+9876543210&quot;
			}
	    }
	],
	&quot;note&quot;: &quot;I am currently on vacation.&quot;
}
</sourcecode>
</section>

<section anchor="example-6-structured-vacation-notice-for-service-with-replacements"><name>Example 6: Structured vacation notice for service with replacements</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;temporary&quot;,
	&quot;start&quot;: &quot;2025-06-22T00:00&quot;,
	&quot;end&quot;: &quot;2025-08-22T00:00&quot;,
	&quot;isForwarded&quot;: false,
	&quot;replacement&quot;: [
	    {
	        &quot;@type&quot;: &quot;Replacement&quot;,
			&quot;replacedBy&quot;: {
				&quot;@type&quot;: &quot;http://schema.org/Physician&quot;,	
				&quot;name&quot;: &quot;Dr. Alice&quot;,
				&quot;email&quot;: &quot;contact@alice.example.com&quot;,
				&quot;phone&quot;: &quot;+1234567890&quot;
			}
	    },
	    {
	        &quot;@type&quot;: &quot;Replacement&quot;,
			&quot;availabilityPattern&quot;: &quot;Mo,Tu,We&quot;,
			&quot;replacedBy&quot;: {
				&quot;@type&quot;: &quot;http://schema.org/Physician&quot;,	
				&quot;name&quot;: &quot;Dr. Bob&quot;,
				&quot;email&quot;: &quot;contact@bob.example.com&quot;,
				&quot;phone&quot;: &quot;+9876543210&quot;
			}
	    }
	],
	&quot;note&quot;: &quot;Our doctor's office is closed for holidays.&quot;
}
</sourcecode>
</section>

<section anchor="example-7-permanant-unavailability"><name>Example 7: Permanant unavailability</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;permanent&quot;,
	&quot;note&quot;: &quot;This address is not used anymore&quot;
}
</sourcecode>
</section>

<section anchor="example-8-permanant-unavailability-after-future-date"><name>Example 8: Permanant unavailability after future date</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;permanent&quot;,
	&quot;start&quot;: &quot;2025-08-31T00:00&quot;,
	&quot;note&quot;: &quot;This address is not used anymore after August 2025&quot;
}
</sourcecode>
</section>

<section anchor="example-9-mailbox-has-moved"><name>Example 9: Mailbox has moved</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;moved&quot;,
	&quot;isForwarded&quot;: false,
	&quot;replacement&quot;: 
	    {
	        &quot;@type&quot;: &quot;Replacement&quot;,
			&quot;replacedBy&quot;: {
				&quot;@type&quot;: &quot;http://schema.org/Person&quot;,	
				&quot;email&quot;: &quot;john@doe.com&quot;,
			}
	    },
	&quot;note&quot;: &quot;May email has changed&quot;
}
</sourcecode>
</section>

<section anchor="example-10-minimum-noreply-address"><name>Example 10: Minimum noreply address</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;noreply&quot;,
}
</sourcecode>
</section>

<section anchor="example-11-noreply-address-with-phone-contact"><name>Example 11: Noreply address with phone contact</name>

<sourcecode type="json">{
	&quot;@context&quot;: &quot;https://sml.draft.iana.org&quot;,
	&quot;@type&quot;: &quot;UnavailabilityInformation&quot;,
	&quot;unavailabilityType&quot;: &quot;noreply&quot;,
	&quot;replacement&quot;: 
	    {
	        &quot;@type&quot;: &quot;Replacement&quot;,
			&quot;replacedBy&quot;: {
				&quot;@type&quot;: &quot;http://schema.org/Organization&quot;,	
				&quot;name&quot;: &quot;Customer support&quot;,
				&quot;phone&quot;: &quot;+9876543210&quot;
			}
	    }
}
</sourcecode>
</section>
</section>

<section anchor="appendix-vcard-properties"><name>Appendix (vCard properties)</name>
<t>The following vCard <tt>X-Properties</tt> are currently used by the <xref target="RC-SVN"></xref> implementation to store  incoming structured vacation notice data of absentees in the address book of the communication partner. I.e., if an email message with a structured vacation notice is processed, the implementation will lookup the absentee in the communication partner's address book and store the absence information, if an address book entry was found.</t>
<t>While this is mostly for internal data management in <xref target="RC-SVN"></xref>, standardizing the vCard properties could be useful from a data portability perspective.</t>
<t>Most <tt>X-Properties</tt> directly map to the example <tt>OutOfOffice</tt> JSON-LD snippet above, <tt>X-OOF-UPDATED</tt> was added to store the receiving date of the email message which contained the structured vacation notice.</t>

<artwork>X-OOF-UPDATED:2023-10-01
X-OOF-START:2023-10-01
X-OOF-END:2023-11-01
X-OOF-IS-FORWARDED:false
X-OOF-REPLACEMENT:Jane Doe,Marketing,jane.doe@corp.com,+1234567-89
X-OOF-REPLACEMENT:John Doe,Development,john.doe@corp.com,+1234567-99
X-OOF-NOTE:I am out of office please reach my replacement instead
</artwork>
</section>

<section anchor="appendix-related-use-cases"><name>Appendix (Related use cases)</name>
<t>There are some use cases which are somehow related to &quot;vacation notices&quot;, mostly by providing automated messages about a certain status of the recipient.</t>
<t>Those related use cases may be worth further consideration within the design space of this draft or may result in future related drafts.</t>

<artwork>For discussion, see also:
https://github.com/hhappel/draft-happel-sml-structured-vacation-notices/issues/3
</artwork>

<section anchor="new-contact-data"><name>New contact data</name>
<t>Beyond the email addresses, senders sometimes highlight updated information in the signature of a message, such as:</t>

<ul spacing="compact">
<li>Updated postal address</li>
<li>Updated phone number</li>
</ul>
</section>

<section anchor="bounces"><name>Bounces</name>
<t>Another category of automated email messages are Delivery Status Notifications (DSNs) ([RFC3464]). DSNs are messages sent by a receiving MTA to the original sender to convey meta information about the delivery. The most common case is to report isuses with an email received, a case also refered to as &quot;NDR&quot; (Non-Delivery Report) or &quot;bounce message&quot;.</t>
<t>Status codes to be used in DSNs are defined in [RFC3463]. Common include:</t>

<ul spacing="compact">
<li>5.1.1 User unknown</li>
<li>4.2.2/5.2.2 Mailbox full</li>
<li>5.3.4 Message size</li>
<li>5.7.1 Security or policy-related issues</li>
</ul>
<t>At least the first case could already be modeled according to this specification (see Example 7). As this specification indends to enabled MUAs to propose actions on issues encountered, one may consider to include further NDR cases.</t>
<t>Alternatively, implementation guidance might advice MUAs to parse certain DSN and offer similar user interactions as for Structured Vacation Notices.</t>
</section>
</section>

</middle>

<back>
<references><name>Informative References</name>
<reference anchor="JSONLD" target="https://www.w3.org/TR/json-ld/">
  <front>
    <title>JSON-LD 1.1</title>
    <author>
      <organization>W3C JSON-LD Working Group</organization>
    </author>
    <date></date>
  </front>
</reference>
<reference anchor="RC-SVN" target="https://github.com/audriga/roundcube-structured-vacation-notice/">
  <front>
    <title>Structured Vacation Notice plugin for Roundcube Webmail</title>
    <author>
      <organization>audriga GmbH</organization>
    </author>
    <date></date>
  </front>
</reference>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2142.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3834.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5228.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5230.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5260.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5322.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5598.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6133.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6134.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<reference anchor="SchemaOrg" target="https://schema.org/">
  <front>
    <title>Schema.org</title>
    <author>
      <organization>W3C Schema.org Community Group</organization>
    </author>
    <date></date>
  </front>
</reference>
<reference anchor="iso8601" target="https://www.iso.org/iso-8601-date-and-time-format.html">
  <front>
    <title>ISO 8601 Date and time format</title>
    <author>
      <organization>ISO</organization>
    </author>
    <date></date>
  </front>
</reference>
<reference anchor="openingHours" target="https://schema.org/openingHours">
  <front>
    <title>Schema.org openingHours</title>
    <author>
      <organization>W3C Schema.org Community Group</organization>
    </author>
    <date></date>
  </front>
</reference>
<reference anchor="organization" target="https://schema.org/Organization">
  <front>
    <title>Schema.org Organization</title>
    <author>
      <organization>W3C Schema.org Community Group</organization>
    </author>
    <date></date>
  </front>
</reference>
<reference anchor="person" target="https://schema.org/Person">
  <front>
    <title>Schema.org Person</title>
    <author>
      <organization>W3C Schema.org Community Group</organization>
    </author>
    <date></date>
  </front>
</reference>
<reference anchor="tzdb" target="https://www.iana.org/time-zones">
  <front>
    <title>Time Zone Database</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date></date>
  </front>
</reference>
</references>

</back>

</rfc>
