📄 email.java
字号:
m_to.toArray(ias);
return ias;
} // getTos
/**
* Add CC Recipient
* @param newCc EMail cc Recipient
* @return true if valid
*/
public boolean addCc (String newCc)
{
if (newCc == null || newCc.length() == 0)
return false;
InternetAddress ia = null;
try
{
ia = new InternetAddress (newCc, true);
}
catch (Exception e)
{
log.log(Level.WARNING, newCc + ": " + e.toString());
return false;
}
if (m_cc == null)
m_cc = new ArrayList<InternetAddress>();
m_cc.add (ia);
return true;
} // addCc
/**
* Get CC Recipients
* @return Recipient's internet address
*/
public InternetAddress[] getCcs()
{
if (m_cc == null || m_cc.size() == 0)
return null;
InternetAddress[] ias = new InternetAddress[m_cc.size()];
m_cc.toArray(ias);
return ias;
} // getCcs
/**
* Add BCC Recipient
* @param newBcc EMail cc Recipient
* @return true if valid
*/
public boolean addBcc (String newBcc)
{
if (newBcc == null || newBcc.length() == 0)
return false;
InternetAddress ia = null;
try
{
ia = new InternetAddress (newBcc, true);
}
catch (Exception e)
{
log.log(Level.WARNING, newBcc + ": " + e.getMessage());
return false;
}
if (m_bcc == null)
m_bcc = new ArrayList<InternetAddress>();
m_bcc.add (ia);
return true;
} // addBcc
/**
* Get BCC Recipients
* @return Recipient's internet address
*/
public InternetAddress[] getBccs()
{
if (m_bcc == null || m_bcc.size() == 0)
return null;
InternetAddress[] ias = new InternetAddress[m_bcc.size()];
m_bcc.toArray(ias);
return ias;
} // getBccs
/**
* Set Reply to Address
* @param newTo email address
* @return true if valid
*/
public boolean setReplyTo (String newTo)
{
if (newTo == null || newTo.length() == 0)
return false;
InternetAddress ia = null;
try
{
ia = new InternetAddress (newTo, true);
}
catch (Exception e)
{
log.log(Level.WARNING, newTo + ": " + e.toString());
return false;
}
m_replyTo = ia;
return true;
} // setReplyTo
/**
* Get Reply To
* @return Reoly To internet address
*/
public InternetAddress getReplyTo()
{
return m_replyTo;
} // getReplyTo
/**************************************************************************
* Set Subject
* @param newSubject Subject
*/
public void setSubject(String newSubject)
{
if (newSubject == null || newSubject.length() == 0)
m_valid = false;
else
m_subject = newSubject;
} // setSubject
/**
* Get Subject
* @return subject
*/
public String getSubject()
{
return m_subject;
} // getSubject
/**
* Set Message
* @param newMessage message
*/
public void setMessageText (String newMessage)
{
if (newMessage == null || newMessage.length() == 0)
m_valid = false;
else
{
m_messageText = newMessage;
if (!m_messageText.endsWith("\n"))
m_messageText += "\n";
}
} // setMessage
/**
* Get MIME String Message - line ending with CRLF.
* @return message
*/
public String getMessageCRLF()
{
if (m_messageText == null)
return "";
char[] chars = m_messageText.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < chars.length; i++)
{
char c = chars[i];
if (c == '\n')
{
int previous = i-1;
if (previous >= 0 && chars[previous] == '\r')
sb.append(c);
else
sb.append("\r\n");
}
else
sb.append(c);
}
// log.fine("IN " + m_messageText);
// log.fine("OUT " + sb);
return sb.toString();
} // getMessageCRLF
/**
* Set HTML Message
* @param html message
*/
public void setMessageHTML (String html)
{
if (html == null || html.length() == 0)
m_valid = false;
else
{
m_messageHTML = html;
if (!m_messageHTML.endsWith("\n"))
m_messageHTML += "\n";
}
} // setMessageHTML
/**
* Set HTML Message
* @param subject subject repeated in message as H2
* @param message message
*/
public void setMessageHTML (String subject, String message)
{
m_subject = subject;
StringBuffer sb = new StringBuffer("<HTML>\n")
.append("<HEAD>\n")
.append("<TITLE>\n")
.append(subject + "\n")
.append("</TITLE>\n")
.append("</HEAD>\n");
sb.append("<BODY>\n")
.append("<H2>" + subject + "</H2>" + "\n")
.append(message)
.append("\n")
.append("</BODY>\n");
sb.append("</HTML>\n");
m_messageHTML = sb.toString();
} // setMessageHTML
/**
* Get HTML Message
* @return message
*/
public String getMessageHTML()
{
return m_messageHTML;
} // getMessageHTML
/**
* Add file Attachment
* @param file file to attach
*/
public void addAttachment (File file)
{
if (file == null)
return;
if (m_attachments == null)
m_attachments = new ArrayList<Object>();
m_attachments.add(file);
} // addAttachment
/**
* Add url based file Attachment
* @param url url content to attach
*/
public void addAttachment (URL url)
{
if (url == null)
return;
if (m_attachments == null)
m_attachments = new ArrayList<Object>();
m_attachments.add(url);
} // addAttachment
/**
* Add attachment.
* (converted to ByteArrayDataSource)
* @param data data
* @param type MIME type
* @param name name of attachment
*/
public void addAttachment (byte[] data, String type, String name)
{
ByteArrayDataSource byteArray = new ByteArrayDataSource (data, type).setName(name);
addAttachment (byteArray);
} // addAttachment
/**
* Add arbitary Attachment
* @param dataSource content to attach
*/
public void addAttachment (DataSource dataSource)
{
if (dataSource == null)
return;
if (m_attachments == null)
m_attachments = new ArrayList<Object>();
m_attachments.add(dataSource);
} // addAttachment
/**
* Set the message content
* @throws MessagingException
* @throws IOException
*/
private void setContent ()
throws MessagingException, IOException
{
m_msg.setSubject (getSubject ());
// Simple Message
if (m_attachments == null || m_attachments.size() == 0)
{
if (m_messageHTML == null || m_messageHTML.length () == 0)
m_msg.setContent (getMessageCRLF(), "text/plain;charset=UTF-8");
else
m_msg.setDataHandler (new DataHandler
(new ByteArrayDataSource (m_messageHTML, "text/html;charset=UTF-8")));
//
log.fine("(simple) " + getSubject());
}
else // Multi part message ***************************************
{
// First Part - Message
MimeBodyPart mbp_1 = new MimeBodyPart();
mbp_1.setText("");
if (m_messageHTML == null || m_messageHTML.length () == 0)
mbp_1.setContent (getMessageCRLF(), "text/plain;charset=UTF-8");
else
mbp_1.setDataHandler (new DataHandler
(new ByteArrayDataSource (m_messageHTML, "text/html;charset=UTF-8")));
// Create Multipart and its parts to it
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp_1);
log.fine("(multi) " + getSubject() + " - " + mbp_1);
// for all attachments
for (int i = 0; i < m_attachments.size(); i++)
{
Object attachment = m_attachments.get(i);
DataSource ds = null;
if (attachment instanceof File)
{
File file = (File)attachment;
if (file.exists())
ds = new FileDataSource (file);
else
{
log.log(Level.WARNING, "File does not exist: " + file);
continue;
}
}
else if (attachment instanceof URL)
{
URL url = (URL)attachment;
ds = new URLDataSource (url);
}
else if (attachment instanceof DataSource)
ds = (DataSource)attachment;
else
{
log.log(Level.WARNING, "Attachement type unknown: " + attachment);
continue;
}
// Attachment Part
MimeBodyPart mbp_2 = new MimeBodyPart();
mbp_2.setDataHandler(new DataHandler(ds));
mbp_2.setFileName(ds.getName());
log.fine("Added Attachment " + ds.getName() + " - " + mbp_2);
mp.addBodyPart(mbp_2);
}
// Add to Message
m_msg.setContent(mp);
} // multi=part
} // setContent
/**************************************************************************
* Set SMTP Host or address
* @param newSmtpHost Mail server
*/
public void setSmtpHost(String newSmtpHost)
{
if (newSmtpHost == null || newSmtpHost.length() == 0)
m_valid = false;
else
m_smtpHost = newSmtpHost;
} // setSMTPHost
/**
* Get Mail Server name or address
* @return mail server
*/
public String getSmtpHost()
{
return m_smtpHost;
} // getSmtpHosr
/**
* Is Info valid to send EMail
* @return true if email is valid and can be sent
*/
public boolean isValid()
{
return m_valid;
} // isValid
/**
* Re-Check Info if valid to send EMail
* @param recheck if true check main variables
* @return true if email is valid and can be sent
*/
public boolean isValid (boolean recheck)
{
if (!recheck)
return m_valid;
// From
if (m_from == null
|| m_from.getAddress().length() == 0
|| m_from.getAddress().indexOf(' ') != -1)
{
log.warning("From is invalid=" + m_from);
return false;
}
// To
InternetAddress[] ias = getTos();
if (ias == null)
{
log.warning("No To");
return false;
}
for (int i = 0; i < ias.length; i++)
{
if (ias[i] == null
|| ias[i].getAddress().length() == 0
|| ias[i].getAddress().indexOf(' ') != -1)
{
log.warning("To(" + i + ") is invalid=" + ias[i]);
return false;
}
}
// Host
if (m_smtpHost == null || m_smtpHost.length() == 0)
{
log.warning("SMTP Host is invalid" + m_smtpHost);
return false;
}
// Subject
if (m_subject == null || m_subject.length() == 0)
{
log.warning("Subject is invalid=" + m_subject);
return false;
}
return true;
} // isValid
/**
* String Representation
* @return info
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("EMail[");
sb.append("From:").append(m_from)
.append(",To:").append(getTo())
.append(",Subject=").append(getSubject())
.append ("]");
return sb.toString ();
} // toString
/**************************************************************************
* Test.
* java -cp CTools.jar;CClient.jar org.compiere.util.EMail main info@compiere.org jjanke@compiere.org "My Subject" "My Message"
* --
* If you get SendFailedException: 550 5.7.1 Unable to relay for ..
* Check:
* - Does the SMTP server allow you to relay
* (Exchange: SMTP server - Access)
* - Did you authenticate (setEmailUser)
* @param args Array of arguments
*/
public static void main (String[] args)
{
org.compiere.Compiere.startup(true);
if (args.length != 5)
{
System.out.println("Parameters: smtpHost from to subject message");
System.out.println("Example: java org.compiere.util.EMail mail.acme.com joe@acme.com sue@acme.com HiThere CheersJoe");
System.exit(1);
}
EMail email = new EMail(System.getProperties(), args[0], args[1], args[2], args[3], args[4]);
email.send();
} // main
} // EMail
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -