/*
* Copyright (c) 2011-2015 The original author or authors
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.ext.mail;
import io.vertx.codegen.annotations.DataObject;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.core.MultiMap;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.mail.impl.Utils;
import java.util.*;
represent a mail message that can be sent via the MailClient
Author: Alexander Lehmann
/**
* represent a mail message that can be sent via the MailClient
*
* @author <a href="http://oss.lehmann.cx/">Alexander Lehmann</a>
*/
@DataObject
public class MailMessage {
private String bounceAddress;
private String from;
private List<String> to = null;
private List<String> cc = null;
private List<String> bcc = null;
private String subject;
private String text;
private String html;
private List<MailAttachment> inlineAttachment;
private List<MailAttachment> attachment;
private MultiMap headers = null;
private boolean fixedHeaders = false;
construct empty mail message that can be used with the setters
/**
* construct empty mail message that can be used with the setters
*/
public MailMessage() {
}
copy object to another @link MailMessage object
Params: - other – object to copy
/**
* copy object to another @link MailMessage object
*
* @param other object to copy
*/
public MailMessage(MailMessage other) {
Objects.requireNonNull(other);
this.bounceAddress = other.bounceAddress;
this.from = other.from;
this.to = copyList(other.to);
this.cc = copyList(other.cc);
this.bcc = copyList(other.bcc);
this.subject = other.subject;
this.text = other.text;
this.html = other.html;
this.fixedHeaders = other.fixedHeaders;
if (other.attachment != null) {
this.attachment = copyAttachments(other.attachment);
}
if (other.inlineAttachment != null) {
this.inlineAttachment = copyAttachments(other.inlineAttachment);
}
if (other.headers != null) {
headers = MultiMap.caseInsensitiveMultiMap().addAll(other.headers);
}
}
Returns:
/**
* @return
*/
private List<MailAttachment> copyAttachments(List<MailAttachment> attachment) {
List<MailAttachment> newList = new ArrayList<>(attachment.size());
for (MailAttachment a : attachment) {
newList.add(MailAttachment.create(a));
}
return newList;
}
construct object from a JsonObject representation
Params: - json – json object to copy
/**
* construct object from a JsonObject representation
*
* @param json json object to copy
*/
public MailMessage(JsonObject json) {
Objects.requireNonNull(json);
bounceAddress = json.getString("bounceAddress");
from = json.getString("from");
to = Utils.getKeyAsStringOrList(json, "to");
cc = Utils.getKeyAsStringOrList(json, "cc");
bcc = Utils.getKeyAsStringOrList(json, "bcc");
subject = json.getString("subject");
text = json.getString("text");
html = json.getString("html");
if (json.containsKey("inline_attachment")) {
inlineAttachment = copyJsonAttachment(json.getValue("inline_attachment"));
}
if (json.containsKey("attachment")) {
attachment = copyJsonAttachment(json.getValue("attachment"));
}
if (json.containsKey("headers")) {
headers = Utils.jsonToMultiMap(json.getJsonObject("headers"));
}
}
Throws: Returns:
/**
* @return
* @throws IllegalArgumentException
*/
private List<MailAttachment> copyJsonAttachment(Object object) throws IllegalArgumentException {
List<MailAttachment> list;
if (object instanceof JsonObject) {
list = Collections.singletonList(MailAttachment.create((JsonObject) object));
} else if (object instanceof JsonArray) {
list = new ArrayList<>();
for (Object attach : (JsonArray) object) {
list.add(MailAttachment.create((JsonObject) attach));
}
} else {
throw new IllegalArgumentException("invalid attachment type");
}
return list;
}
construct a simple message with text/plain
Params: - from – from email address
- to – string to email address
- subject – subject of the mail
- text – plain text of the message body
/**
* construct a simple message with text/plain
*
* @param from from email address
* @param to string to email address
* @param subject subject of the mail
* @param text plain text of the message body
*/
public MailMessage(String from, String to, String subject, String text) {
this.from = from;
this.to = Utils.asList(to);
this.subject = subject;
this.text = text;
}
get bounce address of this mail
Returns: bounce address
/**
* get bounce address of this mail
*
* @return bounce address
*/
public String getBounceAddress() {
return bounceAddress;
}
set bounce address of this mail
Params: - bounceAddress – bounce address
Returns: this to be able to use it fluently
/**
* set bounce address of this mail
*
* @param bounceAddress bounce address
* @return this to be able to use it fluently
*/
public MailMessage setBounceAddress(String bounceAddress) {
this.bounceAddress = bounceAddress;
return this;
}
get from address of this mail
Returns: from address
/**
* get from address of this mail
*
* @return from address
*/
public String getFrom() {
return from;
}
set from address of this mail
Params: - from – from addrss
Returns: this to be able to use it fluently
/**
* set from address of this mail
*
* @param from from addrss
* @return this to be able to use it fluently
*/
public MailMessage setFrom(String from) {
this.from = from;
return this;
}
get list of to addresses
Returns: List of to addresses
/**
* get list of to addresses
*
* @return List of to addresses
*/
public List<String> getTo() {
return to;
}
set list of to addresses
Params: - to – List of to addresses
Returns: this to be able to use it fluently
/**
* set list of to addresses
*
* @param to List of to addresses
* @return this to be able to use it fluently
*/
public MailMessage setTo(List<String> to) {
this.to = to;
return this;
}
helper method for single recipient
Params: - to – to address
Returns: this to be able to use it fluently
/**
* helper method for single recipient
*
* @param to to address
* @return this to be able to use it fluently
*/
@GenIgnore
public MailMessage setTo(String to) {
this.to = Utils.asList(to);
return this;
}
get list of cc addresses
Returns: List of cc addresses
/**
* get list of cc addresses
*
* @return List of cc addresses
*/
public List<String> getCc() {
return cc;
}
set list of cc addresses
Params: - cc – List of cc addresses
Returns: this to be able to use it fluently
/**
* set list of cc addresses
*
* @param cc List of cc addresses
* @return this to be able to use it fluently
*/
public MailMessage setCc(List<String> cc) {
this.cc = cc;
return this;
}
helper method for single recipient
Params: - cc – cc address
Returns: this to be able to use it fluently
/**
* helper method for single recipient
*
* @param cc cc address
* @return this to be able to use it fluently
*/
@GenIgnore
public MailMessage setCc(String cc) {
this.cc = Utils.asList(cc);
return this;
}
get list of bcc addresses
Returns: List of bcc addresses
/**
* get list of bcc addresses
*
* @return List of bcc addresses
*/
public List<String> getBcc() {
return bcc;
}
set list of bcc addresses
Params: - bcc – List of bcc addresses
Returns: this to be able to use it fluently
/**
* set list of bcc addresses
*
* @param bcc List of bcc addresses
* @return this to be able to use it fluently
*/
public MailMessage setBcc(List<String> bcc) {
this.bcc = bcc;
return this;
}
helper method for single recipient
Params: - bcc – bcc address
Returns: this to be able to use it fluently
/**
* helper method for single recipient
*
* @param bcc bcc address
* @return this to be able to use it fluently
*/
@GenIgnore
public MailMessage setBcc(String bcc) {
this.bcc = Utils.asList(bcc);
return this;
}
get the subject of this mail
Returns: the subject
/**
* get the subject of this mail
*
* @return the subject
*/
public String getSubject() {
return subject;
}
set the subject of this mail
Params: - subject – the subject
Returns: this to be able to use it fluently
/**
* set the subject of this mail
*
* @param subject the subject
* @return this to be able to use it fluently
*/
public MailMessage setSubject(String subject) {
this.subject = subject;
return this;
}
get the plain text of this mail
Returns: the text
/**
* get the plain text of this mail
*
* @return the text
*/
public String getText() {
return text;
}
set the plain text of this mail
Params: - text – the text
Returns: this to be able to use it fluently
/**
* set the plain text of this mail
*
* @param text the text
* @return this to be able to use it fluently
*/
public MailMessage setText(String text) {
this.text = text;
return this;
}
get the html text of this mail
Returns: the text
/**
* get the html text of this mail
*
* @return the text
*/
public String getHtml() {
return html;
}
set the html text of this mail
Params: - html – the text
Returns: this to be able to use it fluently
/**
* set the html text of this mail
*
* @param html the text
* @return this to be able to use it fluently
*/
public MailMessage setHtml(String html) {
this.html = html;
return this;
}
get the list of attachments of this mail
Returns: List of attachment
/**
* get the list of attachments of this mail
*
* @return List of attachment
*/
public List<MailAttachment> getAttachment() {
return attachment;
}
set the list of attachments of this mail
Params: - attachment – List of attachment
Returns: this to be able to use it fluently
/**
* set the list of attachments of this mail
*
* @param attachment List of attachment
* @return this to be able to use it fluently
*/
public MailMessage setAttachment(List<MailAttachment> attachment) {
this.attachment = attachment;
return this;
}
set a single attachment of this mail
Params: - attachment – the attachment to add
Returns: this to be able to use it fluently
/**
* set a single attachment of this mail
*
* @param attachment the attachment to add
* @return this to be able to use it fluently
*/
@GenIgnore
public MailMessage setAttachment(MailAttachment attachment) {
this.attachment = Utils.asList(attachment);
return this;
}
get the list of inline attachments of this mail
Returns: List of attachment
/**
* get the list of inline attachments of this mail
*
* @return List of attachment
*/
public List<MailAttachment> getInlineAttachment() {
return inlineAttachment;
}
set the list of inline attachments of this mail
Params: - inlineAttachment – List of attachment
Returns: this to be able to use it fluently
/**
* set the list of inline attachments of this mail
*
* @param inlineAttachment List of attachment
* @return this to be able to use it fluently
*/
public MailMessage setInlineAttachment(List<MailAttachment> inlineAttachment) {
this.inlineAttachment = inlineAttachment;
return this;
}
set a single inline attachment of this mail
Params: - inlineAttachment – the attachment to add
Returns: this to be able to use it fluently
/**
* set a single inline attachment of this mail
*
* @param inlineAttachment the attachment to add
* @return this to be able to use it fluently
*/
@GenIgnore
public MailMessage setInlineAttachment(MailAttachment inlineAttachment) {
this.inlineAttachment = Utils.asList(inlineAttachment);
return this;
}
Add a message header.
Params: - key – the header key
- value – the header value
Returns: a reference to this, so the API can be used fluently
/**
* Add a message header.
*
* @param key the header key
* @param value the header value
* @return a reference to this, so the API can be used fluently
*/
public MailMessage addHeader(String key, String value) {
if (headers == null) {
headers = MultiMap.caseInsensitiveMultiMap();;
}
Objects.requireNonNull(key, "no null key accepted");
Objects.requireNonNull(value, "no null value accepted");
headers.add(key, value);
return this;
}
Get the headers.
Returns: the headers
/**
* Get the headers.
*
* @return the headers
*/
@GenIgnore
public MultiMap getHeaders() {
return headers;
}
Set the headers.
Params: - headers – the headers to set
Returns: this to be able to use it fluently
/**
* Set the headers.
*
* @param headers the headers to set
* @return this to be able to use it fluently
*/
@GenIgnore
public MailMessage setHeaders(MultiMap headers) {
this.headers = headers;
return this;
}
get whether our own headers should be the only headers added to the message
Returns: the fixedHeaders
/**
* get whether our own headers should be the only headers added to the message
*
* @return the fixedHeaders
*/
public boolean isFixedHeaders() {
return fixedHeaders;
}
set whether our own headers should be the only headers added to the message
Params: - fixedHeaders – the fixedHeaders to set
Returns: this to be able to use it fluently
/**
* set whether our own headers should be the only headers added to the message
*
* @param fixedHeaders the fixedHeaders to set
* @return this to be able to use it fluently
*/
public MailMessage setFixedHeaders(boolean fixedHeaders) {
this.fixedHeaders = fixedHeaders;
return this;
}
convert the mail message to Json representation
Returns: the json object
/**
* convert the mail message to Json representation
*
* @return the json object
*/
public JsonObject toJson() {
JsonObject json = new JsonObject();
Utils.putIfNotNull(json, "bounceAddress", bounceAddress);
Utils.putIfNotNull(json, "from", from);
Utils.putIfNotNull(json, "to", to);
Utils.putIfNotNull(json, "cc", cc);
Utils.putIfNotNull(json, "bcc", bcc);
Utils.putIfNotNull(json, "subject", subject);
Utils.putIfNotNull(json, "text", text);
Utils.putIfNotNull(json, "html", html);
if (attachment != null) {
json.put("attachment", attachmentsToJson(attachment));
}
if (inlineAttachment != null) {
json.put("inline_attachment", attachmentsToJson(inlineAttachment));
}
if (headers != null) {
json.put("headers", Utils.multiMapToJson(headers));
}
if (fixedHeaders) {
json.put("fixedheaders", true);
}
return json;
}
private JsonArray attachmentsToJson(List<MailAttachment> attachments) {
JsonArray array = new JsonArray();
for (MailAttachment a : attachments) {
array.add(a.toJson());
}
return array;
}
private List<Object> getList() {
return Arrays.asList(bounceAddress, from, to, cc, bcc, subject, text, html, attachment, inlineAttachment, headers, fixedHeaders);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof MailMessage)) {
return false;
}
final MailMessage message = (MailMessage) o;
return getList().equals(message.getList());
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return getList().hashCode();
}
private List<String> copyList(List<String> list) {
if (list == null) {
return null;
} else {
return new ArrayList<>(list);
}
}
}