文档章节

用javaMail API实现邮件发送

本人慧星撞地球
 本人慧星撞地球
发布于 2015/11/04 10:17
字数 1144
阅读 10
收藏 0

使用javaMial API 实现邮件发送大体需要三个类组合完成:设置邮件的类,身份验证类和邮件发送类。

设置邮件的类主要是设置邮件的Property.比如,发送服务器地址,接收服务器地址,模拟登陆登陆邮件发送服务器时必须知道的登录名和密码,是否需要身份验证等一些属性信息。

当用代码模拟客户端登陆邮箱并试图发送邮件的时候,有些邮箱需要身份验证,否则的话会报553 authentication is required,smtp*的错误。

邮件发送类主要用来建立邮件会话javax.mail.Session,设置邮件内容等javax.mail.Message,javax.mail.Address代表邮件地址,javax.mail.Transport类根据指定的邮件发送协议,通过指定的邮件发送服务器来发送邮件。

邮件的形式可以分成纯文本、HTML、或者是再带上附件。

设置邮件类:

import java.util.Properties;

/**

 * 设置邮件

 * @author user

 *

 */

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;  

   }  

//get() set()方法省略

}

身份验证类:

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

/**

 *身份验证

 * @author user

 *

 */

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);  

    }  

}  

发送邮件类:

import java.util.Date;

import java.util.Properties;

 

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

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 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);  

              

            //设置信件的附件(用本地上的文件作为附件)  

            html = new MimeBodyPart();  

            FileDataSource fds = new FileDataSource("D:\\javamail.doc");  

            DataHandler dh = new DataHandler(fds);  

            html.setFileName("javamail.doc");  

            html.setDataHandler(dh);  

            mainPart.addBodyPart(html);  

              

            // 将MiniMultipart对象设置为邮件内容  

            mailMessage.setContent(mainPart);  

            mailMessage.saveChanges();  

              

            // 发送邮件  

            Transport.send(mailMessage);  

            return true;  

        } catch (MessagingException ex) {  

            ex.printStackTrace();  

        }  

        return false;  

    }  

}  

测试类:

public class SendMail {  

    

    public static void main(String[] args) {  

        SendMail.send_163();  

    }  

      

    // 163邮箱  

    public static void send_163() {  

        // 这个类主要是设置邮件  

        MailSenderInfo mailInfo = new MailSenderInfo();  

        mailInfo.setMailServerHost("smtp.163.com");  

        mailInfo.setMailServerPort("25");  

        mailInfo.setValidate(true);  

        mailInfo.setUserName("***@163.com"); // 实际发送者  

        mailInfo.setPassword("***");// 您的邮箱密码  

        mailInfo.setFromAddress("***@163.com"); // 设置发送人邮箱地址  

        mailInfo.setToAddress("***@163.com"); // 设置接受者邮箱地址  

        mailInfo.setSubject("hello");  

        mailInfo.setContent("morning");  

        // 这个类主要来发送邮件  

        SimpleMailSender sms = new SimpleMailSender();  

        sms.sendTextMail(mailInfo); // 发送文体格式  

        sms.sendHtmlMail(mailInfo); // 发送html格式  

    }  

}  

 

© 著作权归作者所有

上一篇: 正则表达式1
下一篇: Junit4
本人慧星撞地球
粉丝 0
博文 24
码字总数 10716
作品 0
朝阳
程序员
私信 提问
刚刚学习到的Android使用Javamail通过XOauth调用Gmail API发送邮件的方法

前景知识:OAuth,Javamail-android,Javamail api in android using XOauth 我的一个App项目需要在Service中自动发送邮件的功能,因为是后台自动发送邮件,不能出现邮件UI所以需要使用Javam...

since1986
2014/04/12
789
0
Android发送email(不用javamail)

学习android开发中…… 看了一些发送email的方法,不调用的话基本就都是用的javamail 可是我在实际验证过程中发现javamail好像和android并不很兼容呢,2.2都没有问题,再高就各种bug 大神们能...

garfieldo
2014/05/13
417
0
通过JavaMail访问Hotmail邮箱

相信许多人都有MSN聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮...

红薯
2008/10/05
2.7K
7
JavaMail深入体验开发二: JavaMail的体系结构及发送复杂邮件

一 . 电子邮件传输的全过程: 二 . JavaMail 的体系结构与API分类 JavaMail API按其功能划分通常可分为如下三大类: 创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例...

长平狐
2012/09/03
464
0
邮件发送失败:Mail server connection failed; 501 Syntax: HELO hostname

出现这个问题,是系统利用javamail组件发送邮件,Javamail在提取本地hostname的时候会dig 改hostname,然后以改ip发送邮件。 由于hostname对应的ip地址,linux无法解析(如果是windows则无这...

红薯
2011/10/13
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 实战干货:基于配置的接口角色访问控制

1. 前言 欢迎阅读 Spring Security 实战干货 系列文章 。对于受限的访问资源,并不是对所有认证通过的用户开放的。比如 A 用户的角色是会计,那么他就可以访问财务相关的资源。B 用户是人事,...

码农小胖哥
4分钟前
1
0
vue admin template 轻量级 后台管理系统基础模板 vuecli4 分环境打包 统一管理接口地址

本模板目的是为了能在创建项目的时候,减少不必要的时间浪费,例如api接口的封装、axios请求的封装以及基础布局等时间的浪费,故将基础功能提取出来作为公司内部的一个后台基础管理系统,为什...

羊皮卷
6分钟前
0
0
idea免费版注册码

https://www.jiweichengzhu.com/article/eb340e382d1d456c84a1d190db12755c

码农屌丝
6分钟前
0
0
跨越敏捷和devops的鸿沟

day2 更多的是理念思想和一些经验的分享吧 先来个鸡汤: 每个人都有自己的人生高山去攀越,技术人也有技术的高山,不是人生的全部,但又不可缺少的,我们要选对方向,找对方法去坚持去爬山...

ikki8776
6分钟前
2
0
MyEclipse教程:JPA开发(数据库)

1、配置JPA项目 JPA是类似于Hibernate的持久性规范,已成为Java EE 5规范的一部分。JPA使用Java 5注释来控制将普通Java类(POJO)映射到数据库表。 您可以通过创建任意受支持的基础项目类型(...

沫沫77
14分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部