如何使用org.apache.commons.mail发送邮件

1.前言
使用Apache-commons-email发送邮件需要这三个jar包:commons-email-1.0.jarmail.jaractivition.jar
第一个包下载地址http://jakarta.apache.org/site/downloads/downloads_commons-email.cgi
后两个包在Sun上下载jaf-1_1-fr.zipjavamail-1_4.zip。其中有所需要的jar包。
 
2.发送简单邮件
下面这段代码是发送一个简单邮件的流程代码,你可以将其封装成一个方法,供调用。
SimpleEmail email = new SimpleEmail();
email.setHostName("mail.myserver.com");//指定SMTP server
email.addTo("[email protected]", "John Doe");//指定接收方地址与名字
email.setFrom("[email protected]", "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");
 
或者如下方法:

工程目录结构如下:

以下给出两个简单示例程序

// SendMail.java 使用SimpleEmail发邮件

package com.apache.commons.email.demo;

import org.apache.commons.mail.SimpleEmail;

public class SendMail
{
    public static void main ( String[] arg ) throws Exception
    {
    // 使用SimpleEmail对于中文内容,可能会产生乱码
        SimpleEmail email = new SimpleEmail ( );

        // SMTP服务器名
        email.setHostName ( "smtp.163.com" );
        // 登陆邮件服务器的用户名和密码
        email.setAuthentication ( "peki", "123456" );
        // 接收人
        email.addTo ( "", "曦勤" );
        // 发送人
        email.setFrom ( "", "小陈" );
        // 标题
        email.setSubject ( "Test message" );
        // 邮件内容
        email.setMsg ( "This is a simple test of commons-email
我是小陈" );
        // 发送
        email.send ( );
       
        System.out.println ( "Send email successful!" );

    }
}

收信结果如下:

This is a simple test of commons-email
????

有乱码产生,并且html内容没有正常显示

// MailSender.java   使用HtmlEmail发邮件

package com.apache.commons.email.demo;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

public class MailSender {


public static void main(String[] args) {
   // 不要使用SimpleEmail,会出现乱码问题
   HtmlEmail email = new HtmlEmail();
   try {
    // 这里是SMTP发送服务器的名字:,163的如下:
    email.setHostName("smtp.163.com");
    // 字符编码集的设置
    email.setCharset("gbk");
    // 收件人的邮箱
    email.addTo("");
    // 发送人的邮箱
    email.setFrom("", "小陈");
    // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
    email.setAuthentication("peki", "123456");
    email.setSubject("下午3:00会议室讨论,请准时参加");
    // 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签
    email.setMsg("下午3:00会议室讨论,请准时参加
呵呵~!");
    // 发送
    email.send();
   
    System.out.println ( "邮件发送成功!" );
   } catch (EmailException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println ( "邮件发送失败!" );
   }

}

}

收信结果如下:

下午3:00会议室讨论,请准时参加
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("[email protected]", "John Doe");
 email.setFrom("[email protected]", "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相同含义。
发送附件的这两个方法没有考虑处理中文文件名的问题,大家可自己添加。
 

你可能感兴趣的:(JAVA)