`
阅读更多

需要jar包:activation.jar和mail.jar

都是来自网上。

我首先在src下建了一个properties文件,存放信息,这里就不写了。

下面是一个自己封装的邮件类:

/**
* 邮件类,一个邮件对象可以看作一封邮件
* 可以有多个附件。
* */
public class Email {
        // 发件人
        private static String from ;
       // smtp主机
       private static String host;
       //发件邮箱的用户名
       private static String username;
      //发件邮箱的密码
      private static String password;
       // smtp主机端口
      private static String port;
      private static MyAuthenticator myAuthenticator =null;
      private BodyPart mbpContent = null;
      private MimeMessage msg = null;
      private Multipart mp = null;
/*
* 读取配置文件,初始化参数
* */
       static{
                   Reader r = null;
                   try {
                              r = new FileReader(new File("src/mail.properties"));
                              Properties p = new Properties();
                             p.load(r); 
                             from = p.getProperty("from");
                             host = p.getProperty("host");
                             username = p.getProperty("username");
                             password = p.getProperty("password");
                             port = p.getProperty("port");
                             myAuthenticator = new MyAuthenticator(username,password);
                    } catch (FileNotFoundException e) {
                             e.printStackTrace();
                    } catch (IOException e) {
                             e.printStackTrace();
                    }finally{
                             try {
                                     if(r != null)
                                          r.close();
                            } catch (IOException e) {
                                   // TODO Auto-generated catch block
                                  e.printStackTrace();
                            }
                      }
 }
/**
* 构造方法,
* 根据props构建session
* 根据session构建MimeMessage对象,
* 创建MimeMultipart对象,并将其加入到MimeMessage对象中
* 创建BodyPart邮件正文,并将其加入到MimeMultipart对象中
* 设置发送者 和 时间
* */
public Email(){
                Properties props = new Properties();;
                props.put("mail.smtp.host", host);
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", port);
                Session session = Session.getDefaultInstance(props,myAuthenticator);
                msg = new MimeMessage(session);
                mp = new MimeMultipart();
                mbpContent = new MimeBodyPart();
               try {
                         msg.setFrom(new InternetAddress(from));
                         msg.setContent(mp);
                          mp.addBodyPart(mbpContent);
                         msg.setSentDate(new Date());
                 } catch (AddressException e) {
                         e.printStackTrace();
                 } catch (MessagingException e) {
                         e.printStackTrace(); 
                }
  }
/**
* 设置邮件主题
* @param subject 邮件主题
* */
public void setSubject(String subject){
        try {
               //解决中文乱码
               subject = MimeUtility.encodeText(subject);
               msg.setSubject(subject); 
         } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
          } catch (MessagingException e) {
                 e.printStackTrace();
          }
}
/**
* 设置接受者
* @param receiveUser 接受者地址
* */
public void setReceiveUser(String receiveUser){
         try {
                      InternetAddress[] address ={ new InternetAddress(receiveUser)};
                      msg.setRecipients(Message.RecipientType.TO, address);
          }catch (MessagingException e) {
                      e.printStackTrace();
          }
}
/**
* 设置邮件正文。
* @param content 邮件正文内容
* */
public void setContent(String content){
         try {
                   mbpContent.setText(content);
            } catch (MessagingException e) {
                   e.printStackTrace();
            }
}
/**
* 添加邮件附件,可以添加对个附件。
* @param affix 附件的地址
* @param affixName 附件的名字
* */
public void addFile(String affix,String affixName){
              BodyPart messageBodyPart= new MimeBodyPart();
             DataSource source = new FileDataSource(affix);
             try {
                      messageBodyPart.setDataHandler(new DataHandler(source));
                     //解决附件的中文乱码
                     try {
                           affixName = MimeUtility.encodeText(affixName);
                      } catch (UnsupportedEncodingException e) {
                             e.printStackTrace();
                       }
                      messageBodyPart.setFileName(affixName);
                      mp.addBodyPart(messageBodyPart);
              } catch (MessagingException e1) {
                         e1.printStackTrace();
             }
}
/**
* 发生邮件,利用工具类Transport实现
*/
public boolean sendMail() {
          try {
                     Transport.send(msg);
           } catch (MessagingException e) {
                      return false;
           } 
           return true; 
}

}
/**
* 继承至Authenticator
* 用于对邮件发送时的授权和验证
* */
class MyAuthenticator extends Authenticator{
           private String username; 
           private String password;

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

 

JAVA邮件发送的大致过程是这样的的:

1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。

2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。

3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。

4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。

5、使用javax.mail.Transport工具类发送邮件。

MimeMessage-----------相当于一个邮件,可以设置发件人,收件人啦等。

MimeMultipart-------------相当于邮件的正文和邮件的集合。邮件的正文和附件看是同样的东西。

MimeBodyPart-----------邮件的正文或附件。

Transport---------工具类,负责发送邮件。

 

javamail中BodyPart的setText与setContent的区别;
setContent可以指定发送内容的格式,如:html,plain等,
setText只发送纯文本格式的数据
注意:在设置html时,setContent(htmlString,"text/html;charset=\"utf-8\"");记得加上字符编码.

若邮件正文是为html,且其中有图片等元素。
需要mimeMuilpart.setSubType("related")
    mixed--------范围最大,可加文字或超文本,内嵌资源,附件
    related--------可加文字或超文本,内嵌资源
    alternative-----可加文字或超文本
bodypart.setContendID();<img src="cid:"/>---------------不会将图片以附件的形式显示出来,若不写,<img src="filename"/>,亦可以达到效果,但内嵌资源会以附件的形式在邮件里显示。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics