📄 email.java
字号:
catch (SQLException e)
{
s_log.error ("getSmtpHost", e);
}
//
return SMTP;
} // getCurrentSMTPHost
/** Getter/Setter ********************************************************/
/**
* Create Authentificator for User
* @param username user name
* @param password user password
*/
public void setEMailUser (String username, String password)
{
log.debug("setEMailUser " + username);
m_auth = new EMailAuthenticator (username, password);
} // setEmailUser
/**
* Try to set Authentication
*/
private void setEMailUser ()
{
// already set
if (m_auth != null)
return;
//
String from = m_from.getAddress();
Properties ctx = m_ctx == null ? Env.getCtx() : m_ctx;
//
String email = Env.getContext(ctx, CTX_EMAIL);
String usr = Env.getContext(ctx, CTX_EMAIL_USER);
String pwd = Env.getContext(ctx, CTX_EMAIL_USERPW);
if (from.equals(email) && usr.length() > 0 && pwd.length() > 0)
{
setEMailUser (usr, pwd);
return;
}
email = Env.getContext(ctx, CTX_REQUEST_EMAIL);
usr = Env.getContext(ctx, CTX_REQUEST_EMAIL_USER);
pwd = Env.getContext(ctx, CTX_REQUEST_EMAIL_USERPW);
if (from.equals(email) && usr.length() > 0 && pwd.length() > 0)
setEMailUser (usr, pwd);
} // setEMailUser
/**
* Get Sender
* @return Sender's internet address
*/
public InternetAddress getFrom()
{
return m_from;
} // getFrom
/**
* Set Sender
* @param newFrom Sender's email address
*/
public void setFrom(String newFrom)
{
if (newFrom == null)
{
m_valid = false;
return;
}
try
{
m_from = new InternetAddress (newFrom, true);
}
catch (Exception e)
{
log.error("setFrom", e);
m_valid = false;
}
} // setFrom
/**
* Add To Recipient
* @param newTo Recipient's email address
* @returns true if valid
*/
public boolean addTo (String newTo)
{
if (newTo == null || newTo.length() == 0)
{
m_valid = false;
return false;
}
InternetAddress ia = null;
try
{
ia = new InternetAddress (newTo, true);
}
catch (Exception e)
{
log.error("addTo", e);
m_valid = false;
return false;
}
if (m_to == null)
m_to = new ArrayList();
m_to.add(ia);
return true;
} // addTo
/**
* Get Recipient
* @return Recipient's internet address
*/
public InternetAddress getTo()
{
if (m_to == null || m_to.size() == 0)
return null;
InternetAddress ia = (InternetAddress)m_to.get(0);
return ia;
} // getTo
/**
* Get TO Recipients
* @return Recipient's internet address
*/
public InternetAddress[] getTos()
{
if (m_to == null || m_to.size() == 0)
return null;
InternetAddress[] ias = new InternetAddress[m_to.size()];
m_to.toArray(ias);
return ias;
} // getTos
/**
* Add CC Recipient
* @param newCc EMail cc Recipient
* @returns 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.error("addCc", e);
return false;
}
if (m_cc == null)
m_cc = new ArrayList();
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
* @returns 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.error("addBcc", e);
return false;
}
if (m_bcc == null)
m_bcc = new ArrayList();
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
* @returns 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.error("setReplyTo", e);
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.debug("IN " + m_messageText);
// log.debug("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();
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();
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();
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");
else
m_msg.setDataHandler (new DataHandler
(new ByteArrayDataSource (m_messageHTML, "text/html")));
//
log.debug("setContent (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");
else
mbp_1.setDataHandler (new DataHandler
(new ByteArrayDataSource (m_messageHTML, "text/html")));
// Create Multipart and its parts to it
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp_1);
log.debug("setContent (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.error("setContent - 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.error("setContent - Attachement type unknown: " + attachment);
continue;
}
// Attachment Part
MimeBodyPart mbp_2 = new MimeBodyPart();
mbp_2.setDataHandler(new DataHandler(ds));
mbp_2.setFileName(ds.getName());
log.debug("setContent - 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, re-evaluate email
* @return true if email is valid and can be sent
*/
public boolean isValid (boolean recheck)
{
// mandatory info
if (m_from == null || m_from.getAddress().length() == 0)
{
log.warn("isValid - From is invalid=" + m_from);
return false;
}
InternetAddress ia = getTo();
if (ia == null || ia.getAddress().length() == 0)
{
log.warn("isValid - To is invalid=" + m_to);
return false;
}
if (m_smtpHost == null || m_smtpHost.length() == 0)
{
log.warn("isValid - SMTP Host is invalid" + m_smtpHost);
return false;
}
if (m_subject == null || m_subject.length() == 0)
{
log.warn("isValid - Subject is invalid=" + m_subject);
return false;
}
return true;
} // isValid
/**
* Test
* java -cp CTools.jar;CClient.jar org.compiere.util.EMail main info@compiere.org jjanke@compiere.org "My Subject" "My Message"
* @param args Array of arguments
*/
public static void main (String[] args)
{
org.compiere.Compiere.startupClient ();
Log.setTraceLevel(9);
/** Test **/
EMail emailTest = new EMail("main", "jjanke@compiere.org", "jjanke@compiere.org", "TestSubject", "TestMessage");
// EMail emailTest = new EMail("main", "jjanke@compiere.org", "jjanke@yahoo.com");
// emailTest.addTo("jjanke@acm.org");
// emailTest.addCc("jjanke@yahoo.com");
// emailTest.setMessageHTML("My Subject1", "My Message1");
// emailTest.addAttachment(new File("C:\\Compiere2\\RUN_Compiere2.sh"));
// emailTest.setEMailUser("jjanke", "joergok");
emailTest.send();
System.exit(0);
/** Test */
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(args[0], args[1], args[2], args[3], args[4]);
email.send();
} // main
} // EMail
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -