Skip to main content

Sending email by JavaMail API



The JavaMail API is not part of core Java SE, but an optional extension. In addition, it is required in Java Enterprise Edition. The JavaMail packages can be accessed in two ways :
  • by placing j2ee.jar in the classpath
  • or, by placing both mail.jar and activation.jar in the classpath
The javax.mail API uses a properties file for reading server names and related configuration. These settings will override any system defaults. Alternatively, the configuration can be set directly in code, using the JavaMail API.


*********Sample code***************


import java.io.File;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;





/**
* Handles sending email and attachments.
*/

public final class Emailer {

                /** */
                private String server = null;
                /** */
                private String smtpAuthUser="";
                /** */
                private String smtpAuthPassword="";

                /**
                * Method EmailHelper.
                *
                 * @param server
                */
                public Emailer(String server) {
                                super();
                                this.server = server;
                }
               
                /**
                * @param server
                * @param smtpAuthUser
                * @param smtpAuthPassword
                */
                public Emailer(String server,String smtpAuthUser,String smtpAuthPassword) {
                                super();
                                this.server = server;
                                this.smtpAuthUser=smtpAuthUser;
                                this.smtpAuthPassword=smtpAuthPassword;
                }

                /**
                * Sends an email with the supplied content/attachments to the supplied
                * recipients. Set attachments as null if there are no attachments
                *
                 * @param tos
                *            java.lang.String the email addresses to send to, each
                *            separated by a comma
                * @param from
                *            java.lang.String the email address sent from
                * @param ccs
                *            java.lang.String the email addresses of ccs, each separated by
                *            a comma
                * @param bcs
                *            java.lang.String the email addresses of bcs, each separated by
                *            a comma
                * @param subject
                *            java.lang.String the subject of the email to send
                * @param content
                *            java.lang.String the content of the email to send
                * @param attachments
                *            com.wiree.rapide.dto.AttachmentList the attachments to be
                *            sent.
                * @exception javax.mail.MessagingException
                *                if any of the email addresses are of an illegal format, or
                *                if there is an error with reading attachment files, or if
                *                the message can not be sent
                */
                public final void send(String tos, String from, String ccs, String bcs, String subject, String content) throws javax.mail.MessagingException {

                                // Set properties for the session
                                Properties properties = new Properties();
                                properties.put("mail.smtp.host", server);

                                // Get default session instance with system properties
                                Session session = Session.getDefaultInstance(properties);

                                // Create Message instance for the Session
                                Message msg = new MimeMessage(session);

                                // create recipient object
                                InternetAddress addressRecipients = new InternetAddress();

                                // create from object
                                InternetAddress addressFrom = new InternetAddress(from);

                                // Set Message content and properties
                                msg.setRecipients(Message.RecipientType.TO, addressRecipients.parse(tos));
                                msg.setRecipients(Message.RecipientType.CC, addressRecipients.parse(ccs));
                                msg.setRecipients(Message.RecipientType.BCC, addressRecipients.parse(bcs));
                                msg.setFrom(addressFrom);
                                msg.setSubject(subject);

                       
                                                msg.setContent(content, "text/plain");
                               

                                // Send Message
                                Transport.send(msg);
                }

