javamail 发送邮件简单例子

前几天,做预警项目需要添加一个发送邮件的功能,由于本人刚刚接触java,还不甚懂。网上找了一个例子,略加修改,即完成…………

例子地址:http://www.blogjava.net/wangfun/archive/2009/04/15/265748.html

下面开始一步步来讲(大牛勿喷~~):

step1.

下载jar包:javax.mail:mail:1.4.7,当然,如果你是用的gradle那就直接在build.gradle中添加compile ‘javax.mail:mail:1.4.7‘然后刷新gradle就可以了~

step2.添加MailSenderInfo.java

package com.util.mail;
/**
* 发送邮件需要使用的基本信息
*author by wangfun
http://www.5a520.cn 小说520
*/
import java.util.Properties;
public class MailSenderInfo {
    // 发送邮件的服务器的IP和端口
    private String mailServerHost;
    private String mailServerPort = "25";
    // 邮件发送者的地址
    private String fromAddress;
    // 邮件接收者的地址
    private String toAddress;
    // 登陆邮件发送服务器的用户名和密码
    private String userName;
    private String password;
    // 是否需要身份验证
    private boolean validate = false;
    // 邮件主题
    private String subject;
    // 邮件的文本内容
    private String content;
    // 邮件附件的文件名
    private String[] attachFileNames;
    /**
      * 获得邮件会话属性
      */
    public Properties getProperties(){
      Properties p = new Properties();
      p.put("mail.smtp.host", this.mailServerHost);
      p.put("mail.smtp.port", this.mailServerPort);
      p.put("mail.smtp.auth", validate ? "true" : "false");
      return p;
    }
    public String getMailServerHost() {
      return mailServerHost;
    }
    public void setMailServerHost(String mailServerHost) {
      this.mailServerHost = mailServerHost;
    }
    public String getMailServerPort() {
      return mailServerPort;
    }
    public void setMailServerPort(String mailServerPort) {
      this.mailServerPort = mailServerPort;
    }
    public boolean isValidate() {
      return validate;
    }
    public void setValidate(boolean validate) {
      this.validate = validate;
    }
    public String[] getAttachFileNames() {
      return attachFileNames;
    }
    public void setAttachFileNames(String[] fileNames) {
      this.attachFileNames = fileNames;
    }
    public String getFromAddress() {
      return fromAddress;
    }
    public void setFromAddress(String fromAddress) {
      this.fromAddress = fromAddress;
    }
    public String getPassword() {
      return password;
    }
    public void setPassword(String password) {
      this.password = password;
    }
    public String getToAddress() {
      return toAddress;
    }
    public void setToAddress(String toAddress) {
      this.toAddress = toAddress;
    }
    public String getUserName() {
      return userName;
    }
    public void setUserName(String userName) {
      this.userName = userName;
    }
    public String getSubject() {
      return subject;
    }
    public void setSubject(String subject) {
      this.subject = subject;
    }
    public String getContent() {
      return content;
    }
    public void setContent(String textContent) {
      this.content = textContent;
    }
}   

step3. 添加SimpleMailSender.java

package com.util.mail;   

import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;    

/**
* 简单邮件(不带附件的邮件)发送器   */
public class SimpleMailSender  {
/**
  * 以文本格式发送邮件
  * @param mailInfo 待发送的邮件的信息
  */
    public boolean sendTextMail(MailSenderInfo mailInfo) {
      // 判断是否需要身份认证
      MyAuthenticator authenticator = null;
      Properties pro = mailInfo.getProperties();
      if (mailInfo.isValidate()) {
      // 如果需要身份认证,则创建一个密码验证器
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
      }
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
      try {
      // 根据session创建一个邮件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      Address from = new InternetAddress(mailInfo.getFromAddress());
      // 设置邮件消息的发送者
      mailMessage.setFrom(from);
      // 创建邮件的接收者地址,并设置到邮件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      mailMessage.setRecipient(Message.RecipientType.TO,to);
      // 设置邮件消息的主题
      mailMessage.setSubject(mailInfo.getSubject());
      // 设置邮件消息发送的时间
      mailMessage.setSentDate(new Date());
      // 设置邮件消息的主要内容
      String mailContent = mailInfo.getContent();
      mailMessage.setText(mailContent);
      // 发送邮件
      Transport.send(mailMessage);
      return true;
      } catch (MessagingException ex) {
          ex.printStackTrace();
      }
      return false;
    }    

