net.israfil.service.mail.api.smtp.SMTPMessage Maven / Gradle / Ivy
The newest version!
package net.israfil.service.mail.api.smtp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import net.israfil.service.mail.api.MailAddress;
import net.israfil.service.mail.api.MailHeader;
import net.israfil.service.mail.api.MailMessage;
import net.israfil.service.mail.api.MailMessageBody;
import net.israfil.service.mail.api.smtp.header.AbstractSMTPHeader;
import net.israfil.service.mail.api.smtp.header.SMTPAddressHeader;
import net.israfil.service.mail.api.smtp.header.SMTPAddressesHeader;
import net.israfil.service.mail.api.smtp.header.SMTPStringHeader;
public class SMTPMessage implements MailMessage {
private final Map> headers;
private MailMessageBody body;
public SMTPMessage() {
this(null,null);
}
protected SMTPMessage(Collection> headers) {
this(headers,null);
}
protected SMTPMessage(Collection> headers, MailMessageBody body) {
this.headers = new HashMap>();
if (headers != null) this.addHeaders(headers);
this.setBody(body);
}
private Object getHeaderValue(String name,Map> headers) {
MailHeader> h = headers.get(name);
if (h == null) return null;
else return h.getContent();
}
public void addAddress(SMTPHeaderTypes type, SMTPAddress... addresses) {
switch (type) {
case From:
throw new IllegalArgumentException("You may not set the From: header from the addAddress method - use setFromAddress() instead.");
case Subject:
throw new IllegalArgumentException("You may not set the Subject: header from the addAddress method - use setSubject() instead.");
case To: case Bcc: case Cc:
SMTPAddressesHeader header = (SMTPAddressesHeader)headers.get(type.getCanonicalRepresentation());
if (header == null) {
header = new SMTPAddressesHeader(
type.getCanonicalRepresentation(),
new ArrayList()
);
headers.put(type.getCanonicalRepresentation(), header);
}
Collection _addresses = header.getContent();
for (SMTPAddress address : addresses) {
_addresses.add(address);
}
break;
}
}
public void clearAddresses(SMTPHeaderType type) {
headers.put(type.getCanonicalRepresentation(), new SMTPAddressesHeader(
type.getCanonicalRepresentation(),
new ArrayList()
));
}
@SuppressWarnings("unchecked")
public Collection getBccAddresses() {
return (Collection)getHeaderValue(SMTPHeaderTypes.Bcc.getCanonicalRepresentation(),headers);
}
@SuppressWarnings("unchecked")
public Collection getToAddresses() {
return (Collection)getHeaderValue(SMTPHeaderTypes.To.getCanonicalRepresentation(),headers);
}
@SuppressWarnings("unchecked")
public Collection getCcAddresses() {
return (Collection)getHeaderValue(SMTPHeaderTypes.Cc.getCanonicalRepresentation(),headers);
}
public MailMessageBody getBody() {
return body;
}
public void setBody(MailMessageBody body) {
if (body == null) this.body = new PlaintextMessageBody();
else this.body = body;
}
public MailAddress getFromAddress() {
return (SMTPAddress)getHeaderValue(SMTPHeaderTypes.From.getCanonicalRepresentation(),headers);
}
public void setFromAddress(SMTPAddress address) {
headers.put(SMTPHeaderTypes.From.getCanonicalRepresentation(),
new SMTPAddressHeader(SMTPHeaderTypes.From.getCanonicalRepresentation(),address)
);
}
public String getSubject() {
return (String)getHeaderValue(SMTPHeaderTypes.Subject.getCanonicalRepresentation(),headers);
}
public void setSubject(String subject) {
headers.put(SMTPHeaderTypes.Subject.getCanonicalRepresentation(),
new SMTPStringHeader(SMTPHeaderTypes.Subject.getCanonicalRepresentation(),subject)
);
}
public Map> getHeaders() {
return new HashMap>(headers);
}
public void addHeader(AbstractSMTPHeader>...headers) {
addHeaders(Arrays.asList(headers));
}
public void addHeaders(Collection> headers) {
for (MailHeader> header : headers) {
SMTPHeaderTypes type = null;
try {
type = SMTPHeaderTypes.valueOfCanonicalString(header.getName());
} catch (IllegalArgumentException e) {
// NO-OP if not a member of this enumerated
}
SMTPUtils.validateSpecialHeader(type, header);
this.headers.put(header.getName(), header);
}
}
public void clearHeaders() {
this.headers.clear();
}
public MailHeader> removeHeader(String name) {
return this.headers.remove(name);
}
public MailHeader> getHeader(String name) {
return this.headers.get(name);
}
public String getType() {
return SMTPTransport.TRANSPORT_TYPE;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy