最近在项目中开发中需要用到发送邮件功能,当后台定时任务处理完毕后通知调用者。Java Mail API使用比较麻烦,所以这里采用的是Apache Commons Email,官网地址:http://commons.apache.org/proper/commons-email/,Commons Email API比较简洁高效,学习起来也很快。写篇文章跟大家分享一下,有问题的可以留言!
1、发送简单文本邮件
2、发送带附件的邮件
- Email email = new SimpleEmail();
- email.setHostName("smtp.googlemail.com");
- email.setSmtpPort(465);
- email.setAuthenticator(new DefaultAuthenticator("username", "password"));
- email.setSSLOnConnect(true);
- email.setFrom("[email protected]");
- email.setSubject("TestMail");
- email.setMsg("This is a test mail ... :-)");
- email.addTo("[email protected]");
- email.send();
另外还可以通过任意的链接来将网络上的文件添加到附件中,例如:
- // 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();
3、发送html格式的邮件
- // Create the attachment
- EmailAttachment attachment = new EmailAttachment();
- attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
- attachment.setDisposition(EmailAttachment.ATTACHMENT);
- attachment.setDescription("Apache logo");
- attachment.setName("Apache logo");
- // 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 logo");
- email.setMsg("Here is Apache's logo");
- // add the attachment
- email.attach(attachment);
- // send the email
- email.send();
- // Create the email message
- HtmlEmail email = new HtmlEmail();
- email.setHostName("mail.myserver.com");
- email.addTo("[email protected]", "John Doe");
- email.setFrom("[email protected]", "Me");
- email.setSubject("Test email with inline image");
- // embed the image and get the content id
- URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
- String cid = email.embed(url, "Apache logo");
- // set the html message
- email.setHtmlMsg("<html>The apache logo - <img src=\"cid:"+cid+"\"></html>");
- // set the alternative message
- email.setTextMsg("Your email client does not support HTML messages");
- // send the email
- email.send();
4、发送带图片的HTML格式邮件
- // load your HTML email template
- String htmlEmailTemplate = ....
- // define you base URL to resolve relative resource locations
- URL url = new URL("http://www.apache.org");
- // create the email message
- HtmlEmail email = new ImageHtmlEmail();
- email.setDataSourceResolver(new DataSourceResolverImpl(url));
- email.setHostName("mail.myserver.com");
- email.addTo("[email protected]", "John Doe");
- email.setFrom("[email protected]", "Me");
- email.setSubject("Test email with inline image");
- // set the html message
- email.setHtmlMsg(htmlEmailTemplate);
- // set the alternative message
- email.setTextMsg("Your email client does not support HTML messages");
- // send the email
- email.send();
另外,在使用过程中发现Email.addTo一次只能添加一个联系人,如果想发送给多个人的话,需要使用for循环嵌套来实现,以下是一个简单的例子:
- public static void main(String[] args){
- String mailList = "[email protected];[email protected]";
- String[] list = mailList.split(";");
- for(int i=0;list!=null && i<list.length;i++){ //嵌套调用
- sendEmail(list[i]);
- }
- }
- public static void sendEmail(String target) {
- try{
- Email email = new SimpleEmail();
- email.setHostName("smtp.163.com");
- email.setSmtpPort(465);
- email.setAuthenticator(new DefaultAuthenticator("[email protected]","abc"));
- email.setSSLOnConnect(true);
- email.setFrom("[email protected]");
- email.addTo(target);
- email.setSubject("Test Mail");
- email.setMsg("This is a test mail");
- email.send();
- }catch (Exception e){
- e.printStackTrace();
- }
- }
详细教程可以参考官网UserGuide,链接:http://commons.apache.org/proper/commons-email/userguide.html
来源: http://www.phpxs.com/code/1001573/