JavaMail发送邮件

首先要先有mail.jar  activation.jar这两个jar包,把其导入到项目中

下载地址:mail.jar下载 

                 activation.jar下载

用163邮箱发送邮件

前提163邮箱开启POP3/SMTP服务授权

在设置----->POP3/SMTP/IMAP里,开通POP3/SMTP服务

 Email.java

package email;

import java.util.Map;

public class Email {
	 // 收件人
    private String[] toEmails;

    // 抄送人
    private String[] ccEmails;

    // 密送人
    private String[] bccEmails;

    // 邮件主题
    private String subject;

    // 邮件内容
    private String content;

    // 附件
    private String[] attachments;

    // 内嵌图片
    private Map<String, String> imagesMap;

	public String[] getToEmails() {
		return toEmails;
	}

	public void setToEmails(String[] toEmails) {
		this.toEmails = toEmails;
	}

	public String[] getCcEmails() {
		return ccEmails;
	}

	public void setCcEmails(String[] ccEmails) {
		this.ccEmails = ccEmails;
	}

	public String[] getBccEmails() {
		return bccEmails;
	}

	public void setBccEmails(String[] bccEmails) {
		this.bccEmails = bccEmails;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String[] getAttachments() {
		return attachments;
	}

	public void setAttachments(String[] attachments) {
		this.attachments = attachments;
	}

	public Map<String, String> getImagesMap() {
		return imagesMap;
	}

	public void setImagesMap(Map<String, String> imagesMap) {
		this.imagesMap = imagesMap;
	}


}

EmailDao.java

 

package email;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
public class EmailDao {
	 // 发件人的中文昵称
    private static final String nickname = "银杏叶";

    // 发件人在邮箱服务器中的用户名
    private static final String username = "XXX@163.com";

    // 发件人在邮箱服务器中的授权码
    private static final String password = "XXX";

    // 邮件的发送协议
    private static final String protocol = "smtp";

    // 邮件发送的服务器
    private static final String host = "smtp.163.com";