                /**
                * Sends an authenticated email with the supplied content/attachments to the supplied
                * recipients. Set attachments as null if there are no attachments
                *
                 * @param tos
                *            java.lang.String the email addresses to send to, each
                *            separated by a comma
                * @param from
                *            java.lang.String the email address sent from
                * @param ccs
                *            java.lang.String the email addresses of ccs, each separated by
                *            a comma
                * @param bcs
                *            java.lang.String the email addresses of bcs, each separated by
                *            a comma
                * @param subject
                *            java.lang.String the subject of the email to send
                * @param content
                *            java.lang.String the content of the email to send
                * @param attachments
                *            com.wiree.rapide.dto.AttachmentList the attachments to be
                *            sent.
                * @exception javax.mail.MessagingException
                *                if any of the email addresses are of an illegal format, or
                *                if there is an error with reading attachment files, or if
                *                the message can not be sent
                *  @throws IllegalArgumentException smtpAuthUser, smtpAuthPassword is not set
                */
                public final void sendAuthenticated(String tos, String from, String ccs, String bcs, String subject, String content) throws javax.mail.MessagingException {

                                if (smtpAuthUser == null || smtpAuthUser.equals(""))
                                                throw new IllegalArgumentException("smtpAuthUser has not been found");
                                if (smtpAuthPassword == null || smtpAuthPassword.equals(""))
                                                throw new IllegalArgumentException("smtpAuthPassword has not been found");
                               
                               
                                // Set properties for the session
                                Properties properties = new Properties();
                                properties.put("mail.smtp.host", server);
                                properties.put("mail.transport.protocol", "smtp");
                                properties.put("mail.smtp.auth", "true");
                               
                                Authenticator auth = new SMTPAuthenticator();
                               
                                // Get default session instance with system properties
                                Session session = Session.getDefaultInstance(properties, null);

                                // Create Message instance for the Session
                                Message msg = new MimeMessage(session);

                                // create recipient object
                                InternetAddress addressRecipients = new InternetAddress();

                                // create from object
                                InternetAddress addressFrom = new InternetAddress(from);

                                // Set Message content and properties
                                msg.setRecipients(Message.RecipientType.TO, addressRecipients.parse(tos));
                                msg.setRecipients(Message.RecipientType.CC, addressRecipients.parse(ccs));
                                msg.setRecipients(Message.RecipientType.BCC, addressRecipients.parse(bcs));
                                msg.setFrom(addressFrom);
                                msg.setSubject(subject);
                           
                                                msg.setContent(content, "text/plain");
                               

                                // Send Message
                                Transport.send(msg);
                }            
               
               
                private class SMTPAuthenticator extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
           String username = smtpAuthUser;
           String password = smtpAuthPassword;
           return new PasswordAuthentication(username, password);
        }
    }

               
               
                /**
                * Validate an email address. Parse the given string and find the email
                * address and check it complies to the RFC822 standard
                *
                 * @param text
                * @return boolean
                * @throws IllegalArgumentException
                *             if a text param is null or empty if email is null
                */
                public static boolean validateEmail(String text, StringBuffer email) {

                                if (text == null && text.equals(""))
                                                throw new IllegalArgumentException("text parameter is empty");
                                if (email == null)
                                                throw new IllegalArgumentException("email parameter is empty");

                                // String text = "duncanmorton@rapide.co.uk";
                                System.out.println(text);
                                String[] textValues = text.split(" ");

                                boolean validEmail = false;
                                for (int i = 0; i < textValues.length; i++) {

                                                try {
                                                                System.out.println(textValues[i]);
                                                                if (isValidEmailAddress(textValues[i])) {
                                                                                email.append(textValues[i]);
                                                                                return true;
                                                                }
                                                } catch (AddressException e) {
                                                                // Invalid email found. This is thrown by isValidEmailAddress
                                                                // for any string that is not a valid email
                                                }

                                }

                                return validEmail;
                }

                /**
                * Validate an email address. Check the email address complies to the RFC822
                * standard and the address is in lowercase
                *
                 * @param email
                * @return boolean
                * @throws AddressException
                *             - if the parsing failed
                * @throws IllegalArgumentException
                *             if a email param does not comply.
                */
                public static boolean isValidEmailAddress(String email) throws AddressException {
                                if (email == null && email.equals(""))
                                                throw new IllegalArgumentException("email parameter is empty");
                                // *Parameters:
                                // *address - the address in RFC822 format
                                // *strict - enforce RFC822 syntax
                                InternetAddress emailAddr = new InternetAddress(email);

                                // Set the email pattern string
                                Pattern p = Pattern.compile(".+@.+\\.[a-z]+");

                                // Match the given string with the pattern
                                Matcher m = p.matcher(email);

                                // check whether match is found
                                boolean matchFound = m.matches();

                                if (matchFound) {
                                                return true;
                                } else {
                                                return false;
                                }

                }
               
               
               static String  SMTP_SERVER="";
               static String   ERROR_ALERT_EMAIL_ADDRESSES="dongnan.zheng@..";
               static   String EMAIL_FROM="..@..";
               static  String SERVICE_NAME="L....";

               
                public static void main( String... aArguments ){
               
                Emailer emailer = new Emailer(SMTP_SERVER);

                try {
emailer.send(ERROR_ALERT_EMAIL_ADDRESSES, EMAIL_FROM, "",
                 "", SERVICE_NAME, "testemail");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

                }
}

*********************************************************************************


运行测试报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 。

原因:
MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。
J2EE5中mail.jar包定义的只是接口,没有实现,是不能真正发送邮件的,但开发编译肯定是可以过去的,因为我们是针对J2EE规范编的程 序。而运行期用Sun公司的JavaMail1.4的实现才可以开始发送邮件,

解决:
在MyEclipse目录下,找javaee.jar包,用WinRar打开,删除里面的mail目录


Comments

Popular posts from this blog

How to install JSVC on Linux WidenHome Log | WidenHome Log

How to install JSVC on Linux WidenHome Log | WidenHome Log In our team, we have a lot of Java standalone applications which should be run as daemon on Unix/Linux system, and we found JSVC is the best choice for us to wrap Java programs to daemons. This article records the steps on how to install JSVC executable on Linux, which is our stage/prod environment. Download JSVC source package First of all, we need to download JSVC source package from this URL: http://commons.apache.org/daemon/download_daemon.cgi , for example, I downloaded commons-daemon-1.0.5-src.tar.gz file. Or, download it via wget: wget -c http://apache.etoak.com/commons/daemon/source/commons-daemon-1.0.5-src.tar.gz Build JSVC executable Unzip the source package and build JSVC executable. chmod 755 commons-daemon-1.0.5-src.tar.gz tar zxvf commons-daemon-1.0.5-src.tar.gz cd commons-daemon-1.0.5-src/src/native/unix Before building the JSVC executable, please make sure you have set JAVA_HOME variable correctly. And make sur...

Java中的Serializable浅谈

from  http://www.cnblogs.com/vicenteforever/articles/1471775.html 对象的串行化(Serialization) 一、串行化的概念和目的 1.什么是串行化             对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization) 。串行化的主要任务是写出对象实例变量的数值。如果交量是另一对象的引用,则引用的对象也要串行化。这个过程是递归的,串行化可能要涉及一个复杂树结构的单行化,包括原有对象、对象的对象、对象的对象的对象等等。对象所有权的层次结构称为图表(graph)。 2.串行化的目的             Java对象的单行化的目标是为Java的运行环境提供一组特性,如下所示: 1)       尽量保持对象串行化的简单扼要 ,但要提供一种途径使其可根据开发者的要求进行扩展或定制。 2)       串行化机制应严格遵守Java的对象模型 。对象的串行化状态中应该存有所有的关于种类的安全特性的信息。 3)       对象的串行化机制应支持Java的对象持续性。 4)       对象的串行化机制应有足够的 可扩展能力以支持对象的远程方法调用(RMI)。 5)       对象串行化应允许对象定义自身 的格式即其自身的数据流表示形式,可外部化接口来完成这项功能。 什么情况下需要序列化 a)当...

Log4j Configuration

First, include  Log4j   jar file in your project (e.g. log4j-1.2.8.jar) From  http://www.javabeat.net/tips/82-baisc-steps-to-configure-log4j-using-xml-and.html Configure Log4j This example demonstrated how to configure  Log4j  setup using the Proerties file and  XML file . These are the two most widely used techniques for configuring the  Log4j  for your application. But, in the recent days configuring with  properties files  are considered to be old technique and recommended using  XML . This example program uses simple satndalone java program for running the example. But, in most of the  project  scenarios it will be used in the web application. However the configuration file will be the same. log4j.properties # Set root logger level to DEBUG and its only appender to Appender1. log4j.rootLogger=INFO, Appender1,Appender2 # Appender1 is set to be a ConsoleAppender. log4j.appender.Appender1=org.apache...