Apache-commons-email发送邮件

所需要引入的包:commons-email-1.2.jar(apache官网下载),mail.jar(sun官网下载),activation.jar(sun官网下载,如果你使用的jdk是1.6以上,这个包就可以不下载了,因为jdk1.6已经包括了)

直接上代码吧。

PropertiesUtils类:

    import java.io.IOException;  
    import java.io.InputStream;  
    import java.util.Properties;  
      
    /** 
     *@author liudonggan Email:ldg123456@sina.com 
     *@date 2011-7-20 上午11:29:14 
     *@version v1.0 
     **/  
    public class PropertiesUtils {  
      
        private static InputStream inputStream=null;  
      
        public static String getProperties(String propertyName) throws Exception  
        {  
            String _propertyName="";  
            inputStream=PropertiesUtils.class.getClassLoader().getResourceAsStream("config.properties");  
            Properties p = new Properties();     
            try {     
                p.load(inputStream);     
            } catch (IOException e1) {  
                inputStream.close();  
            }  
            _propertyName=p.get(propertyName).toString();  
            inputStream.close();  
            return _propertyName;  
        }  
    }  
MailUtils类:

    import java.io.File;  
    import java.util.ArrayList;  
    import java.util.List;  
      
    import org.apache.commons.mail.EmailAttachment;  
    import org.apache.commons.mail.MultiPartEmail;  
      
    import com.ys.product.bean.UserEmail;  
    /** 
     *@author liudonggan Email:ldg123456@sina.com 
     *@date 2011-7-20 上午10:49:41 
     *@version v1.0 
     **/  
    public class MailUtils {  
      
        /** 
          * sendMail 方法 
          * <p>方法说明:</p> 
          * @param path附件路迳 
          * @param subject邮件主题 
          * @param msg邮件内容 
          * @throws Exception 
          * @return void 
          * @author liudonggan Email:ldg123456@sina.com 
          * @date 2011-7-20 上午11:39:37 
        */  
        public void sendMail(String path,List<UserEmail> emails,String subject,String msg) throws Exception  
        {  
            MultiPartEmail email = new MultiPartEmail();  
            //SimpleEmail email = new SimpleEmail();  
            // 设置邮件编码  
            email.setCharset("UTF-8");  
            // 设置邮件服务器  
            email.setHostName(PropertiesUtils.getProperties("mail.smtp"));  
            // 设置登录邮件服务器用户名和密码  
            email.setAuthentication(PropertiesUtils.getProperties("mail.email"), PropertiesUtils.getProperties("mail.pwd"));  
            // 添加收件人  
            for(UserEmail _email:emails)  
            {  
                email.addTo(_email.getEmailName(), _email.getTitle());  
            }  
            // 设置发件人  
            email.setFrom(PropertiesUtils.getProperties("mail.email"), "liudonggan");  
            // 设置邮件标题  
            email.setSubject(subject);  
            // 设置邮件正文内容  
            email.setMsg(msg);  
            // 要发送的附件  
            EmailAttachment attachment = new EmailAttachment();  
            File file = new File(path);  
            attachment.setPath(file.getPath());  
            attachment.setName(file.getName());  
            // 设置附件描述  
            attachment.setDescription(subject);  
            // 设置附件类型  
            attachment.setDisposition(EmailAttachment.ATTACHMENT);  
            // 添加附件  
            email.attach(attachment);  
            // 发送邮件  
            email.send();  
        }  
        public static void main(String[] arg) throws Exception  
        {  
            MailUtils mail=new MailUtils();  
            UserEmail _email=new UserEmail();  
            _email.setEmailName("20493351@qq.com");  
            _email.setTitle("XX标题");  
            List<UserEmail> emails=new ArrayList<UserEmail>();  
            emails.add(_email);  
            mail.sendMail("c:\\test.pdf",emails,"XX标题","内容");  
        }  
    }  

总结:

发送简单邮件

下面这段代码是发送一个简单邮件的流程代码,你可以将其封装成一个方法,供调用。
SimpleEmail email = new SimpleEmail();
email.setHostName( "mail.myserver.com" ); //指定SMTP server
email.addTo( "jdoe@somewhere.org" , "John Doe" ); //指定接收方地址与名字
email.setFrom( "me@apache.org" , "Me" ); //指定发送方地址与名字
email.setSubject( "Test message" ); //指定邮件标题
email.setMsg( "This is a simple test of commons-email" ); //指定邮件内容
email.send(); //发送
注意,文件内容为中文,会出现乱码,解决方法如下:
email.setMsg( "This is a simple test of commons-email" );
替换为
email.setContent( "This is a simple test of commons-email" , "text/plain;charset=GBK" );
  
3 .发送带附件的邮件
下面这段代码是发送一个带附件邮件的流程代码,你可以将其封装成一个方法,供调用。
// Create the attachment
   EmailAttachment attachment = new EmailAttachment();
   attachment.setPath( "mypictures/john.jpg" ); //指定附件在本地的路径
   attachment.setDisposition(EmailAttachment.ATTACHMENT);
   attachment.setDescription( "Picture of John" ); //附件描述
   attachment.setName( "John" ); //附件名称
  
   // Create the email message
   MultiPartEmail email = new MultiPartEmail();
   email.setHostName( "mail.myserver.com" );
   email.addTo( "jdoe@somewhere.org" , "John Doe" );
   email.setFrom( "me@apache.org" , "Me" );
   email.setSubject( "The picture" );
   email.setMsg( "Here is the picture you wanted" );
  
   // add the attachment
   email.attach(attachment);
  
   // send the email
   email.send();
  
同样,你可以指定一个在网络上的附件,只要给出该附件的地址,将上文绿色代码部分替换为下面这句。
attachment.setURL( new URL( "http://www.apache.org/images/asf_logo_wide.gif" ));
注意,如果你的附件的名称是中文时,同样会出现乱码,解决的方法如下。
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription( "Picture of John" ); //附件描述
attachment.setName( "需传送的附件" ); //附件名称
attachment.setName(MimeUtility.encodeText( "需传送的附件.txt" ));
  
4 .示例代码
下面给出了一个SendMail.java,将上述方法封装成一个 class
其中,构造子初始化所有最基本的变量,即发送简单邮件时所使用的变量,看变量名称即可“望文生义”。
public SendMail(String hostSMTP, String toMailAddress, String toMailUser,
                      String fromMailAddress, String fromMailUser, String mailSubject,
                      String mailMessage) {
方法send()可发送一个简单邮件。
方法sendAttchment (String path,String des,String name)可发送一个带附件的邮件。其中,path指定附件在本地的物理路径,des指定附件的描述,name指定附件名。
方法sendAttachmentWithUrl (URL url,String des,String name)可发送一个指定附件URL的邮件。其中,url指定附件的URL,其余参数和sendAttachment相同含义。
发送附件的这两个方法没有考虑处理中文文件名的问题,大家可自己添加。
import java.net.URL;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

public class SendMail {
	private String hostSMTP;

	private String toMailAddress;

	private String toMailUser;

	private String fromMailAddress;

	private String fromMailUser;

	private String mailSubject;

	private String mailMessage;
	
	private String attachmentPath;
	
	private String attachmentDescription;
	
	private String attachmentName;
	
	private URL attachmentUrl;

	
	
	public SendMail(String hostSMTP, String toMailAddress, String toMailUser,
			String fromMailAddress, String fromMailUser, String mailSubject,
			String mailMessage) {
		this.hostSMTP = hostSMTP;
		this.toMailAddress = toMailAddress;
		this.toMailUser = toMailUser;
		this.fromMailAddress = fromMailAddress;
		this.fromMailUser = fromMailUser;
		this.mailSubject = mailSubject;
		this.mailMessage = mailMessage;
	}

	public String send() {
		SimpleEmail email = new SimpleEmail();
		try {
			email.setHostName(hostSMTP);
			email.addTo(toMailAddress, toMailUser);
			email.setFrom(fromMailAddress, fromMailUser);
			email.setSubject(mailSubject);
                        //email.setMsg(mailMessage);//如果是中文会产生乱码,由下句解决
			email.setContent(mailMessage, "text/plain;charset=GBK");//避免中文乱码
			email.send();
                        return ("mail send.");
		} catch (EmailException e) {
			return (e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param path Your attachment local path.
	 * @param des Your attachment description.
	 * @param name Your attachment name.
	 * @return mail send or failed.
	 */
	public String sendAttchment(String path,String des,String name){
		attachmentPath = path;
		attachmentDescription = des;
		attachmentName = name;
		EmailAttachment attachment = new EmailAttachment();
		attachment.setPath(attachmentPath);
		attachment.setDisposition(EmailAttachment.ATTACHMENT);
		attachment.setDescription(attachmentDescription);
		attachment.setName(attachmentName);
		MultiPartEmail email = new MultiPartEmail();
		try {
			email.setHostName(hostSMTP);
			email.addTo(toMailAddress, toMailUser);
			email.setFrom(fromMailAddress, fromMailUser);
			email.setSubject(mailSubject);
			email.setMsg(mailMessage);
			// add the attachment
			email.attach(attachment);
			// send the email
			email.send();
			return ("mail send.");
		} catch (EmailException e) {
			return (e.getMessage());
		}
	}
	
	/**
	 * @param url Your attachment URL path.
	 * @param des Your attachment description.
	 * @param name Your attachment name.
	 * @return mail send or failed.
	 */
	public String sendAttachmentWithUrl(URL url,String des,String name){
		attachmentUrl=url;
		attachmentDescription = des;
		attachmentName = name;
		EmailAttachment attachment = new EmailAttachment();
		attachment.setURL(attachmentUrl);//such as ("http://www.apache.org/images/asf_logo_wide.gif")
		attachment.setDisposition(EmailAttachment.ATTACHMENT);
		attachment.setDescription(attachmentDescription);
		attachment.setName(attachmentName);
		MultiPartEmail email = new MultiPartEmail();
		try {
			email.setHostName(hostSMTP);
			email.addTo(toMailAddress, toMailUser);
			email.setFrom(fromMailAddress, fromMailUser);
			email.setSubject(mailSubject);
			email.setMsg(mailMessage);
            // add the attachment
			email.attach(attachment);
            //send the email
			email.send();
			return ("mail send.");
		}catch (EmailException e) {
			return (e.getMessage());
		}
	}

	/**
	 * The main class for test
	 */
	public static void main(String[] args) {
		SendMail sendMail = new SendMail("www.zj-email.com",
				"Gu@zj-email.com", "Gu", "me@zj.org",
				"Michael", "来自zj",
				"测试中文");
		System.out.println(sendMail.send());
	}

public String getFromMailAddress() {
		return fromMailAddress;
	}

	public void setFromMailAddress(String fromMailAddress) {
		this.fromMailAddress = fromMailAddress;
	}

	public String getFromMailUser() {
		return fromMailUser;
	}

	public void setFromMailUser(String fromMailUser) {
		this.fromMailUser = fromMailUser;
	}

	public String getHostSMTP() {
		return hostSMTP;
	}

	public void setHostSMTP(String hostSMTP) {
		this.hostSMTP = hostSMTP;
	}

	public String getMailMessaage() {
		return mailMessage;
	}

	public void setMailMessaage(String mailMessaage) {
		this.mailMessage = mailMessaage;
	}

	public String getMailSubject() {
		return mailSubject;
	}

	public void setMailSubject(String mailSubject) {
		this.mailSubject = mailSubject;
	}

	public String getToMailAddress() {
		return toMailAddress;
	}

	public void setToMailAddress(String toMailAddress) {
		this.toMailAddress = toMailAddress;
	}

	public String getToMailUser() {
		return toMailUser;
	}

	public void setToMailUser(String toMailUser) {
		this.toMailUser = toMailUser;
	}

	public String getAttachmentDescription() {
		return attachmentDescription;
	}

	public void setAttachmentDescription(String attachmentDescription) {
		this.attachmentDescription = attachmentDescription;
	}

	public String getAttachmentName() {
		return attachmentName;
	}

	public void setAttachmentName(String attachmentName) {
		this.attachmentName = attachmentName;
	}

	public String getAttachmentPath() {
		return attachmentPath;
	}

	public void setAttachmentPath(String attachmentPath) {
		this.attachmentPath = attachmentPath;
	}
	
	public URL getAttachmentUrl() {
		return attachmentUrl;
	}

	public void setAttachmentUrl(URL attachmentUrl) {
		this.attachmentUrl = attachmentUrl;
	}

 }


5 .参考资料
[ 1 ]Apache-commons-emai guide, http: //jakarta.apache.org/commons/email/userguide.html
[ 2 ] javamail 一些资源,http: //www.360doc.com/showWeb/0/0/18285.aspx

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值