    /**
      * 以HTML格式发送邮件
      * @param mailInfo 待发送的邮件信息
      */
    public static boolean sendHtmlMail(MailSenderInfo mailInfo){
      // 判断是否需要身份认证
      MyAuthenticator authenticator = null;
      Properties pro = mailInfo.getProperties();
      //如果需要身份认证,则创建一个密码验证器
      if (mailInfo.isValidate()) {
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
      }
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
      try {
      // 根据session创建一个邮件消息
      Message mailMessage = new MimeMessage(sendMailSession);
      // 创建邮件发送者地址
      Address from = new InternetAddress(mailInfo.getFromAddress());
      // 设置邮件消息的发送者
      mailMessage.setFrom(from);
      // 创建邮件的接收者地址,并设置到邮件消息中
      Address to = new InternetAddress(mailInfo.getToAddress());
      // Message.RecipientType.TO属性表示接收者的类型为TO
      mailMessage.setRecipient(Message.RecipientType.TO,to);
      // 设置邮件消息的主题
      mailMessage.setSubject(mailInfo.getSubject());
      // 设置邮件消息发送的时间
      mailMessage.setSentDate(new Date());
      // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
      Multipart mainPart = new MimeMultipart();
      // 创建一个包含HTML内容的MimeBodyPart
      BodyPart html = new MimeBodyPart();
      // 设置HTML内容
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
      mainPart.addBodyPart(html);
      // 将MiniMultipart对象设置为邮件内容
      mailMessage.setContent(mainPart);
      // 发送邮件
      Transport.send(mailMessage);
      return true;
      } catch (MessagingException ex) {
          ex.printStackTrace();
      }
      return false;
    }
}   

step4.添加MyAuthenticator.java

package com.util.mail;   

import javax.mail.*;   

public class MyAuthenticator extends Authenticator{
    String userName=null;
    String password=null;   

    public MyAuthenticator(){
    }
    public MyAuthenticator(String username, String password) {
        this.userName = username;
        this.password = password;
    }
    protected PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(userName, password);
    }
}   

step5.

类都加好了,下面就开始测试了~~~

public static void main(String[] args){
         //这个类主要是设置邮件
      MailSenderInfo mailInfo = new MailSenderInfo();
      mailInfo.setMailServerHost("smtp.163.com");
      mailInfo.setMailServerPort("25");
      mailInfo.setValidate(true);
      mailInfo.setUserName("[email protected]");
      mailInfo.setPassword("**********");//您的邮箱密码
      mailInfo.setFromAddress("[email protected]");
      mailInfo.setToAddress("[email protected]");
      mailInfo.setSubject("设置邮箱标题 如http://www.guihua.org 中国桂花网");
      mailInfo.setContent("设置邮箱内容 如http://www.guihua.org 中国桂花网 是中国最大桂花网站==");
         //这个类主要来发送邮件
      SimpleMailSender sms = new SimpleMailSender();
          sms.sendTextMail(mailInfo);//发送文体格式
          sms.sendHtmlMail(mailInfo);//发送html格式
    }  

最后,原作者还给出朋友们几个注意的地方: 
1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。 
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中 
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。 
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");mailInfo.setFromAddress("[email protected]");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。 
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

在这里有加一条

这里的发送邮件是可以一次发送多人的,但是只要有一个人的邮件格式不正确,那么此次发送给的所有人都不会成功,具体写法如下:

// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
//!!!!!!!修改的在这个地方下面!!!!!!!!!
//  Address to = new InternetAddress(mailInfo.getToAddress());
//群发邮件,判断有几个收件人
List<String> list = addressList(mailInfo.getToAddress());
final int num = list.size();
InternetAddress[] addresses = new InternetAddress[num];
for (int i = 0; i < num; i++) {
             addresses[i] = new InternetAddress(list.get(i));
}

// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipients(Message.RecipientType.TO, addresses);
 //**截取收件人
    private static List<String> addressList(String toAddress) {
        List<String> list = new ArrayList<>();
        if (toAddress.trim().indexOf(",") != -1) {
            String[] arrs = toAddress.split(",");
            for (String arr : arrs) {
                if (!arr.equals("")) {
                    list.add(arr);
                }
            }
        } else {
            list.add(toAddress);
        }
        return list;
    }

当然,你也可以把toaddress设置成list<string>类型,这个就自己去试试吧………………

时间: 2024-07-28 15:48:41

javamail 发送邮件简单例子的相关文章

JavaMail发送邮件小例子

package Demo1; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class

javamail发送邮件的简单实例(转)

javamail发送邮件的简单实例 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可. 第一个类:MailSenderInfo.java package com.util.mail;    /**    * 发送邮件需要使用的基本信息  *author by wangfun http://www.5a520.cn 小说520   */  

JavaMail发送邮件

发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁 bcc字段   -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁 邮件体指的就是邮件的具体内容. 使用JavaMail创建邮件和发送邮件 JavaMail创建的邮件是基于MIME协议的.因此可以使用Java

javamail发送邮件(转)

今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可.jar包因为我不知道怎么传到javaeye上,所以朋友们回去自己打吧. 我的代码有三个类: 第一个类:MailSenderInfo.java Java代码   package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Pr

C#设计模式---观察者模式简单例子

在开发过程中经常遇到一个模块中的 一个方法调用了其他模块中相关的方法 比如说在一个系统中,如果出现了错误,就调用专门进行错误处理的模块中的方法进行错误处理 而因为错误处理的操作有很多,所以将这些具体的操作封装在其他的模块中 在专门进行错误处理的模块中调用其他模块中的错误操作方法 这样一来在主系统中只要实例化专门进行错误处理的模块对象 并调用其相关的方法,其他模块中的具体方法也都会被执行 这时专门进行错误处理的模块被称为发布者 其他拥有具体错误操作的模块称为订阅者 只要发布者一发布信息(方法被调用

SSM框架+Javamail发送邮件

本博客介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实也是Foxmail邮箱 先要了解一下SMTP协议和SSL加密 SMTP:称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效.可靠的邮件传输.SMTP是一种请求响应的协议,也就是客户机向远程服务器发送请求,服务器响应,监听端口是25,所以其工作模式有两种:发送SMTP,接收SMTP SSL加密:用来保障浏

关于c#邮件发送的简单例子

这里所说的发送邮件,以发送qq邮件为例. 首先我们先要在自己的邮箱配置好如下选项: 在这一步我们首先要开启服务pop3/smtp,其次要记录下自己的邮箱地址和生成的授权码,然后在自己的c#中写如下代码: 1 public static void SendEmail() 2 { 3 MailMessage msg = new MailMessage(); 4 msg.To.Add("");//收件人地址 5 //msg.CC.Add("");//抄送人地址 6 7 m

使用JavaMail发送邮件-no object DCH for MIME type multipart/mixed报错解决

最近需要实现一个使用Spring schedule按一定时间间隔自动触发条件发送邮件的功能,在开发的过程中,是按照先测试能发出text/html文本邮件,然后测试添加附件发送邮件,我碰到的问题是,文本邮件能正常发送出来,但是添加附件的邮件却发不出来,这个问题困扰了我很久,所以有必要记录下. 报错内容:"javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed" 初

使用JavaMail发送邮件和接受邮件

一. 为什么要学习JavaMail 为什么要学习JavaMail开发? 现在很多WEB应用在开发时都需要集成邮件发送功能,例如: 1. 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail. 2. 给过生日的注册会员自动发送一封表示祝贺的E-Mail. 3. 将网站的最新活动信息通过E-Mail发送给所有的注册会员. 二. 邮件服务器和协议 1. 邮件服务器: 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.so