利用java发邮件

网站发送邮件是一个常用功能,现在有相当一部分网站用户注册都需要通过Email验证合法性,而用javamail比较繁琐,apache又做了一件好事:在javamail的基础上封装java发送邮件业务,让用户可以通过简单的调用几个方法就可以实现邮件发送与接收。
  首先,这篇文章的测试环境是:jdk 1.6+MyEclipse 5.5.1 GA+javamail 1.4(在控制台测试的,所以没用到应用服务器)。
  然后在apache官网上下载Commons Email,下面是几个用Commons Email发邮件的方法。


package com.zhutou.email;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;
/**
* 用apache的Commons Email发送邮件
*
* @author www.5ipig.com/blog
*/
public class JavaMail {
  /**
   * 用apache的Commons Email发送不含附件的邮件
   *
   * @return 发送结果,是否发送成功
   */
  public String sendSingleMail() {
    String resultmsg = "发信失败!";
    SimpleEmail email = new SimpleEmail();
    email.setHostName("smtp.163.com");
    try {
      email.addTo("[email protected]", "ajonjun");
      email.setFrom("[email protected]", "ajonjun");
      // 请修改成你的邮箱账号和密码。
      email.setAuthentication("username", "password");
      email.setSubject("发信测试标题");
      email.setMsg("This is a simple test of commons-email");
      resultmsg = email.send();
      if (resultmsg != null) {
        resultmsg = "发送成功!";
      }
    } catch (EmailException e) {
      e.printStackTrace();
    }
    return resultmsg;
  }
  /**
   * 发送单个带附件的邮件
   *
   * @return 发送结果,是否发送成功
   */
  public String sendAttachmentsMail() {
    String resultmsg = "发信失败!";
    // 创建一个附件对象
    EmailAttachment attachment = new EmailAttachment();
    // 设置附件的地址,可以是本机地址(包括绝对地址和相对地址),
    //也可以是internet地址,如:http://www.5ipig.com/blog/attachment.php?fid=2
    attachment.setPath("E:\\1.jpg");
    attachment.setDisposition(EmailAttachment.ATTACHMENT);
    attachment.setDescription("Picture of gaylys");
    attachment.setName("gaylys");
    // 创建多文本邮件对象
    MultiPartEmail email = new MultiPartEmail();
    email.setHostName("smtp.163.com");
    try {
      email.addTo("[email protected]", "ajonjun");
      email.setFrom("[email protected]", "ajonjun");
      // 请修改成你的邮箱账号和密码。
      email.setAuthentication("username", "password");
      email.setSubject("带附件的邮件");
      email.setMsg("Here is the picture you wanted");
      // 将附件添加到邮件
      email.attach(attachment);
      // 发送邮件
      resultmsg = email.send();
      if (resultmsg != null && !"".equals(resultmsg)) {
        resultmsg = "发送成功!";
      }
    } catch (EmailException e) {
      e.printStackTrace();
    }
    return resultmsg;
  }
  /**
   * 发送html邮件
   *
   * @return 发送结果,是否发送成功
   */
  public String sendHtmlEmail() {
    String resultmsg = "发信失败!";
    // 创建邮件对象
    HtmlEmail email = new HtmlEmail();
    email.setHostName("smtp.163.com");
    try {
      email.addTo("[email protected]", "ajonjun");
      email.setFrom("[email protected]", "ajonjun");
      // 请修改成你的邮箱账号和密码。
      email.setAuthentication("username", "password");
      email.setSubject("发送html邮件的测试");
      // 嵌入附件地址
      URL url = new URL(
          "http://www.5ipig.com/blog/attachment.php?fid=2");
      String cid = email.embed(url, "3D桌面");
      // 设置编码格式,不设置会出现中文乱码。
      email.setCharset("GB2312");
      // 写入html代码
      email.setHtmlMsg("3D桌面 - <img src="\" alt="" />");
      // 设置替代文字
      email
          .setTextMsg("Your email client does not support HTML messages");
      // 发送邮件
      resultmsg = email.send();
      if (resultmsg != null && !"".equals(resultmsg)) {
        resultmsg = "发送成功!";
      }
    } catch (EmailException e) {
      e.printStackTrace();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }
    return resultmsg;
  }
  public static void main(String args[]) {
    JavaMail mail = new JavaMail();
    System.out.println(mail.sendHtmlEmail());
  }
}


  java发送邮件的基本方法也就这些,当然还有群发,我看了下,Commons Email好像没提供群发的功能,不过如果你有这个需要可以自己写一个:收信人是多个,用”,”分隔,根据收信人数循环发送邮件,也就是多次调用发邮件的方法。
  如果你是按照以上步骤写的代码,却不能发送邮件,看看是不是下面的错误:
Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream或者javax.mail.NoSuchProviderException: smtp

解决方案: JavaEE版本和JavaMail的版本不一致,请将sun公司上下载最新版本.如果还报这个错,找到myeclipse环境中的javaee.jar 包,用winrar或者其他解压缩工具打开,删除mail跟activation包,因为javaee.jar中的mail与javamail冲突。

没问题了。

你可能感兴趣的:(java,apache,PHP,javaee,MyEclipse)