    // 邮件的监听端口号
   private static final String port = "25";
  
  
   public static boolean sendEmail(Email email) {
	   
       try {

           // 创建Session实例对象
           /*
            * Session类用于定义整个JavaMail应用程序所需要的环境信息,
            * 以及收集客户端与邮件服务器建立网络连接会话信息,如邮件
            * 服务器的主机号、端口号、采用的邮件发送和接收的协议等。
            */
           Session session = createSession();

           // 创建MimeMessage实例对象
           MimeMessage message =createMessage(session, email);

           // 发送邮件
           /*
            * send方法执行邮件发送任务时,它首先从参数Message对象中获得Session对象,
            * 然后调用Session.getTransport方法获得用于发送邮件邮件的Transport实例对象,
            * 接着使用保存在Session对象中的与网络链接相关的JavaMail属性,调用Transport
            * 对象的connect方法连接邮件服务器,然后调用Transport对象的sendMessage方法
            * 发送邮件,最后调用close方法断开与邮件服务器的连接。
            */
           Transport.send(message);

           return true;
       } catch (Exception e) {
           System.out.println("发送邮件异常==》");
           e.printStackTrace();
           return false;
       } finally {
           System.out.println("邮件发送结束...");
       }
   }
private static MimeMessage createMessage(Session session, Email email) throws AddressException, UnsupportedEncodingException, MessagingException {
    // 创建MimeMessage实例对象:表示整封邮件
	 
	MimeMessage message = new MimeMessage(session);

    // 设置发件人
    if (!nickname.isEmpty()) {
        // 自定义发件人昵称
        message.setFrom(new InternetAddress(MimeUtility.encodeText(nickname) + " <" + username + ">"));
    } else {
        message.setFrom(new InternetAddress(username));
    }

    // 设置收件人
    String[] toEmails = email.getToEmails();
    if (toEmails != null && toEmails.length != 0) {
        // InternetAddress类表示电子邮件的地址
        InternetAddress[] internetAddressTO = new InternetAddress[toEmails.length];
        for (int i = 0; i < toEmails.length; i++) {
            internetAddressTO[i] = new InternetAddress(toEmails[i]);
        }
        // Message.RecipientType表示收件人的类型,它是Message类中的一个静态内部类
        // TO 收件人 CC 抄送人 BCC 密送人
        message.setRecipients(Message.RecipientType.TO, internetAddressTO);
    }

    // 设置密送人
    String[] bccEmails = email.getBccEmails();
    if (bccEmails != null && bccEmails.length != 0) {
        InternetAddress[] internetAddressBCC = new InternetAddress[bccEmails.length];
        for (int i = 0; i < bccEmails.length; i++) {
            internetAddressBCC[i] = new InternetAddress(bccEmails[i]);
        }
        message.setRecipients(Message.RecipientType.BCC, internetAddressBCC);
    }

    // 设置抄送人
    String[] ccEmails = email.getCcEmails();
    if (ccEmails != null && ccEmails.length != 0) {
        InternetAddress[] internetAddressCC = new InternetAddress[ccEmails.length];
        for (int i = 0; i < ccEmails.length; i++) {
            internetAddressCC[i] = new InternetAddress(ccEmails[i]);
        }
        message.setRecipients(Message.RecipientType.CC, internetAddressCC);
    }

    // 设置发生日期
    message.setSentDate(new Date());

    // 设置邮件主题
    message.setSubject(email.getSubject());

    // 设置纯文本的邮件内容
    message.setText(email.getContent());

    // 保存并生成最终的邮件内容
    message.saveChanges();

    return message;

}
private static Session createSession() {
    // 封装属性参数
	
    Properties props = new Properties();
    props.setProperty("mail.transport.protocol", protocol); // 邮件传输的协议
    props.setProperty("mail.smtp.host", host); // 邮件的服务器
    props.setProperty("mail.smtp.port", port); // 邮件的监听端口
    props.setProperty("mail.smtp.auth", "true"); // 是否需要验证设置为TRUE,使用授权码发送邮件需要验证

    // 获取与服务器的会话Session对象
    /*
     * getInstance和getDefaultInstance是Session的静态方法,都可以用来获取Session类的实例对象。
     * 两个方法的区别在于:
     * getDefaultInstance方法返回一个Session对象后,将把这个Session对象设置为默认的Session对象,
     * 以后每一次调用getDefaultInstance方法都会返回这个默认Session对象;
     * 而getInstance方法则是每次调用都会返回一个新的Session对象。
     */
    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            // 登陆账号及密码,密码需要是第三方授权码
            /*
             * 调用Session对象中注册的Authenticator对象,从中获取的用户认证信息后传递给邮件服务器
             * PasswordAuthentication根据指定的用户名和密码创建实例对象
             */
            return new PasswordAuthentication(username, password);
        }
    });

    return session;
}

 
}

Testmain.java

package email;

public class Testmain {
	 public static Email togetEmail(String body){
		   //发件人
	   	   String to = "XXX@qq.com";
		   // 抄送人邮箱地址
		   String cc = "XXX@qq.com";
		   // 密送人邮箱地址
		   String bcc = "XXX@163.com";
		   // 邮件的主题
		    String subject = "邮件的主题";
		    Email email=new Email();
			email.setToEmails(to.split(";"));
			email.setCcEmails(cc.split(";"));
			email.setBccEmails(bcc.split(";"));
			email.setSubject(subject);
			email.setContent(body);
			return email;

	 }
	public static void main(String[] args) {
		   // 邮件正文的文本内容
		   String body = "我发送了一个测试邮件,注意查收";
           Email e=new Email();
           e=togetEmail(body);
	       EmailDao emaildao=new EmailDao();   
           Boolean status=emaildao.sendEmail(e);
	       if (status){
              System.out.println("邮件发送成功!");
           } else {
             System.out.println("邮件发送失败!请及时解决!");
           }
	}
}

结果显示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值